参考文档《DM8备份恢复手册》
1、表空间级备份还原
联机备份,脱机还原
表空间备份还原的先决条件以及限制条件参考《DM8备份恢复手册》。
1.1 备份
BACKUP V1.0:
backup tablespace main full to TBS_BAK bakfile '/dm8/dmbak/TBS_MAIN_BAK/main.bak';
BACKUP V2.0:
backup tablespace main backupset '/dm8/dmbak/tbs_main_bak_v2';
DM8注意backup v1.0 :
V1.0:backup tablespace main full to TBS_BAK bakfile ‘xxx’;
如果xxx为一个目录,非.bak文件,则会生成一个xxx目录下xxx.bak和xxx.meta。
如果xxx为一个.bak文件,则会在相应目录下生成一个.bak文件,但是dm8无法直接恢复这种方式备份出来的.bak文件。
在DM7中无论xxx有没有带.bak后缀,在备份的时候都只会生成一个.bak的文件。
DM8只能使用dmrman脱机进行恢复还原。
1.2 还原恢复
DM7表空间还原:
v1.0:
restore tablespace main from '/dm7/backup/tbs_main.bak';
V2.0:
restore tablespace main from backupset '/dm7/backup/test_tbsbak';
DM7测试(BACKUP V1.0)
###建表
SQL> desc ttt;
[-20001]:无效的对象名.
已用时间: 0.819(毫秒). 执行号:0.
SQL> create table ttt (id int) storage(on main);
操作已执行
已用时间: 2.155(毫秒). 执行号:63.
###备份
SQL> backup tablespace main full to TBS_BAK bakfile '/dm7/backup/tbs_main.bak';
操作已执行
已用时间: 00:00:01.165. 执行号:61.
###模拟表空间数据文件丢失
rm MAIN.DBF
###重启数据库
日志信息:
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V7.6.0.142-Build(2019.03.12-103811)ENT startup...
/data/dmdbms/data/DAMENG/MAIN.DBF not exist,force to be off-line
User data files missed, Force to startup MOUNT
启动时发现MAIN.DBF文件不存在,会自动强制offline 并启动到mount状态。
###还原
手动启动数据库到OPEN状态
[dmdba@DaMengDB DAMENG]$ disql
disql V7.6.0.142-Build(2019.03.12-103811)ENT
用户名:
密码:
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间: 5.463(毫秒)
SQL>
SQL> alter database open;
操作已执行
已用时间: 00:00:10.293. 执行号:0.
SQL> select name,status$ from v$tablespace ;
行号 NAME STATUS$
---------- ------ -----------
1 SYSTEM 0
2 ROLL 0
3 TEMP 0
4 MAIN 1
5 DMHR 0
6 TBS3 0
7 TEST 0
8 SYSAUX 0
STATUS$说明: 0 ONLINE, 1 OFFLINE, 2 RES_OFFLINE, 3 CORRUPT
----执行还原操作
SQL> restore tablespace main from '/dm7/backup/tbs_main.bak';
操作已执行
已用时间: 408.777(毫秒). 执行号:7.
日志信息:
start restore table space: MAIN
start restore file: /data/dmdbms/data/DAMENG/MAIN.DBF, pages: 105
end restore file: /data/dmdbms/data/DAMENG/MAIN.DBF
end restore table space: MAIN
start redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200515122736288_0.log, rpages: 1520, start lsn: 190500, end lsn: 195960
end redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200515122736288_0.log
start redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516184023096_0.log, rpages: 1409, start lsn: 195960, end lsn: 205300
end redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516184023096_0.log
start redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516204315913_0.log, rpages: 1398, start lsn: 205301, end lsn: 214544
end redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516204315913_0.log
start redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516204451733_0.log, rpages: 1386, start lsn: 214545, end lsn: 223763
end redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516204451733_0.log
start redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516204708022_0.log, rpages: 1385, start lsn: 223764, end lsn: 232981
end redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516204708022_0.log
start redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516204915793_0.log, rpages: 1387, start lsn: 232982, end lsn: 242199
end redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516204915793_0.log
start redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516210431409_0.log, rpages: 945, start lsn: 242199, end lsn: 247064
end redo arch file: /dm7/arch/ARCHIVE_LOCAL2_20200516210431409_0.log
restore finished, code = 0!
根据日志信息发现还原之后会自动应用日志。
SQL> alter tablespace main online;
操作已执行
已用时间: 13.662(毫秒). 执行号:9.
###查看
SQL> select name,status$ from v$tablespace ;
行号 NAME STATUS$
---------- ------ -----------
1 SYSTEM 0
2 ROLL 0
3 TEMP 0
4 MAIN 0
5 DMHR 0
6 TBS3 0
7 TEST 0
8 SYSAUX 0
SQL> desc ttt;
行号 NAME TYPE$ NULLABLE
---------- ---- ------- --------
1 ID INTEGER Y
已用时间: 2.850(毫秒). 执行号:67.
表空间还原需要先将表空间状态为OFFLINE
SQL> alter tablespace main offline;
SQL> restore tablespace main from ‘/dm7/backup/tbs_main.bak’;
SQL> alter tablespace main online;
DM8测试
对表空间的备份还原,DM8只能使用dmrman脱机进行恢复还原。
[dmdba@dm8dw02 bin]$ ./DmServiceTEST stop
Stopping DmServiceTEST: [ OK ]
[dmdba@dm8dw02 bin]$ ./dmrman
dmrman V8
#校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验
RMAN> CHECK BACKUPSET '/dm8/dmbak/tbs_main_bak';
CHECK BACKUPSET '/dm8/dmbak/tbs_main_bak';
CMD END.CODE:[0]
check backupset successfully.
time used: 5.922(ms)
#还原表空间。 需要注意,表空间还原的目标库只能是备份集产生的源库,否则将报错
#使用第一次备份文件还原
RMAN> RESTORE DATABASE '/dm8/data/TEST/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dm8/dmbak/tbs_main_bak';
RESTORE DATABASE '/dm8/data/TEST/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dm8/dmbak/tbs_main_bak';
RESTORE TABLESPACE[MAIN] IN DB[/dm8/data/TEST/dm.ini] CHECK......
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[53006]
RESTORE TABLESPACE[MAIN] IN DB[/dm8/data/TEST/dm.ini],dbf collect......
RESTORE TABLESPACE[MAIN] IN DB[/dm8/data/TEST/dm.ini],ts status and dbf refresh ......
RESTORE BACKUPSET [/dm8/dmbak/tbs_main_bak] START......
total 1 packages processed...
total 3 packages processed...
RESTORE TABLESPACE[MAIN] IN DB[/dm8/data/TEST/dm.ini],UPDATE ctl file......
total 3 packages processed...
total 3 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 423.868(ms)
#恢复表空间
RMAN> RECOVER DATABASE '/dm8/data/TEST/dm.ini' TABLESPACE MAIN;
RECOVER DATABASE '/dm8/data/TEST/dm.ini' TABLESPACE MAIN;
Database mode = 0, oguid = 0
[WARN]tablespace MAIN is corrupted(state: 2), restore or drop please.
EP[0]'s cur_lsn[53006]
RECOVER TABLESPACE[MAIN] IN DB[/dm8/data/TEST/dm.ini] CHECK......
EP[0]'s cur_lsn[53006]
EP:0 total 3 pkgs applied, percent: 10%
EP:0 total 6 pkgs applied, percent: 20%
EP:0 total 9 pkgs applied, percent: 31%
EP:0 total 12 pkgs applied, percent: 41%
EP:0 total 15 pkgs applied, percent: 51%
EP:0 total 18 pkgs applied, percent: 62%
EP:0 total 21 pkgs applied, percent: 72%
EP:0 total 24 pkgs applied, percent: 82%
EP:0 total 27 pkgs applied, percent: 93%
EP:0 total 29 pkgs applied, percent: 100%
Recover from archive log finished, time used:0.086s.
CMD END.CODE:[0]
recover successfully.
time used: 546.781(ms)
RMAN>
1.3 表空间备份还原总结
(1)、DM8表空间还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集,只能使用脱机还原的方式。MOUNT状态下,不允许进行表空间备份。
(2)、表空间也和数据库备份一样支持全量备份和增量备份。
(3)、表空间备份还原不支持TEMP表空间。
(4)、表空间还原要求还原目标库与备份库为同一个库。
(5)、还原目标库不能为已经执行过RESTORE但未执行过RECOVER的库。
(6)、若目标库中SYSTEM表空间故障,则必须优先还原SYSTEM表空间。
(7)、如果SYSTEM表空间处于ONLINE/OFFLINE状态且文件丢失,则必须要通过库还原修复,不支持对其执行表空间还原 。
(8)、表空间还原还支持还原表空间中特定的数据文件。
结语
随着产品不断的改进,达梦数据库不同的版本在操作或者限制条件等方面可能有细微差别(也可能没有),当我们在操作时如果不是很清楚相关操作,可以先参考当前数据库版本的官方手册,所有的官方手册位于软件安装目录下的doc目录中($DM_HOME/doc)。
更多资讯请上达梦技术社区了解:https://eco.dameng.com