参考文档《DM8备份恢复手册》
联机拷贝数据库还原恢复
达梦数据库除了支持冷拷贝方式进行数据库还原外,还支持联机拷贝数据库进行还原恢复。
冷拷贝方式参考:
环境说明
OS:NeoKylin Linux Advanced Server release V7Update6/(Chromium)-x86_64
DB_VERSION:DM V8 1-1-190-21.03.12-136419-ENT
DM_HOME:/dm/dm134
前提条件&注意事项
1、dmap已正常启动运行;
2、数据库已配置归档模式;
如果上面两个条件不满足,那么调用 SP_BACKUP_COPY_END将报错。
使用联机拷贝数据库方式还需要注意以下几点:
1.调用SP_BACKUP_COPY_BEGIN前需设置当前连接AUTO_COMMIT为FALSE,关闭事务自动提交。
2.SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END必须在同一连接中执行。
3.每次调用SP_BACKUP_COPY_END前必须先调用SP_BACKUP_COPY_BEGIN,否则将报错。
4.调用SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END之间不能执行CREATE TABLESPACE操作。
5.SP_BACKUP_COPY_END产生的空备份集只能用于源库副本的还原,当利用该备份集还原其他库或从该备份集进行恢复时将报错。
联机拷贝数据库
第一步 拷贝之前记录当前系统的BEGIN_LSN/BEGIN_SEQ信息
开始拷贝前,调用系统过程SP_BACKUP_COPY_BEGIN记录当前系统BEGIN_LSN/BEGIN_SEQ信息,以确定恢复阶段日志重做的起点。
SQL> SP_BACKUP_COPY_BEGIN();
DMSQL 过程已成功完成
已用时间: 74.315(毫秒). 执行号:400.
###注意会话连接不要退出,因为SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END必须在同一连接中执行。
第二步 开始拷贝数据库
使用常规方式拷贝数据库文件到新的目录。拷贝数据库文件时,必须包含配置文件(dm.ini)、控制文件(dm.ctl)、秘钥文件(dm_service.prikey)、联机日志文件以及数据文件。也可以直接拷贝整个数据库目录。
[dmdba@localhost ~]$ cp /dm/dm134/data/TEST/dm.ini /dm/dm134/data/DB_COPY/
[dmdba@localhost ~]$ cp /dm/dm134/data/TEST/dm.ctl /dm/dm134/data/DB_COPY/
[dmdba@localhost ~]$ cp /dm/dm134/data/TEST/dm_service.prikey /dm/dm134/data/DB_COPY/
[dmdba@localhost ~]$ cp /dm/dm134/data/TEST/TEST01.log /dm/dm134/data/DB_COPY/
[dmdba@localhost ~]$ cp /dm/dm134/data/TEST/TEST02.log /dm/dm134/data/DB_COPY/
[dmdba@localhost ~]$ cp /dm/dm134/data/TEST/*.DBF /dm/dm134/data/DB_COPY/
第三步 拷贝完成后记录当前系统的END_LSN/END_SEQ信息
拷贝结束后,调用系统过程SP_BACKUP_COPY_END,记录系统各节点END_LSN/END_SEQ信息,以在恢复结束后校验数据完整性。该过程同时生成一个仅包含meta文件的空备份集,并将记录的信息填充到该文件。
SP_BACKUP_COPY_END(path)中path参数指定备份集绝对路径,当参数为相对路径时,将在默认备份目录下生成该备份集。
SQL> SP_BACKUP_COPY_END('/dm/dm134/data/BAKSET_COPY');
DMSQL 过程已成功完成
已用时间: 00:00:01.068. 执行号:503.
至此,拷贝过程已经完成,下面进行还原恢复操作。
修改文件路径参数
当源库的一个副本拷贝到不同的路径后,在还原恢复前需要修改文件中全部的路径参数。
修改配置文件(dm.ini)中文件路径参数
将拷贝的dm.ini文件(/dm/dm134/data/DB_COPY下的dm.ini)中相关文件路径参数修改为拷贝后对应的路径。
修改参数如下:
CTL_PATH = /dm/dm134/data/DB_COPY/dm.ctl #ctl file path
CTL_BAK_PATH = /dm/dm134/data/DB_COPY/ctl_bak #dm.ctl backup path
SYSTEM_PATH = /dm/dm134/data/DB_COPY #system path
CONFIG_PATH = /dm/dm134/data/DB_COPY #config path
TEMP_PATH = /dm/dm134/data/DB_COPY #temporary file path
BAK_PATH = /dm/dm134/data/DB_COPY/bak #backup file path
修改控制文件(dm.ctl)中文件路径参数
将拷贝的dm.ctl文件(/dm/dm134/data/DB_COPY下的dm.ctl)中相关文件路径参数修改为拷贝后对应的路径。
1、首先,需要使用dmctlcvt将dm.ctl的内容转换为文本文件。如下:
[dmdba@localhost bin]$ ./dmctlcvt TYPE=1 SRC=/dm/dm134/data/DB_COPY/dm.ctl DEST=/home/dmdba/dm_ctl_copy.txt
DMCTLCVT V8
convert ctl to txt success!
[dmdba@localhost bin]$ cat /home/dmdba/dm_ctl_copy.txt|grep -v "mirror_path"|grep -v "^#"|grep path
fil_path=/dm/dm134/data/TEST/SYSTEM.DBF
fil_path=/dm/dm134/data/TEST/ROLL.DBF
fil_path=/dm/dm134/data/TEST/TEST01.log
fil_path=/dm/dm134/data/TEST/TEST02.log
fil_path=/dm/dm134/data/TEST/MAIN.DBF
htspath=/dm/dm134/data/TEST/HMAIN
2、将dm_ctl.txt文件中的file path及htspath等涉及路径的配置,更改为对应新的路径。
修改后,如下:
[dmdba@localhost bin]$ cat /home/dmdba/dm_ctl_copy.txt|grep -v "mirror_path"|grep -v "^#"|grep path
fil_path=/dm/dm134/data/DB_COPY/SYSTEM.DBF
fil_path=/dm/dm134/data/DB_COPY/ROLL.DBF
fil_path=/dm/dm134/data/DB_COPY/TEST01.log
fil_path=/dm/dm134/data/DB_COPY/TEST02.log
fil_path=/dm/dm134/data/DB_COPY/MAIN.DBF
htspath=/dm/dm134/data/DB_COPY/HMAIN
3、将修改后的控制文件文本文件转换为控制文件dm.ctl,并替换原控制文件。
[dmdba@localhost bin]$ ./dmctlcvt TYPE=2 SRC=/home/dmdba/dm_ctl_copy.txt DEST=/dm/dm134/data/DB_COPY/dm.ctl
DMCTLCVT V8
convert txt to ctl success!
还原恢复
从源库的副本进行还原恢复,语法与脱机库还原恢复完全一致。
为了恢复最新状态,使用源库归档日志进行恢复。
拷贝源库归档日志到副本目录:
cp -r /dm/dm134/data/TEST/arch /dm/dm134/data/DB_COPY/arch
启动DMRMAN,使用空备份集还原源库的副本
RMAN> restore database ‘/dm/dm134/data/DB_COPY/dm.ini’ from backupset ‘/dm/dm134/data/BAKSET_COPY’;
RMAN> recover database ‘/dm/dm134/data/DB_COPY/dm.ini’ with archivedir ‘/dm/dm134/data/DB_COPY/arch’;
RMAN> recover database ‘/dm/dm134/data/DB_COPY/dm.ini’ update db_magic;
[dmdba@localhost bin]$ ./dmrman
dmrman V8
RMAN> restore database '/dm/dm134/data/DB_COPY/dm.ini' from backupset '/dm/dm134/data/BAKSET_COPY';
restore database '/dm/dm134/data/DB_COPY/dm.ini' from backupset '/dm/dm134/data/BAKSET_COPY';
file dm.key not found, use default license!
Read ini warning, default dm.ctl backup path [/dm/dm134/data/DB_COPY/ctl_bak] does not exist.
Read ini warning, default backup path [/dm/dm134/data/DB_COPY/bak] does not exist.
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
begin redo pwr log collect, last ckpt lsn: 2019427 ...
redo pwr log collect finished
EP[0]'s cur_lsn[2020258], file_lsn[2020258]
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
restore successfully.
time used: 554.447(ms)
RMAN> recover database '/dm/dm134/data/DB_COPY/dm.ini' with archivedir '/dm/dm134/data/DB_COPY/arch';
recover database '/dm/dm134/data/DB_COPY/dm.ini' with archivedir '/dm/dm134/data/DB_COPY/arch';
Read ini warning, default dm.ctl backup path [/dm/dm134/data/DB_COPY/ctl_bak] does not exist.
Read ini warning, default backup path [/dm/dm134/data/DB_COPY/bak] does not exist.
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
begin redo pwr log collect, last ckpt lsn: 2019427 ...
redo pwr log collect finished
EP[0]'s cur_lsn[2020258], file_lsn[2020258]
EP:0 total 0 pkgs applied, percent: 0%
EP:0 total 3 pkgs applied, percent: 10%
EP:0 total 6 pkgs applied, percent: 21%
EP:0 total 9 pkgs applied, percent: 32%
EP:0 total 12 pkgs applied, percent: 42%
EP:0 total 15 pkgs applied, percent: 53%
EP:0 total 18 pkgs applied, percent: 64%
EP:0 total 21 pkgs applied, percent: 75%
EP:0 total 24 pkgs applied, percent: 85%
EP:0 total 27 pkgs applied, percent: 96%
EP:0 total 28 pkgs applied, percent: 100%
recover successfully!
time used: 477.123(ms)
RMAN> recover database '/dm/dm134/data/DB_COPY/dm.ini' update db_magic;
recover database '/dm/dm134/data/DB_COPY/dm.ini' update db_magic;
Read ini warning, default dm.ctl backup path [/dm/dm134/data/DB_COPY/ctl_bak] does not exist.
Read ini warning, default backup path [/dm/dm134/data/DB_COPY/bak] does not exist.
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[2020402], file_lsn[2020402]
recover successfully!
time used: 986.779(ms)
启动数据库
如果服务器上dm.ini中的PORT_NUM参数指定的端口已被使用,需要先修改dm.ini中PORT_NUM参数。
本次测试由于当前服务器5236端口已被使用,所以恢复后的数据库端口修改为5237。
1、启动数据库(前台启动):
[dmdba@localhost bin]$ ./dmserver /dm/dm134/data/DB_COPY/dm.ini
file dm.key not found, use default license!
Read ini warning, default dm.ctl backup path [/dm/dm134/data/DB_COPY/ctl_bak] does not exist.
Read ini warning, default backup path [/dm/dm134/data/DB_COPY/bak] does not exist.
version info: develop
DM Database Server x64 V8 1-1-190-21.03.12-136419-ENT startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
License will expire on 2022-03-12
file lsn: 2020402
ndct db load finished
ndct fill fast pool finished
iid page's trxid[14067]
NEXT TRX ID = 14068
pseg_collect_mgr_items, total collect 0 active_trxs, 0 cmt_trxs, 0 pre_cmt_trxs, 0 active_pages, 0 cmt_pages, 0 pre_cmt_pages, 0 mgr pages, 0 mgr recs!
total 0 active crash trx, pseg_crash_trx_rollback sys_only(0) begin ...
pseg_crash_trx_rollback end, total 0 active crash trx, include 0 empty_trxs, 0 empty_pages which only need to delete mgr recs.
pseg_crash_trx_rollback end
pseg recv finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
nsvr_process_before_open begin.
nsvr_process_before_open success.
total 0 active crash trx, pseg_crash_trx_rollback sys_only(0) begin ...
pseg_crash_trx_rollback end, total 0 active crash trx, include 0 empty_trxs, 0 empty_pages which only need to delete mgr recs.
pseg_crash_trx_rollback end
SYSTEM IS READY.
2、登录数据库:
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA:5237
服务器[LOCALHOST:5237]:处于普通打开状态
登录使用时间 : 3.057(ms)
disql V8
SQL> SELECT * FROM TEST;
行号 ID
---------- -----------
1 123
已用时间: 7.010(毫秒). 执行号:400.
SQL> SELECT COUNT(*) FROM T1;
行号 COUNT(*)
---------- --------------------
1 2360
已用时间: 1.578(毫秒). 执行号:401.
3、注册数据库服务
root用户执行
/dm/dm134/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/dm134/data/DB_COPY/dm.ini -p DBCOPY5237
结语
达梦8联机拷贝数据库的方式进行还原恢复或者数据库迁移,在某些场景下是比较适用的,比如业务不能停机、磁盘空间不足或者当前服务器IO性能较差等等情况下,需要进行数据库迁移或者恢复到别机器时,采用联机拷贝数据库的方式相对会比较高效。
另外,达梦数据库物理备份恢复是可以跨操作系统平台的,比如Windows到Linux等,当数据量较大时对于跨平台迁移采用物理备份恢复的方式是非常高效的。
更多资讯请上达梦技术社区了解:https://eco.dameng.com