达梦数据库支持的备份恢复方式:
dexp/dimp --逻辑备份
dmrman --脱机物理备份
disql BACKUP/RESTORE --联机物理备份
联机拷贝 --联机物理拷贝
联机拷贝方式备份的特点:
相较于传统备份,直接拷贝文件,备份速度更快
备份文件为原格式,可以快速拉起服务
适用于不同操作系统间快速数据迁移
联机拷贝原理概述:
在备份前记录BEGIN_LSN,BEGIN_SEQ,通过cp,rsync,ftp等方式直接拷贝达梦数据文件进行备份,备份后记录END_LSN,END_SEQ,[BEGIN_LSN,END_LSN]之间对应的REDO日志用于恢复时保证数据一致性。
在还原阶段,通过重建数据文件,联机日志以及更新控制文件来重建目标库的文件结构,利用[BEGIN_LSN,END_LSN]的归档日志将数据库推到最新状态。
约束与限制:
前提条件:
数据库已经开启归档模式
DmAP服务正常运行
注意事项:
调用SP_BACKUP_COPY_BEGIN前需设置当前连接AUTO_COMMIT为FALSE,关闭事务自动提交。
SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END必须在同一连接中执行。
每次调用SP_BACKUP_COPY_END前必须先调用SP_BACKUP_COPY_BEGIN,否则将报错。
调用SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END之间不能执行CREATE TABLESPACE操作。
SP_BACKUP_COPY_END产生的空备份集只能用于源库副本的还原,当利用该备份集还原其他库或从该备份集进行恢复时将报错。
联机拷贝流程:
SP_BACKUP_COPY_BEGIN
通过disql调用系统过程SP_BACKUP_COPY_BEGIN记录BEGIN_LSN,BEGIN_SEQ,以确定恢复阶段日志重做的点位
SQL> SP_BACKUP_COPY_BEGIN();
DMSQL 过程已成功完成
已用时间: 165.781(毫秒). 执行号:600
复制
拷贝数据库文件
拷贝数据库文件到备份目录/opt/dmbak/dbbak,必须包含配置文件(dm.ini)、控 制文件(dm.ctl)、秘钥文件(dm_service.prikey)、联机日志文件(DAMENG01.log 和DAMENG02.log)以及数据文件(*.DBF)
cp /opt/dmdb/data/DMDB/dm.ini opt/dmbak/dbbak/
cp /opt/dmdb/data/DMDB/dm.ctl opt/dmbak/dbbak/
cp /opt/dmdb/data/DMDB/dm_service.prikey opt/dmbak/dbbak/
cp /opt/dmdb/data/DMDB/DMDB01.log opt/dmbak/dbbak/
cp /opt/dmdb/data/DMDB/DMDB02.log opt/dmbak/dbbak/
cp /opt/dmdb/data/DMDB/*.DBF opt/dmbak/dbbak/
复制
SP_BACKUP_COPY_END
拷 贝 结 束 后 , 调 用 系 统 过 程 SP_BACKUP_COPY_END , 记 录 系 统 各 节 点 END_LSN/END_SEQ信息,以在恢复结束后校验数据完整性。该过程同时生成一个仅包含 meta文件的空备份集,并将记录的信息填充到该文件
SQL> SP_BACKUP_COPY_END('/opt/dmbak/backupset');
DMSQL 过程已成功完成
已用时间: 856.339(毫秒). 执行号:601.
复制
归档日志拷贝
将归档目录中备份期间新增的归档日志拷贝至/opt/dmbak/arch
cp opt/dmdb/arch/ARCHIVE_LOCAL1_0x6D88836A[0]_2021-10-12_18-54-38.log opt/dmbak/arch
复制
恢复流程:
配置拷贝后的dm.ini
当源库的一个副本拷贝到/opt/dmbak/dbbak后,在恢复前需要修改dm.ini文件中全部的路径参数
vi opt/dmbak/dbbak/dm.ini
================== 以下路径均改为拷贝后的路径 ====================
CTL_PATH = dm/dmdbms/data/test/dm.ctl #ctl file path
CTL_BAK_PATH = /dm/dmdbms/data/test/ctl_bak #dm.ctl backup path
SYSTEM_PATH = /dm/dmdbms/data/test #system path
CONFIG_PATH = /dm/dmdbms/data/test #config path
TEMP_PATH = /dm/dmdbms/data/test #temporary file path
BAK_PATH = /dm/dmdbms/data/test/bak #backup file path
=================== 指定新的端口号(非必须)======================
PORT_NUM = 5240 #Port number on which the database server will listen
=================== 指定新的实例名(非必须)======================
INSTANCE_NAME = DMRES #Instance name
=================== MAL功能关闭(如果是集群备份) ================================
MAL_INI = 0
=================== 主从环境拷贝需打开ALTER_MODE_STATUS ========
ALTER_MODE_STATUS = 1
复制
将控制文件dm.ctl转储为dm.txt
[dmdba@test_dev02 dbbak]$ /opt/dmdb/bin/dmctlcvt TYPE=1 SRC=/opt/dmbak/dbbak/dm.ctl DEST=/opt/dmbak/dbbak/dm.txt /dm.ctl
DMCTLCVT V8
convert txt to ctl success!
复制
修改dm.txt中路径为拷贝后的路径
[root@localhost ~]# vi /opt/dmbak/dbbak/dm.txt
······
# file path
fil_path=/opt/dmbak/dbbak/SYSTEM.DBF
······
# file path
fil_path=/opt/dmbak/dbbak/ROLL.DBF
······
# file path
fil_path=/opt/dmbak/dbbak/DMDB01.log
······
# file path
fil_path=/opt/dmbak/dbbak/DMDB02.log
······
# file path
fil_path=/opt/dmbak/dbbak/MAIN.DBF
······
# HUGE table space path
htspath=/opt/dmbak/dbbak/HMAIN
复制
将修改好的dm.txt重新转为二进制控制文件dm.ctl,替换原有dm.ctl
[dmdba@test_dev02 dbbak]$ /opt/dmdb/bin/dmctlcvt TYPE=2 SRC=/opt/dmbak/dbbak/dm.txt DEST=/opt/dmbak/dbbak/dm.ctl /dm.txt
DMCTLCVT V8
convert ctl to txt success!
复制
设置dmarch.ini
vi /opt/dmbak/dbbak/dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /opt/dmbak/arch #本地归档文件存放路径(记得创建路径)
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M
复制
RESTORE DATABASE
通过dmrman工具利用空备份集还原源库
[dmdba@test_dev02 dbbak]$ /opt/dmdb/bin/dmrman CTLSTMT="RESTORE DATABASE '/opt/dmbak/dbbak/dm.ini' FROM BACKUPSET '/opt/dmbak/backupset'" KUPSET '/opt/dmbak/backupset_copy'"
dmrman V8
RESTORE DATABASE '/opt/dmbak/dbbak/dm.ini' FROM BACKUPSET '/opt/dmbak/backupset'
file dm.key not found, use default license!
Read ini warning, default dm.ctl backup path [/opt/dmbak/dbbak/ctl_bak] does not exist.
Read ini warning, default backup path [/opt/dmbak/dbbak/bak] does not exist.
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]Database mode = 2, oguid = 453331
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
begin redo pwr log collect, last ckpt lsn: 27977 ...
redo pwr log collect finished
EP[0]'s cur_lsn[27977], file_lsn[27977]
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:01][Remaining:00:00:00]
restore successfully.
复制
RECOVER DATABASE
利用源库的归档日志将副本恢复到最新状态
[dmdba@test_dev02 dbbak]$ /opt/dmdb/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmbak/dbbak/dm.ini' WITH ARCHIVEDIR '/opt/dmbak/arch'" dmrman V8pt/dmbak/db_copy/dm.ini' WITH ARCHIVEDIR '/opt/dmbak/arch RECOVER DATABASE '/opt/dmbak/db_copy/dm.ini' WITH ARCHIVEDIR '/opt/dmbak/arch'
file dm.key not found, use default license!
Read ini warning, default dm.ctl backup path [/opt/dmbak/dbbak/ctl_bak] does not exist.
Read ini warning, default backup path [/opt/dmbak/dbbak/bak] does not exist.
Database mode = 2, oguid = 453331
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
begin redo pwr log collect, last ckpt lsn: 27977 ...
redo pwr log collect finished
EP[0]'s cur_lsn[27977], file_lsn[27977]
EP:0 total 2 pkgs applied, percent: 18%
EP:0 total 4 pkgs applied, percent: 36%
EP:0 total 6 pkgs applied, percent: 54%
EP:0 total 8 pkgs applied, percent: 72%
EP:0 total 10 pkgs applied, percent: 90%
EP:0 total 11 pkgs applied, percent: 100%
recover successfully!
time used: 802.080(ms)
复制
修改数据库摩数DB_MAGIC
[dmdba@test_dev02 ~]$ /opt/dmdb/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmbak/dbbak/dm.ini' UPDATE DB_MAGIC"
dmrman V8
RECOVER DATABASE '/opt/dmbak/dbbak/dm.ini' UPDATE DB_MAGIC
file dm.key not found, use default license!
Read ini warning, default dm.ctl backup path [/opt/dmbak/dbbak/ctl_bak] does not exist.
Read ini warning, default backup path [/opt/dmbak/dbbak/bak] does not exist.
Database mode = 2, oguid = 453331
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[28032], file_lsn[28032]
recover successfully!
time used: 00:00:01.054
复制
注册达梦服务
[root@test_dev02 dmbak]# /opt/dmdb/script/root/dm_service_installer.sh -t dmserver -dm_ini /opt/dmbak/dbbad/dm.ini -p dmdb
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicedmdb.service to /usr/lib/systemd/system/DmServicedmdb.service.
创建服务(DmServicedmdb)完成
复制
启动达梦
[root@test_dev02 dmbak]# /opt/dmdb/bin/DmServicedmdb start
Starting DmServicedmdb: Last login: Tue Oct 12 18:56:08 CST 2021
[ OK ]
复制