本文创建了三个作业,作业1为每周六全量备份,作业2为除周六外每天增量备份,作业3为每周日清理15天前的备份。总结了需要注意的内容,以及创建定时作业的步骤。
以及本文首先对对物理备份还原与逻辑备份还原的原理进行解释,再用具体实例对备份还原过程进行理解。需要注意的是,必须在归档模式开启的情况下,数据库才可以进行物理备份;逻辑备份不强制要求开启归档模式,为在线备份。
需要在创建作业前将备份的目录创建好,不能在执行disql时中断出去创建。创建作业是一个事务操作。如果你在会话断开前没有执行 COMMIT;,那么这个事务就被回滚(Rollback)了。
mkdir -p /home/dmdba/dmdbms/arch
mkdir -p /home/dmdba/dmdbms/backup
chown -R dmdba:dinstall /home/dmdba/dmdbms/arch/(这里如果使用的是已经授权过的目录可以不用这条语句)
可以使用下面的语句验证目录是否创建成功:
/home/dmdba/dmdbms/bin/disql SYSDBA/此处填上你的SYSDBA密码@localhost:5236
CALL SP_INIT_JOB_SYS(1);(如果已初始化,此步可跳过)
创建了三个作业,分别为定时全量备份、增量备份、删除备份。
步骤如下:
CALL SP_CREATE_JOB(‘JOB_FULL_BAK_WEEKLY’, 1, 0, ‘’, 0, 0, ‘’, 0, ‘’);
含义:创建一个名为“JOB_FULL_BAK_WEEKLY”的作业。
除前两个字符外其他参数的信息:
ENABLED表示作业是否启用,1为启用;
ENABLE_EMAIL表示是否开启邮件通知,1为开启;
EMAIL_OPTR_NAME为邮件接收的操作员名称,未开启邮件则穿空串;
EMAIL_TYPE为邮件发送时机,0为成功时发送,1为失败时发送,2为无论成败均发送;
ENABLE_NETSEND为是否开启网络发送通知;
NETSEND_OPTR_NAME为网络发送的操作员名称;
NETSEND_TYPE为网络发送时机,取值同EMAIL_TYPE;
DESCRIBE为作业描述信息。
CALL SP_JOB_CONFIG_START(‘JOB_FULL_BAK_WEEKLY’);
含义:进入指定作业的配置状态。
需要注意:SP_JOB_CONFIG_START和SP_JOB_CONFIG_COMMIT必须成对出现,而且中间所有操作必须在同一个数据库对话中连续执行。
CALL SP_ADD_JOB_STEP(‘JOB_FULL_BAK_WEEKLY’,‘STEP_FULL_BAK’,6,‘01000000/home/dmdba/dmdbms/backup’,1,2,0,0,NULL,0);
含义:设置作业为完全备份,压缩模式和指定备份路径。
不依次介绍参数,仅介绍下重要参数:
JOB_FULL_BAK_WEEKLY为作业名称;
STEP_FULL_BAK为步骤名称;
01000000/home/dmdba/dmdbms/backup表示:第一个0为完全备份,第一个1为备份时压缩,000000为其他选项占位,末尾为备份目标路径。
CALL SP_ADD_JOB_SCHEDULE(‘JOB_FULL_BAK_WEEKLY’, ‘SCH_FULL_BAK’, 1, 2, 1, 64, 0, ‘23:00:00’, NULL, SYSDATE, NULL, ‘’);
含义:设置作业为按周执行,每周六23:00开始执行
将上述参数依次介绍如下:
JOB_FULL_BAK_WEEKLY为作业名称;
SCH_FULL_BAK为调度名称;
ENABLE为调度是否启用,1为启用;
SCHEDULE_TYPE为调度类型,按天为1,按周为2;
FREQ_INTERVAL为频率间隔,1为每周执行1次;
FREQ_SUB_INTERVAL为子频率,按周执行时,64代表星期六;
FREQ_MINUTE_INTERVAL表示一天内每隔多少分钟执行一次,0表示不启用;
START_TIME为调度开始时间,格式:HH24:MI:SS,这里为’23:00:00’;
END_TIME为调度结束时间,NULL表示无结束时间;
CALL SP_JOB_CONFIG_COMMIT(‘JOB_FULL_BAK_WEEKLY’);
含义:提交作业配置,使之前添加的步骤和调度正式生效。
执行后,作业配置被持久化到系统表,作业将按调度计划自动执行。
步骤如下:前面有相似的内容不做过多解释
CALL SP_CREATE_JOB(‘JOB_INCR_BAK_DAILY’, 1, 0, ‘’, 0, 0, ‘’, 0, ‘’);
CALL SP_JOB_CONFIG_START(‘JOB_INCR_BAK_DAILY’);
CALL SP_ADD_JOB_STEP(‘JOB_INCR_BAK_DAILY’,‘STEP_INCR_BAK’,6,‘11000000/home/dmdba/dmdbms/backup|/home/dmdba/dmdbms/backup’,1,3,0,0,NULL,0);
'11000000/home/dmdba/dmdbms/backup|/home/dmdba/dmdbms/backup’指定了备份指令与路径。1表示增量备份,1表示开启压缩,后续000000为其他选项占位。|前为备份集存放路径,|后为基备份路径(即增量备份所依赖的全量备份集所在目录)
CALL SP_ADD_JOB_SCHEDULE(‘JOB_INCR_BAK_DAILY’, ‘SCH_INCR_BAK’, 1, 2, 1, 63, 0, ‘23:30:00’, NULL, SYSDATE, NULL, ‘’);
63为星期掩码,周日到周六分别对应20到26(即1,2,4,8,16,32,64),多个日子相加。63 = 1+2+4+8+16+32,代表除周六外的其他日子。
CALL SP_JOB_CONFIG_COMMIT(‘JOB_INCR_BAK_DAILY’);
CALL SP_CREATE_JOB(‘JOB_DEL_OLD_BAK’, 1, 0, ‘’, 0, 0, ‘’, 0, ‘’);
CALL SP_JOB_CONFIG_START(‘JOB_DEL_OLD_BAK’);
CALL SP_ADD_JOB_STEP(‘JOB_DEL_OLD_BAK’, ‘STEP_DEL_BAK’, 0, ‘CALL SF_BAKSET_BACKUP_DIR_ADD(’‘DISK’’, ‘’/home/dmdba/dmdbms/backup’’); CALL SP_DB_BAKSET_REMOVE_BATCH(’‘DISK’’, SYSDATE - 15);’, 1, 2, 0, 0, NULL, 0);
重点解释长SQL里的内容,将其拆分开:
1、SF_BAKSET_BACKUP_DIR_ADD(‘DISK’, ‘/home/dmdba/dmdbms/backup’):作用是向当前会话的备份目录列表中添加一个路径。达梦数据库在查找备份集时,默认只搜索系统配置的路径。此函数确保后续的删除操作能在指定的 /home/dmdba/dmdbms/backup目录下进行。
2、SP_DB_BAKSET_REMOVE_BATCH(‘DISK’, SYSDATE - 15):用于批量删除指定时间之前的数据库备份集。参数 ‘DISK’ 指定了设备类型为磁盘;SYSDATE - 15 则是一个日期计算表达式,表示当前系统时间减去15天。因此,该命令会删除所有创建时间在15天前的备份集。
CALL SP_ADD_JOB_SCHEDULE(‘JOB_DEL_OLD_BAK’, ‘SCH_DEL_BAK’, 1, 1, 1, 0, 0, ‘00:10:00’, NULL, SYSDATE, NULL, ‘’);
CALL SP_JOB_CONFIG_COMMIT(‘JOB_DEL_OLD_BAK’);
SELECT ID, NAME, ENABLE, CREATETIME, DESCRIBE
FROM SYSJOB.SYSJOBS
WHERE NAME IN (‘JOB_FULL_BAK_WEEKLY’, ‘JOB_INCR_BAK_DAILY’, ‘JOB_DEL_OLD_BAK’);
2、查看每个作业的步骤
SELECT
a.NAME AS “作业名”,
b.NAME AS “步骤名”,
b.TYPE AS “步骤类型”,
b.COMMAND AS “步骤命令”
FROM SYSJOB.SYSJOBS a
JOIN SYSJOB.SYSJOBSTEPS b ON a.ID = b.JOBID
WHERE a.NAME IN (‘JOB_FULL_BAK_WEEKLY’, ‘JOB_INCR_BAK_DAILY’, ‘JOB_DEL_OLD_BAK’);
SELECT
a.NAME AS “作业名”,
c.NAME AS “调度名”,
c.STARTTIME AS “执行时间” – 调度开始时间,格式为 HH:MI:SS
FROM SYSJOB.SYSJOBS a
JOIN SYSJOB.SYSJOBSCHEDULES c ON a.ID = c.JOBID
WHERE a.NAME IN (‘JOB_FULL_BAK_WEEKLY’, ‘JOB_INCR_BAK_DAILY’, ‘JOB_DEL_OLD_BAK’);
物理备份直接操作数据库底层的存储文件(如 .dbf 数据文件),不关心表、行等逻辑结构,只关心哪些磁盘块正在被使用,扫描数据库运行时已分配并承载有效数据的数据页,备份时逐页复制其二进制内容,打包存储为备份集。
物理还原则作为其逆操作,通常借助 DMRMAN 工具或执行 SQL 命令,将备份集中保存的数据文件、数据页及归档日志等内容,按原始存储结构重新写回到目标数据库的对应文件中,从而实现数据的恢复。
根据数据库的运行状态,分为在线(联机)备份还原和脱机备份还原:
在线备份还原:数据库处于OPEN状态,需要归档,联机备份时,大量的事务处于活动状态,为确保备份数据的一致性,需要同时备份一段日志(备份期间产生的 REDO 日志),因此要求数据库必须配置本地归档且归档处于开启状态。表空间备份和表备份只能在联机状态线下进行。
脱机备份还原:数据库处于关闭状态,不需要归档。这里只包括数据库备份和归档备份。
备份集:备份集用来存放备份过程中产生的备份数据及备份信息。一个备份集对应了一次完整的备份。一般情况下,一个备份集就是一个目录,备份集包含一个或多个备份片文件,以及一个备份元数据文件。
物理备份:优点是速度快、与数据库逻辑无关,适合大规模数据恢复;缺点是备份集通常较大,且跨平台或跨版本时可能不兼容。
物理还原:还原过程不涉及 SQL 解析或数据转换,将备份集中的数据和页映像直接覆盖回存储。由于备份时刻数据库可能不一致,还原后必须利用归档日志执行前滚恢复,重做已提交事务,使数据库达到一致状态。
在线物理备份必须要开启归档配置,脱机物理备份时对配置归档不作要求,两种归档方式如下:
修改数据库为 Mount 状态
ALTER DATABASE MOUNT;
开启归档模式
ALTER DATABASE ARCHIVELOG;
配置本地归档
ALTER DATABASE ADD ARCHIVELOG ‘DEST = /home/dm_arch/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048’;
修改数据库为 Open 状态
ALTER DATABASE OPEN;
关闭数据库,在dm.ini所在目录,创建dmarch.ini文件。
dmarch.ini文件内容如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dm_arch/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
编辑 dm.ini 文件,设置参数ARCH_INI=1;启动数据库实例,数据库已运行于归档模式。
这里仅介绍手动备份,定时备份相关步骤详见另一篇文章《创建定时备份和删除作业》
在 disql 工具或图形化管理工具 SQL 编辑区中使用 BACKUP 语句可以备份整个数据库,执行以下命令:
BACKUP DATABASE FULL BACKUPSET ‘/opt/dmdbms/BAK/db_full_bak_01’;
含义:全量备份
设置联机数据库备份集路径:
BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_3_01’;
含义:指定备份集路径为/home/dm_bak/db_bak_3_01
设置备份名:
BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET ‘/home/dm_bak/db_bak_3_02’;
含义:创建备份集,备份名设置为“WEEKLY_FULL_BAK”
添加备份描述:
BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_3_04’ BACKUPINFO ‘完全备份’;
含义:创建备份为备份集,并在/home/dm_bak目录下创建db_bak_3_04文件夹,将所有备份文件放在该目录下,并添加描述信息为“完全备份”。BACKUPINFO用于给备份集添加一段描述信息。
限制备份片大小:
BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_3_05’ MAXPIECESIZE 300;
含义:创建备份限制备份片大小为300M
备份压缩:
BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_3_06’ COMPRESSED LEVEL 5;
含义:执行备份压缩,压缩级别设置为 5。
设置并行备份:
BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_3_07’ PARALLEL 8;
含义:创建并行备份,指定并行数为8
同备份数据库一样,执行表空间备份数据库实例也必须运行在归档模式下,启动 disql 输入以下语句即可备份表空间:
BACKUP TABLESPACE MAIN BACKUPSET ‘ts_bak_01’;
含义:BACKUP TABLESPACE MAIN:指定了备份的目标,即MAIN表空间。BACKUPSET ‘ts_bak_01’:指定了备份集的存放路径和名称。这里使用的是相对路径,因此备份集默认会生成在数据库的BAK_PATH目录下。
完全备份:
BACKUP TABLESPACE MAIN FULL BACKUPSET ‘/home/dm_bak/ts_full_bak_01’;
含义:FULL:表示执行完全备份,即备份该表空间的所有有效数据页。
增量备份:
BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR ‘/home/dm_bak’ BACKUPSET ‘/home/dm_bak/ts_increment_bak_02’;
含义:INCREMENT:明确指示执行增量备份;执行增量备份时,系统需要一个基准备份(Base Backup)作为参照点,WITH BACKUPDIR ‘/home/dm_bak’,这是命令的核心参数,用于指定基准备份集的搜索目录;BACKUPSET ‘/home/dm_bak/ts_increment_bak_02’:指定当前增量备份集的存放路径。执行后,备份文件会精确地存放在 /home/dm_bak/ts_increment_bak_02 这个目录下。
与备份数据库与表空间不同,备份表不需要服务器配置归档,disql 输入以下命令即可备份用户表。
BACKUP TABLE TAB_01 BACKUPSET ‘tab_bak_01’;
含义:BACKUPSET ‘tab_bak_01’:指定备份集的存放名称。执行后,系统会在该目录下创建一个名为tab_bak_01的文件夹,所有的备份文件都会存放在这个目录里。
disql 输入以下命令即可备份归档:
BACKUP ARCHIVE LOG ALL BACKUPSET ‘arch_bak_01’;
含义:备份集“arch_bak_01”会生成到默认的备份路径下。
达梦数据库仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行。
表还原的具体操作如下,表还原之后不需要恢复操作:
RESTORE TABLE TAB_01 FROM BACKUPSET ‘tab_bak_01’;
表空间备份和表备份都只能在联机状态下进行,因此脱机状态下的数据备份只包括数据库备份和归档备份。
完全备份:启动DMRMAN命令行工具
BACKUP DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini ’ FULL BACKUPSET ‘/home/dm_bak/db_full_bak_01’;
含义:’/opt/dmdbms/data/DAMENG/dm.ini’:指定了数据库的配置文件,用于定位要备份的数据库实例;FULL:明确指示进行完全备份。即使省略该关键字,系统也默认执行完全备份;BACKUPSET ‘/home/dm_bak/db_full_bak_01’:指定备份集的存放路径为 /home/dm_bak/db_full_bak_01,注意创建父目录,在这里需要提前创建/home/dm_bak_db_full_bak_01。
增量备份:
BACKUP DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ INCREMENT WITH BACKUPDIR ‘/home/dm_bak’ BACKUPSET ‘/home/dm_bak/db_increment_bak_02’;
含义:WITH BACKUPDIR ‘/home/dm_bak’:这是一个关键参数。它告诉系统到 /home/dm_bak 这个目录下去自动搜索最近一次有效的备份(即上一条命令生成的完全备份 db_full_bak_01),并将其作为本次增量备份的基准。
使用 DMRMAN 备份归档需要设置归档,否则会报错。
BACKUP ARCHIVE LOG ALL DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ BACKUPSET ‘/home/dm_bak/arch_all_bak_01’;
含义:ARCHIVE LOG ALL:指定了备份对象是所有的归档日志。
数据库还原
联机备份数据库,保证数据库运行在归档模式及 OPEN 状态;
BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_full_bak_for_restore’;
准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。如下所示:
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE SYSDBA_PWD=****** SYSAUDITOR_PWD=******
校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;
CHECK BACKUPSET ‘/home/dm_bak/db_full_bak_for_restore’;
还原数据库。启动 DMRMAN,输入以下命令:
RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM
BACKUPSET ‘/home/dm_bak/db_full_bak_for_restore’;
数据库恢复
使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。数据库恢复是指重做 REDO 日志,有两种方式:从备份集恢复,即重做备份集中的 REDO 日志;或从归档恢复,即重做归档中的 REDO 日志。
执行还原数据库的命令之后,可以直接执行恢复数据库的命令,如下:
RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/db_full_bak_for_recover_backupset’;
通过使用 WITH ARCHIVEDIR 关键字进行归档恢复,如下:
RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ WITH ARCHIVEDIR’/home/dm_arch/arch’
归档还原
使用 RESTORE 命令完成脱机还原归档操作,在还原语句中指定归档备份集。备份集可以是脱机归档备份集,也可以是联机归档备份集。归档还原的命令如下:
还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。
1、指定还原的目标归档日志目录:
RESTORE ARCHIVE LOG FROM BACKUPSET ‘/home/dm_bak/arch_all_for_restore’ TO ARCHIVEDIR’/opt/dmdbms/data/DAMENG_FOR_RESTORE/arch_dest’ OVERWRITE 2;
2、指定还原目标库的 dm.ini 文件路径:
RESTORE ARCHIVE LOG FROM BACKUPSET ‘/home/dm_bak/arch_all_for_restore’ TO DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ OVERWRITE 2;
归档修复
使用 REPAIR 命令完成指定数据库的归档修复,归档修复会对目标库 dmarch.ini 中配置的所有本地归档日志目录执行修复。若目标库没有配置本地归档,则不执行修复。执行修复时,目标库一定不能处于运行状态。一般建议在数据库故障后,应立即执行归档修复,否则后续还原恢复将会导致联机日志中未刷入本地归档的 REDO 日志中而丢失,届时再利用本地归档恢复将无法恢复到故障前的最新状态。归档恢复的命令如下:
单机环境下,确保目标库已经停止工作后,执行归档修复;
REPAIR ARCHIVELOG DATABASE ‘/opt/dmdbms/data/dm.ini’;
DSC 环境下,需要每个节点停止工作后,每个节点独立执行修复操作;
对于两节点 DSC01、DSC02 执行修复如下:
REPAIR ARCHIVELOG DATABASE ‘/opt/dmdbms/dsc/dm01.ini’;
REPAIR ARCHIVELOG DATABASE ‘/opt/dmdbms/dsc/dm02.ini’
#二、逻辑备份与还原
逻辑导出(dexp)和逻辑导入(dimp)是 DM 数据库的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,即在数据库服务器正常运行过程中进行的备份和还原。
四种导出功能分别为:
设置 FULL=Y,导出数据库的所有对象,导出数据库文件和日志文件放在路径 /mnt/data/dexp下。
./dexp USERID=SYSDBA/***** FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp
设置 OWNER=USER01,导出用户 USER01 所拥有的对象全部导出。
./dexp USERID=SYSDBA/***** FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dexp
设置 SCHEMAS=USER01,导出模式 USER01 模式下的所有对象。
./dexp USERID=SYSDBA/***** FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dexp
设置 TABLES=table1,table2,导出 table1,table2 两张表的所有数据和信息。
./dexp USERID=SYSDBA/***** FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dexp
四种导入功能分别为:
设置 FULL=Y,导入数据库,导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/***** FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dimp
设置 OWNER=USER01,导入用户 USER01 所拥有的对象全部导出。导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/***** FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dimp
设置 SCHEMAS=USER01,导入模式 USER01 模式下的所有对象。导入的数据库文件在/mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/***** FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dimp
设置 TABLES=table1,table2,导入 table1,table2 两张表的所有数据和信息。导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/***** FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dimp
create table test (a int );
insert into test values (1);
commit;
使用dmrman工具进行脱机备份,需要停止数据库服务,需要执行:
./DmServiceDMSERVER stop;
之后换dmrman工具执行全面备份语句:
BACKUP DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini’FULL BACKUPSET ‘/home/dmdba/dmdbms/bak/DB_DAMENG_FULL_2026_07_31_10_10_31’ COMPRESSED LEVEL 1;
显示backup successfully!即为备份成功。
需要再次将数据库切换为开启状态,并使用disql工具执行以下语句插入一行数据:
insert into test values(2);
commit;
接着关闭数据库,使用dmrman工具执行以下语句:
BACKUP DATABASE ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ INCREMENT BASE ON BACKUPSET ‘/home/dmdba/dmdbms/bak/DB_DAMENG_FULL_2026_07_31_10_10_31’ BACKUPSET ‘/home/dmdba/dmdbms/bak/DB_DAMENG_INCRE_2026_07_31_11_10_23’ COMPRESSED LEVEL 1;
注意上面标蓝的地方,需要依次填写数据库实例的dm.ini地址、基备份地址(第一次全面备份的地址,这里采用了精确的地址查找方式)、增量备份集的地址、压缩等级(1-9,这里选官方推荐的1)。
需要再次将数据库切换为开启状态,并使用disql工具执行以下语句插入一行数据:
insert into test values(3);
commit;
接着关闭数据库,使用dmrman工具执行以下语句:
backup database ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ INCREMENT BASE ON BACKUPSET ‘/home/dmdba/dmdbms/bak/DB_DAMENG_FULL_2026_07_31_10_10_31’ BACKUPSET ‘/home/dmdba/dmdbms/bak/DB_DAMENG_INCRE_2026_07_31_11_17_17’ COMPRESSED LEVEL 1;
检验备份集是否正确:
CHECK BACKUPSET ‘/home/dmdba/dmdbms/bak/DB_DAMENG_INCRE_2026_07_31_11_17_17’;
还原:
RESTORE DATABASE ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/home/dmdba/dmdbms/bak/DB_DAMENG_INCRE_2026_07_31_11_17_17’;
恢复:
RECOVER DATABASE ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/home/dmdba/dmdbms/bak/DB_DAMENG_INCRE_2026_07_31_11_17_17’;
更新数据库魔数:
RECOVER DATABASE ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ UPDATE DB_MAGIC;
四、全库 + 增量备份集 + 归档还原数据库
如果要归档还原数据库,需要首先确保数据库处于归档模式下!!
create table test2 (a int );
insert into test2 values (1);
commit;
使用dmrman工具进行脱机备份,需要停止数据库服务,需要执行:
./DmServiceDMSERVER stop;
之后换dmrman工具执行全面备份语句:
backup database ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ full backupset ‘/home/dmdba/dmdbms/bak/DB_DAMENG_FULL_2026_07_31_13_24_11’ compressed level 1;
insert into test2 values (2);
commit;
BACKUP DATABASE ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ increment base on backupset ‘/home/dmdba/dmdbms/bak/DB_DAMENG_FULL_2026_07_31_13_24_11’ backupset ‘/home/dmdba/dmdbms/bak/DB_DAMENG_INCER_2026_07_31_13_46_12’ COMPRESSED LEVEL 1;
backup database ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ increment base on backupset ‘/home/dmdba/dmdbms/bak/DB_DAMENG_FULL_2026_07_31_13_24_11’ backupset ‘/home/dmdba/dmdbms/bak/DB_DAMENG_INCRE_2026_07_31_14_02_11’ COMPRESSED LEVEL 1;
insert into test values(4);
commit;
insert into test values(5);
commit;
共有6个是上面的测试还有3个,只需关注目前的备份集是否在其中即可。
RESTORE DATABASE ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ from backupset ‘/home/dmdba/dmdbms/bak/DB_DAMENG_INCRE_2026_07_31_14_02_11’;
RECOVER DATABASE ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ with archivedir ‘/home/dmdba/dmdbms/arch’;
RECOVER DATABASE ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ UPDATE DB_MAGIC;
共有5行,与插入内容一致。
RESTORE DATABASE ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ from backupset ‘/home/dmdba/dmdbms/bak/DB_DAMENG_INCRE_2026_07_31_14_02_11’;
RECOVER DATABASE ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ with archivedir ‘/home/dmdba/dmdbms/arch’ until time ‘2026-07-31 14:06:00’;
这里的截止时间专门写第四条数据和第五条数据之间的时间节点,专门截掉第五条数据,用于之后验证。
RECOVER DATABASE ‘/home/dmdba/dmdbms/data/DAMENG/dm.ini’ UPDATE DB_MAGIC;
可以看到,上面只有四条数据,第五条数据并没有还原。
文章
阅读量
获赞
