签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦 共享存储数据库集群 (10) -- DMDSC环境的备份与还原

2019-09-18 23:30 2641 0 原创 DM 达梦
作者: dave

DMDSC 集群备份还原的功能、语法与单节点数据库基本保持一致,关于备份恢复的内容参考我之前的博客:

DM7 达梦数据库 物理备份 相关概念说明
https://www.cndba.cn/dave/article/3594
DM7 达梦数据库 物理备份还原之 脱机备份(DMRMAN工具) 使用手册
https://www.cndba.cn/dave/article/3612
DM7 达梦 共享存储数据库集群 (6) — 搭建2节点的DMDSC 环境(DMASM)
https://www.cndba.cn/dave/article/3700

1 DMDSC 和单节点差异

达梦数据库中,备份还原的对象包括:表、表空间和数据库。http://www.cndba.cn/cndba/dave/article/3706

  1. 表备份还原的操作对象是数据页,而数据页是通过 BUFFER 获取的,与存储无关,因此 DMDSC 集群的表备份还原与单节点没有任何区别。

  2. 表空间备份只需要访问属于这个表空间的数据文件,并不需要备份归档日志,因此 DMDSC 集群的表空间备份与单节没有任何区别。表空间还原要求将表空间数据恢复到最新状态,需要重做归档日志,但 DMDSC 集群中本地归档往往是保存在本地磁盘中的,因此如何访问其他节点生成的归档日志,是 DMDSC 集群需要解决的问题。

  3. 数据库备份也需要访问所有节点的本地归档日志文件,同样需要解决如何访问其他节点的归档日志问题;另外,与单节点不同的是,DMDSC 集群备份过程中还需要记录备份开始和结束时各个节点的 LSN 信息,LSN 信息需要在节点间进行传递。数据库还原的过程就是从备份集中读取数据页并重新写入数据库文件中,而 DMDSC 集群的数据库文件是保存在共享存储中的,因此不要特别处理。但是,数据库的恢复操作有可能需要访问本地归档日志文件,因此也需要解决如何访问其他节点归档日志问题。 http://www.cndba.cn/cndba/dave/article/3706

    配置远程归档后,DMDSC 集群中各个节点接收其他节点发送的 REDO 日志,并保存在节点的本地目录后,DMDSC 集群备份恢复的使用方法与单节点基本保持一致。

DMDSC备份的注意事项:
  1. 配置远程归档时,必须同时配置本地归档。
  2. DMDSC 集群环境中,备份还原涉及到的 trace 文件路径、DUMP 命令的映射文件 路径、SHOW 命令的备份集信息输出文件路径都不支持 DMASM 类型文件。
  3. 在恢复过程中创建的数据文件,优先使用原始路径创建,如果创建失败,则会在 system_path 目录下创建。因此,在恢复结束后,需要检查一下是否有数据文件创建在本地磁盘上,如果有则需要用户手动执行 SQL,将这些文件重新存放到共享存储、或者 DMASM 文件系统中,确保数据文件可以被 DMDSC 集群中的所有节点访问。
  4. 如果需要访问 DMASM 文件系统,DMRMAN 必须设置 DCR_INI 参数,指定 DCR 的访问配置 。
  5. 还原操作指定 REUSE DMINI 选项时,会将备份集中的 dm.ini 参数更新还原节点上的 dm.ini 配置文件,DMDSC 集群中其他节点的 dm.ini 并不会更新,需要用户手动修改。

2 远程归档

2.1 远程归档说明

  远程归档(REMOTE ARCHIEVE)是将写入本地归档的 REDO 日志信息,发送到远程节点的指定归档目录中。DMDSC 集群中各个节点在配置 本地归档之外,再相互配置一个远程归档,就可以在任意一个节点的本地磁盘中,找到 DMDSC 集群所有节点产生的、完整的归档日志文件。远程归档的触发时机是,在 REDO 日志写入本地归档日志文件的同时,将 REDO 日志通过 MAL 系统发送给指定的数据库实例。

  远程归档与本地归档的主要区别是 REDO 日志写入的位置不同,本地归档将 REDO 日志写入数据库实例所在节点的磁盘,而远程归档则将 REDO 日志写入到其他数据库实例所在节点的指定归档目录。远程归档日志文件的命名规范和本地归档日志文件保持一致,都是以归档名+归档文件的创建时间进行组合命名。 http://www.cndba.cn/cndba/dave/article/3706

  远程归档与本地归档的另外一个区别就是归档失败的处理策略不同:本地归档写入失败 (比如磁盘空间不足),系统将会挂起;而远程归档失败则会直接将远程归档失效,不再发送 REDO 日志到指定数据库实例。当节点间网络恢复、或者远程节点重启成功后,系统会自动检测并恢复远程归档,继续发送新写入的 REDO 日志,但不会主动补齐故障期间的 REDO 日志。因此,在出现节点故障等情况下,远程归档的内容有可能是不完整的,而本地归档的内容肯定是完整的;如果备份还原恰好需要用到这段丢失的远程归档日志,那么可以从源端的本地归档拷贝、补齐这部分内容。 http://www.cndba.cn/cndba/dave/article/3706

2.2 配置远程归档

一般建议 DMDSC 集群中的节点,在配置本地归档之外,再交叉配置集群中所有其他节点的远程归档。查询 V$DM_ARCH_INI、V$ARCH_STATUS 等动态视图可以获取归档配置以及归档状态等相关信息。
远程归档必须双向配置,单向配置时目标实例上不会接收归档日志,归档状 态将会变成无效状态。

DM7 达梦数据库 重做日志管理 及 归档模式切换
https://www.cndba.cn/dave/article/3575

2.2.1 使用SQL命令配置归档

这里直接使用SQL命令启动:http://www.cndba.cn/cndba/dave/article/3706

http://www.cndba.cn/cndba/dave/article/3706

--节点2:
SQL>  alter database mount;
executed successfully
used time: 00:00:01.848. Execute id is 0.
SQL>  alter database add archivelog 'DEST=/dm/dmarch_rac2,TYPE=local,FILE_SIZE=128,space_limit=0';
executed successfully
used time: 91.821(ms). Execute id is 0.
SQL> alter database add archivelog 'DEST=RAC0,TYPE=REMOTE,INCOMING_PATH=/dm/dmarch_rac1,FILE_SIZE=128,space_limit=0';
executed successfully
used time: 20.745(ms). Execute id is 0.
SQL> 
SQL> alter database archivelog;
executed successfully
used time: 57.124(ms). Execute id is 0.
SQL> 
SQL> select arch_name,arch_type,arch_dest,arch_file_size from v$dm_arch_ini;

LINEID     ARCH_NAME      ARCH_TYPE ARCH_DEST       ARCH_FILE_SIZE
---------- -------------- --------- --------------- --------------
1          ARCHIVE_LOCAL1 LOCAL     /dm/dmarch_rac2 128
2          ARCH_REMOTE1   REMOTE    RAC0            128

used time: 13.051(ms). Execute id is 23.
SQL> 
SQL> alter database open;
executed successfully
used time: 00:00:06.267. Execute id is 0.
SQL> select * from V$ARCH_STATUS;

LINEID     ARCH_TYPE ARCH_DEST       ARCH_STATUS
---------- --------- --------------- -----------
1          LOCAL     /dm/dmarch_rac2 VALID
2          REMOTE    /dm/dmarch_rac1 VALID

used time: 18.522(ms). Execute id is 27.
SQL> 

--节点1:
SQL> alter database mount;
executed successfully
used time: 00:00:01.826. Execute id is 0.
SQL> alter database add archivelog 'DEST=/dm/dmarch_rac1,TYPE=local,FILE_SIZE=128,space_limit=0';                    
executed successfully
used time: 36.082(ms). Execute id is 0.
SQL> alter database add archivelog 'DEST=RAC1,TYPE=REMOTE,INCOMING_PATH=/dm/dmarch_rac2,FILE_SIZE=128,space_limit=0';
executed successfully
used time: 12.927(ms). Execute id is 0.
SQL> 
SQL> alter database archivelog;
executed successfully
used time: 88.375(ms). Execute id is 0.
SQL> 
SQL> select arch_name,arch_type,arch_dest,arch_file_size from v$dm_arch_ini;

LINEID     ARCH_NAME      ARCH_TYPE ARCH_DEST       ARCH_FILE_SIZE
---------- -------------- --------- --------------- --------------
1          ARCHIVE_LOCAL1 LOCAL     /dm/dmarch_rac1 128
2          ARCH_REMOTE1   REMOTE    RAC1            128

used time: 25.418(ms). Execute id is 3.
SQL> 
SQL> alter database open;
executed successfully
used time: 00:00:06.267. Execute id is 0.

2.2.2 查看归档文件

生成的配置文件在DMDSC的DB配置目录下rac0_config目录下:

节点1:
[dmdba@DMDSC_1 rac0_config]$ pwd
/dm/dmdbms/data/rac0_config
[dmdba@DMDSC_1 rac0_config]$ cat dmarch.ini 
#DaMeng Database Archive Configuration file
#this is comments

    ARCH_WAIT_APPLY      = 1        

[ARCHIVE_LOCAL1]
    ARCH_TYPE            = LOCAL        
    ARCH_DEST            = /dm/dmarch_rac1        
    ARCH_FILE_SIZE        = 128        
    ARCH_SPACE_LIMIT        = 0        

[ARCH_REMOTE1]
    ARCH_TYPE            = REMOTE        
    ARCH_DEST            = RAC1        
    ARCH_INCOMING_PATH    = /dm/dmarch_rac2        
    ARCH_FILE_SIZE        = 128        
    ARCH_SPACE_LIMIT        = 0        

[dmdba@DMDSC_1 rac0_config]$ 

节点2:
[dmdba@DMDSC_2 data]$ cd rac1_config/
[dmdba@DMDSC_2 rac1_config]$ ls
dmarch.ini  dm.ini  dmmal.ini  dmsql.buf1568792680573949.buf  dmtimer.ini  sqllog.ini  trace
[dmdba@DMDSC_2 rac1_config]$ cat dmarch.ini 
#DaMeng Database Archive Configuration file
#this is comments

    ARCH_WAIT_APPLY      = 1        

[ARCHIVE_LOCAL1]
    ARCH_TYPE            = LOCAL        
    ARCH_DEST            = /dm/dmarch_rac2        
    ARCH_FILE_SIZE        = 128        
    ARCH_SPACE_LIMIT        = 0        

[ARCH_REMOTE1]
    ARCH_TYPE            = REMOTE        
    ARCH_DEST            = RAC0        
    ARCH_INCOMING_PATH    = /dm/dmarch_rac1        
    ARCH_FILE_SIZE        = 128        
    ARCH_SPACE_LIMIT        = 0        

[dmdba@DMDSC_2 rac1_config]$

dmarch.ini 文件中远程归档相关的主要几个配置项包括: http://www.cndba.cn/cndba/dave/article/3706

  1. ARCH_TYPE 设置为 REMOTE,表示是远程归档
  2. ARCH_DEST 设置为远程数据库实例名,表示 REDO 日志发送到这个节点
  3. ARCH_INCOMING_PATH 设置为本地存储路径,用于保存 ARCH_DEST 实例发送的 REDO 日志

2.2.3 测试

节点2上切换日志:
SQL> alter system switch logfile;
executed successfully
used time: 175.157(ms). Execute id is 0.
SQL> alter database archivelog current;
executed successfully
used time: 5.584(ms). Execute id is 0.
SQL> 

[dmdba@DMDSC_1 dm]$ ll /dm/dmarch_rac1
total 131072
-rw-r--r--. 1 dmdba dinstall 134217728 Sep 18 16:16 ARCHIVE_LOCAL1_20190918160642276_0.log
[dmdba@DMDSC_1 dm]$ ll /dm/dmarch_rac2
total 131500
-rw-r--r--. 1 dmdba dinstall    433664 Sep 18 16:10 ARCH_REMOTE1_20190918160613788_1.log
-rw-r--r--. 1 dmdba dinstall 134217728 Sep 18 16:16 ARCH_REMOTE1_20190918161004936_1.log
[dmdba@DMDSC_1 dm]$

3 操作示例

DM的备份有三种类型:表,表空间,数据库。 我们分别测试这三种情况的操作。

3.1 表的备份与恢复

3.1.1 模拟数据

创建表,并分别在2个节点上分别插入数据:

#节点2操作:
SQL> select instance_name from v$instance;

LINEID     INSTANCE_NAME
---------- -------------
1          RAC1

used time: 11.080(ms). Execute id is 31.
SQL> 

SQL> create table cndba as select * from sysobjects where 1=2;
executed successfully
used time: 428.889(ms). Execute id is 28.
SQL> insert into cndba select * from sysobjects where rownum<20;
affect rows 19

used time: 12.326(ms). Execute id is 29.
SQL> commit;
executed successfully
used time: 55.218(ms). Execute id is 30.

#节点1操作:
SQL> select instance_name from v$instance;

LINEID     INSTANCE_NAME
---------- -------------
1          RAC0

used time: 169.474(ms). Execute id is 5.
SQL> insert into cndba select * from sysobjects where rownum<20;
affect rows 19

used time: 328.318(ms). Execute id is 6.
SQL> commit;
executed successfully
used time: 32.180(ms). Execute id is 7.
SQL>
3.1.2 备份表
SQL> backup table cndba backupset '/dm/dmbak/cndba_01';
executed successfully
used time: 00:00:02.340. Execute id is 8.
SQL>
3.1.3 恢复表
SQL> drop table cndba;
executed successfully
used time: 550.837(ms). Execute id is 9.
SQL> restore table cndba from backupset '/dm/dmbak/cndba_01';
restore table cndba from backupset '/dm/dmbak/cndba_01';
[-2106]:Error in line: 1
Invalid table or view name [CNDBA].
used time: 18.838(ms). Execute id is 0.
#表级恢复不能将表drop,否则报表不存在:
SQL> create table cndba as select * from sysobjects where 1=2;
executed successfully
used time: 294.606(ms). Execute id is 14.
SQL> restore table cndba from backupset '/dm/dmbak/cndba_01';
executed successfully
used time: 427.215(ms). Execute id is 15.
SQL> select count(1) from cndba;

LINEID     COUNT(1)            
---------- --------------------
1          38

used time: 46.790(ms). Execute id is 16.
SQL>

3.2 表空间的备份与恢复

3.2.1 备份用户表空间 MAIN
SQL> backup tablespace main backupset '/dm/dmbak/tbs_main_01';
executed successfully
used time: 00:00:01.305. Execute id is 42.
SQL>
3.2.2 利用归档还原表空间
SQL> ALTER TABLESPACE MAIN OFFLINE;
executed successfully
used time: 851.548(ms). Execute id is 43.

#注意这里指定了本地归档和远程归档目录:
SQL> RESTORE TABLESPACE MAIN FROM BACKUPSET '/dm/dmbak/tbs_main_01' with archivedir '/dm/dmarch_rac1', '/dm/dmarch_rac2';
executed successfully
used time: 00:00:04.678. Execute id is 44.

SQL> ALTER TABLESPACE MAIN ONLINE;
executed successfully
used time: 596.348(ms). Execute id is 45.
SQL>

3.3 数据库的备份与恢复

3.3.1 备份数据库
SQL> backup database backupset '/dm/dmbak/rac_bak_02';
executed successfully
used time: 00:00:02.574. Execute id is 46.
SQL> 

在2个节点分别进行实物操作::

#节点1:
SQL>  create table rac1 as select * from sysobjects;
executed successfully
used time: 253.271(ms). Execute id is 4.
SQL> 

节点2:
SQL> insert into rac1 select * from sysobjects;
affect rows 1278
used time: 317.012(ms). Execute id is 1.
SQL> commit;
executed successfully
used time: 8.983(ms). Execute id is 2.
SQL>

3.3.2 恢复数据库

我们上面进行的都是达梦的联机备份,相关说明可以参考我的博客:

DM7 达梦数据库 物理备份还原之 联机备份(SQL备份) 使用手册
https://www.cndba.cn/dave/article/3595http://www.cndba.cn/cndba/dave/article/3706

联机恢复不支持数据库级别的恢复,所以我们这里要使用DMRMAN 来进行数据库级别的恢复。

DM7 达梦数据库 物理备份还原之 脱机备份(DMRMAN工具) 使用手册
https://www.cndba.cn/dave/article/3612http://www.cndba.cn/cndba/dave/article/3706http://www.cndba.cn/cndba/dave/article/3706

1.先关闭2个节点的数据库:
[dmdba@DMDSC_2 init.d]$ ./DmServicerac2 stop
Stopping DmServicerac2:                                    [ OK ]
[dmdba@DMDSC_2 init.d]$
2.还原数据库。
[dmdba@DMDSC_1 bin]$ ./dmrman dcr_ini=/dm/dmdbms/data/dmdcr.ini
dmrman V7.6.0.95-Build(2018.09.13-97108)ENT 
RMAN> restore database '/dm/dmdbms/data/rac0_config/dm.ini' from backupset '/dm/dmbak/rac_bak_02';
restore database '/dm/dmdbms/data/rac0_config/dm.ini' from backupset '/dm/dmbak/rac_bak_02';
file dm.key not found, use default license!
checking if the RAC database under system path [+DMDATA/data/rac] is running....
EP [0] is checking....
EP [1] is checking....
RESTORE DATABASE  CHECK......
RESTORE DATABASE , dbf collect......
RESTORE DATABASE , dbf refresh ......
RESTORE BACKUPSET [/dm/dmbak/rac_bak_01] START......
total 5 packages processed...
RESTORE DATABASE , UPDATE ctl file......
RESTORE DATABASE , REBUILD key file......
RESTORE DATABASE , CHECK db info......
RESTORE DATABASE , UPDATE db info......
total 6 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 20802.024(ms)
RMAN>
注意,在集群环境中,必须添加dcr_ini参数,否会会报如下错误:
RMAN>  restore database '/dm/dmdbms/data/rac0_config/dm.ini' from backupset '/dm/dmbak/rac_bak_01';
restore database '/dm/dmdbms/data/rac0_config/dm.ini' from backupset '/dm/dmbak/rac_bak_01';
[-105]:Invalid control file
3.利用归档继续恢复:
RMAN> recover database '/dm/dmdbms/data/rac0_config/dm.ini' with archivedir '/dm/dmarch_rac1', '/dm/dmarch_rac2';
recover database '/dm/dmdbms/data/rac0_config/dm.ini' with archivedir '/dm/dmarch_rac1' , '/dm/dmarch_rac2';
checking if the RAC database under system path [+DMDATA/data/rac] is running....
EP [0] is checking....
EP [1] is checking....
[WARN]tablespace CNDBA is corrupted(state: 2), restore or drop please.
EP[0] max_lsn: 62094
EP[0] adjust cur_lsn from [62094] to [67057]
EP 0's ckpt_lsn = 62095
EP 1's ckpt_lsn = 67058
min_ckpt_lsn = 62095
The RAC redo archive log 2 ptx
The RAC redo archive log 4 ptx
……
The RAC redo archive log 232 ptx
The RAC redo archive log 234 ptx
The RAC redo archive log 236 ptx
The RAC recover total redo 236 ptx
EP(0) slot ctl page(1, 0, 16) trxid = 4448
EP(1) slot ctl page(1, 0, 17) trxid = 4320
EP[0] Recover LSN from 62095 to 67200.
EP[1] Recover LSN from 67058 to 67200.
Recover from archive log finished, time used:0.590s.
recover successfully!
time used: 3967.664(ms)
RMAN>
4.恢复完成,起库验证:

SQL> select * from v$rac_ep_info;

行号     EP_NAME EP_SEQNO    EP_GUID              EP_TIMESTAMP         EP_MODE EP_STATUS
---------- ------- ----------- -------------------- -------------------- ------- ---------
1          RAC0    0           310677195            310677238            MASTER  OK
2          RAC1    1           310674475            310674527            SLAVE   OK

已用时间: 68.515(毫秒). 执行号:1.
SQL> select count(1) from rac1;

行号     COUNT(1)            
---------- --------------------
1          2556

已用时间: 21.127(毫秒). 执行号:2.
SQL>

恢复成功。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2296
    原创
  • 3
    翻译
  • 582
    转载
  • 198
    评论
  • 访问:8506090次
  • 积分:4477
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ