还原数据到实例
1 背景
DM1 有数据,有归档 。
DM2 无数据,一个新实例。
将DM1的最新的数据还原到DM2上做开发测试使用。
数据库还原需DM2处于脱机状态。
2 还原恢复数据
2.1 和2.2 两种方式还原恢复
2.1 复制归档还原
2.1.1 数据复制
(1)复制DM1全量备份文件 dbbak_full_01 到DM2机器 /dm/dmbakup 下
(2)复制DM1全部归档或执行全备后的归档文件到DM2的归档目录/data/dmarch/dm 下
2.1.2 还原恢复步骤
在DM2进入dmrman命令行界面执行还原,2 和3步骤任选其一,3步骤中3.1和3.2任选其一,两者都执行也可,不过会进行覆盖。
1 还原全量备份
restore database '/data/dm_data/dm/dm.ini' from backupset '/dm/dmbakup/dbbak_full_9';
2 恢复数据库到最新状态(若不知道归档中最新lsn是多少,可以取一个很大的值就行,范围为1~9223372036854775807)
recover database '/data/dm_data/dm/dm.ini' with archivedir '/data/dmarch/dm' until lsn 132213132232;
3 或者恢复数据库到某个状态(某个lsn或某个时间)
3.1 基于时间点恢复
recover database '/data/dm_data/dm/dm.ini' with archivedir '/data/dmarch/dm' UNTIL TIME '2020-03-25 17:55:11';
3.2 基于lsn恢复
recover database '/data/dm_data/dm/dm.ini' with archivedir '/data/dmarch/dm' UNTIL LSN 268138;
recover database '/data/dm_data/dm/dm.ini' with archivedir '/data/dmarch/dm' UNTIL LSN 268138;
3.3 恢复DB_MAGIC
recover database '/data/dm_data/dm/dm.ini' update db_magic;
4 启动数据库查询数据。
2.2使用归档备份还原
DM1操作
1 DM1 执行全备
backup database full to "dbbak_full_9" backupset '/dm/dmbakup/dbbak_full_2';
#查询lsn
select ARCH_LSN, CLSN, PATH from V$ARCH_FILE;
#插入一些数据后执行归档备份命令
insert into mm values(12),(13);
commit;
#查询lsn
select ARCH_LSN, CLSN, PATH from V$ARCH_FILE;
2 DM1执行归档备份
#归档备份一部分日志
backup ARCHIVELOG LSN between 231241 and 231276 BACKUPSET '/dm/dmbakup/lsnbak_01';
#或者从某个lsn开始备份归档 (自由选择)
backup ARCHIVELOG FROM LSN 231221 BACKUPSET '/dm/dmbakup/lsnbak_01';
DM2 还原恢复操作
1 复制数据到DM2
复制DM1全量备份文件 dbbak_full_02 和 lsnbak_01 到DM2机器 /dm/dmbakup 下
2 还原数据库
还原全量备份
restore database '/data/dm_data/dm/dm.ini' from backupset '/dm/dmbakup/dbbak_full_2';
#还原归档
restore ARCHIVELOG FROM backupset '/dm/dmbakup/lsnbak_01' to database '/data/dm_data/dm/dm.ini' overwrite 2;
#恢复数据库(可参考上面步骤2.1.2里第2步和第3步恢复操作)
recover database '/data/dm_data/dm/dm.ini' with archivedir '/data/dmarch/dm' until lsn 132213132232;
#恢复DB_MAGIC;
recover database '/data/dm_data/dm/dm.ini' update db_magic;