DM7使用DMRMAN执行数据库还原和恢复

使用DMRMAN执行数据库还原和恢复
下面介绍在数据文件损坏后如何使用DMRMAN还原和恢复数据库,主要内容包括:
1. 数据库还原
2. 数据库恢复

1. 数据库还原
使用RESTORE命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,或是联机库级备份集。数据库的还原包括数据库配置文件还原和数据文件还原,目前可能需要还原的数据库配置文件包括dm.ini、dm.ctl、服务器秘钥文件(dm_service.private或者dm_external.config,若备份库指定usbkey加密,则无秘钥文件)、联机日志文件。语法如下:

RESTORE DATABASE  FROM BACKUPSET '< 备份集目录>'
[DEVICE TYPE DISK|TAPE[PARMS '< 介质参数>']]
[IDENTIFIED BY < 密码> [ENCRYPT WITH < 加密算法>]]
[WITH BACKUPDIR '< 基备份集搜索目录>'{,'< 基备份集搜索目录>'}]
[MAPPED FILE '< 映射文件>'][TASK THREAD < 任务线程数>] [NOT PARALLEL]
[RENAME TO '< 数据库名>'];
::=|
::=''[REUSE DMINI][OVERWRITE]
::= TO '' [OVERWRITE]

DATABASE:指定还原库目标的dm.ini文件路径。
BACKUPSET:指定用于还原目标数据库的备份集目录。若指定为相对路径,会在默认备份目录下搜索备份集。
DEVICE TYPE:指存储备份集的介质类型,支持DISK和TAPE,默认为DISK。DISK表示备份集存储介质为磁盘,TAPE表示存储介质为磁带。
PARMS:介质参数,供第三方存储介质(TAPE类型)管理使用。
IDENTIFIED BY:指定备份时使用的加密密码,供还原过程解密使用。
ENCRYPT WITH:指定备份时使用的加密算法,供还原过程解密使用,若未指定,则使用默认算法。
WITH BACKUPDIR:指定备份集搜索目录。
MAPPED FILE:指定存放还原目标路径的文件,参见3.3.5.2.1 数据库还原。当< 备份集目录>和< 映射文件>指定的路径不一致时,以< 映射文件>指定的路径为主
TASK THREAD:指定还原过程中用于处理解压缩和解密任务的线程个数。若未指定,则默认为4;若指定为0,则调整为1;若指定超过当前系统主机核数,则调整为主机核数。
NOT PARALLEL:指定并行备份集使用非并行方式还原。对于非并行备份集,不论是否指定该关键字,均采用非并行还原。
RENAME TO:指定还原数据库后是否更改库的名字,指定时将还原后的库改为指定的数据库名,默认使用备份集中的db_name作为还原后库的名称。

restore_type:
type1:
1>指定dm.ini还原,要求dm.ini中CTL_PATH必须配置正确,且内容有效;若配置CTL_PATH文件故障,且想利用dm.ini优化配置,则可选择type2还原后,用指定dm.ini覆盖还原后dm.ini,并修改CTL_PATH为当前控制文件路径即可;
2>除dm.ini文件外,其他文件均可不存在;但dm.ini参数配置必须正确,且配置的dm.ctl文件必须是有效的控制文件;
3>数据库配置文件中除已经存在的dm.ini外,先删除控制文件中的数据文件,然后根据overwrite选项,若指定overwrite,其他文件(这些文件不在控制文件中,所以未删除)均采用删除重建的处理,避免存在非法的文件,否则如果这些文件已经存在,则报错;
4>若指定REUSE DMINI,则会将备份集中备份的dm.ini中除路径相关的INI参数外,均拷贝到当前dm.ini上。

type2:
1>所有文件均可不在,system_dbf所在路径需为有效路径,若不存在,restore过程中会自动创建;
2>所有前面提到到数据库配置文件均会在指定的system_dbf所在路径还原,但非单机环境中相关其他文件均不修改或者重建,如MPP中dmmpp.ini、dmmal.ini等;
3>若未指定OVERWRITE,若system_dbf所在路径中存在待还原的库配置文件,则报错;若指定,则将已经存在的文件删除重建;
4>由于RAC环境中dm.ini可能存在多个,且可能不在一个主库上,或者即使在一个主库上也可能不在system_dbf所在路径中,故暂时不支持RAC环境的指定目录还原。

联机日志
上述和中的还原后的联机日志文件至少会有两个,因为源库中的日志文件可能大于等于两个,如果小于两个(被误删的情况)的则补齐为两个。已经存在的联机日志配置,使用原路径,若文件大小非法,则使用缺省大小256M重建;缺少的使用缺省命名和缺省大小256M重建。联机日志文件的命名规则:
1>单机:db_name+(file_id+1).log,其中fil_id + 1,占2个位置,如:db_name=DAMENG,则相应的名称为DAMENG01.log,DAMENG02.log;
2>RAC: rac+(ep_no + 1)_+(file_id+1).log,其中ep_no + 1和file_id+1均占2个位置,如0号节点日志名称为rac01_01.log,rac01_02.log。

使用说明:
通过RESTORE命令还原后的数据库不可用,需进一步执行RECOVER命令,将数据库恢复到备份结束时的状态。数据库备份集分为联机和脱机两种类型。通常情况下,用户会在联机的情况下备份数据库,因此下面以联机数据库备份为例说明使用DMRMAN如何执行数据库还原操作。
1) 联机备份数据库,保证数据库运行在归档模式及OPEN状态。

SQL> backup database '/dm7/data/rac0_config/dm.ini' full to db_rac_full_bak_for_restore backupset '/dm7/backup/db_rac_full_bak_for_restore';
executed successfully
used time: 00:00:01.233. Execute id is 4.

2) 准备目标库。还原目标库可以是已经存在的数据库,也可使用dminit工具初始化一个新库。如下所示:

./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE

如果还原目标库与故障库是同一个,建议先执行故障库的归档修复操作。

3) 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验。

RMAN> check backupset '/dm7/backup/db_rac_full_bak_for_restore';
check backupset '/dm7/backup/db_rac_full_bak_for_restore';
CMD END.CODE:[0]
check backupset successfully.
time used: 12.182(ms)
也可以
SQL> select sf_bakset_check('disk','/dm7/backup/db_rac_full_bak_for_restore');

LINEID     SF_BAKSET_CHECK('disk','/dm7/backup/db_rac_full_bak_for_restore')
---------- -----------------------------------------------------------------
1          1

used time: 14.626(ms). Execute id is 6.

4) 还原数据库。启动DMRMAN,输入以下命令:

RMAN> restore database '/dm7/data/rac0_config/dm.ini' from backupset '/dm7/backup/db_rac_full_bak_for_restore';
restore database '/dm7/data/rac0_config/dm.ini' from backupset '/dm7/backup/db_rac_full_bak_for_restore';
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....
[-12000]:The specified instance has been started

需要停止实例

[dmdba@dmrac1 bin]$ dmrman dcr_ini=/dm7/data/dmdcr.ini
dmrman V7.1.6.46-Build(2018.02.08-89107)ENT
RMAN> restore database '/dm7/data/rac0_config/dm.ini' from backupset '/dm7/backup/db_rac_full_bak_for_restore';
restore database '/dm7/data/rac0_config/dm.ini' from backupset '/dm7/backup/db_rac_full_bak_for_restore';
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 [/dm7/backup/db_rac_full_bak_for_restore] 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 9 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 12542.797(ms)

2. 数据库恢复

RMAN> recover database '/dm7/data/rac0_config/dm.ini';
recover database '/dm7/data/rac0_config/dm.ini';
checking if the RAC database under system path [+DMDATA/data/rac] is running....
EP [0] is checking....
EP [1] is checking....
EP[0] max_lsn: 72473
EP[0] adjust cur_lsn from [72473] to [73980]
EP 0's ckpt_lsn = 72474
min_ckpt_lsn = 72474
The RAC redo archive log 1 ptx
The RAC redo archive log 2 ptx
The RAC redo archive log 3 ptx
The RAC redo archive log 4 ptx
The RAC redo archive log 5 ptx
The RAC redo archive log 6 ptx
The RAC redo archive log 7 ptx
The RAC redo archive log 8 ptx
The RAC redo archive log 9 ptx
The RAC redo archive log 10 ptx
The RAC redo archive log 11 ptx
The RAC redo archive log 12 ptx
The RAC recover total redo 12 ptx
EP(0) slot ctl page(1, 0, 16) trxid = 9882
EP(1) slot ctl page(1, 0, 17) trxid = 8457
EP[0] Recover LSN from 72474 to 73970.
EP[1] Recover LSN from 73981 to 73980.
Recover from archive log finished, time used:0.029s.
recover successfully!
time used: 3246.961(ms)

启动实例

[root@dmrac1 backup]# service DmServicerac1 start
Starting DmServicerac1: [ OK ]

[root@dmrac2 init.d]# service DmServicerac2 start
Starting DmServicerac2: [ OK ]

 

发表评论

电子邮件地址不会被公开。