当前位置: 首页 > news >正文

达梦数据库(DM8)物理备份与还原

文章目录

  • 1概述
  • 2基础概念
    • 2.1表空间
    • 2.2重做(Redo)日志
    • 2.3归档日志
    • 2.4备份还原
    • 2.5备份集
  • 3联机状态下的备份还原
    • 3.1库备份
    • 3.2表空间备份
    • 3.3单表表备份与还原
    • 3.4归档备份与还原
  • 4脱机状态下的备份还原
    • 4.1库备份与还原
    • 4.2表空间还原
    • 4.3归档备份与还原
  • 5使用案例
    • 5.1数据迁移
    • 5.2创建定时备份作业
    • 5.3全备与增量备份还原

1概述

物理备份生成的备份集是将内存或磁盘上已经分配、使用的数据页拷贝保存到备份集中,我们无法通过编辑器进行阅读不具备可读性,而逻辑备份生成的文件是文本形式的文件,后缀名为.dmp,具有一定的可读性。物理备份过程中还会备份归档日志,还原后还需要执行一下从归档日志恢复的步骤。
物理备份支持括库备份、表空间备份和表备份、归档日志备份,其中,表空间备份和表备份只能在联机状态下进行备份,全库备份和归档日志备份既可以在联机状态(数据库运行状态)也可以在脱机状态(数据库关闭状态)下进行备份。
脱机备份还原的时候需要使用DMRMAN工具,联机状态下可以使用disql或者DM管理工具登录数据库进行备份还原,都是使用BACKUP、RESTORE、RECOVER命令进行操作。

2基础概念

2.1表空间

表空间是一个逻辑概念,其目的主要是为了方便数据库的管理,数据库的所有对象在逻辑上都存放在某个表空间中,而物理上都存储在所属表空间的数据文件中。一个表空间由一个或多个数据文件组成。
数据文件是数据库中最重要的文件类型,是真实数据存储的地方。DM 中数据文件的扩展名为.DBF,分为系统默认生成的数据文件和用户自己创建的数据文件两类,HUGE数据文件不同于一般数据文件,其扩展名为.DTA。在DM管理工具中,可以查看到各表空间:
在这里插入图片描述
按存储的数据文件类型分又可分为普通表空间和HUGE表空间,普通表空间不能存储HUG表,而混合表空间可以同时存储普通(非 HUGE)表和 HUGE 表,其中HUGE数据文件存储在混合表空间定义中指定的HUGE数据文件路径下。可以通过为普通表空间添加HUGE数据文件路径将其升级为混合表空间。MAIN表空间就是混合表空间。
SYSTEM表空间:存放了DM数据库全局字典信息和全局系统数据;ROLL 表空间:存放DM数据库运行过程中产生的所有回滚记录;TEMP表空间:存放临时表数据以及数据库运行过程中产生的临时数据,比如SORT等操作需要额外的空间进行排序就会用到TEMP表空间。TEMP表空间不支持备份和还原;MAIN表空间是默认表空间,如果在创建用户的时候没有指定默认表空间,则后续该用户创建的表和数据都会保存在MAIN表空间下。

2.2重做(Redo)日志

在实例目录下,我们可以看到以实例名称开头的两个log文件就是重做日志,或者叫联机日志。
在这里插入图片描述

在学习主备集群的时候,我们知道集群是通过传输redo日志到备库,备库通过重做redo日志实现数据同步的。数据库中Insert、Delete、Update等DML操作以及Create TABLE等DDL操作最终都会体现为对某一个或者多个物理数据页的修改,这些变更会记录到redo日志.。
任何数据页从内存缓冲区写入磁盘之前,其对应的REDO日志都会先写入到联机日志文件,这样即使数据页在刷盘前断电了,数据库重启后依然能通过前滚重做日志把数据库恢复到断电前的状态,未提交的事务会进行回滚,已提交的事务不受影响。
两个重做日志是循环覆写的,日志中有一个特殊的记录需要注意那就是检查点(CKPT_LSN),这个指针用来标记小于CKPT_LSN号的事务的物理修改页已经将变更写入到磁盘了,联机日志这部分的内容就可以被覆写了。数据库故障重启时,CKPT_LSN之前的REDO日志不需要重做,只需要从CKPT_LSN+1开始重做REDO日志,就可以将系统恢复到故障前状态。

2.3归档日志

联机日志文件默认只有两个,在数据库运行的时候是循环覆写的,因此需要配置数据库为归档模式,这样联机重做日志中的内容就会写入到归档日志目录下形成归档日志。如果是非归档模式则不会保存归档日志。
归档日志需要在安装数据库后手动开启,生产环境强烈建议开启归档模式,不然数据库因故障退出并且没有归档日志将可能会丢失自上次备份后数据库修改的数据。
在实例正常退出时,会将所有 REDO 日志写入归档日志文件中;但是数据库实例异常关闭时,可能存在部分 REDO 日志未写入归档日志文件中,归档日志文件中的内容比实际可恢复的数据少一部分,这种情况就需要从联机日志文件拷贝该部分日志以补齐本地归档日志,归档修复可以在DMRMAN命令行使用使用REPAIR ARCHIVELOG DATABASE命令进行修复。
开启归档模式具体设置如下:
方法一:在线方式配置归档:在数据库运行时,连接disql进行修改
开启归档并限制归档空间为 100 G(按实际存储空间给合适的值)

alter database mount;
alter database archivelog;
alter database add archivelog 'dest=/dmdata/arch,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=102400';
alter database open;

方法二:离线方式配置归档:数据库停止时,修改配置文件修改当前实例数据目录下的dm.ini文件,打开ARCH_INI参数:

vi /dmdata/dmdb/dm.ini
# 修改:ARCH_INI = 1 #打开归档配置

在数据库目录下创建dmarch.ini文件

vi /dmdata/dmdb/dmarch.ini

并在dmarch.ini文件添加以下内容:

#归档空间限制以实际情况考虑 (实际配置中删除#后注释语句)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST =/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 1024 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT =102400 #单位 Mb,0 表示无限制,范围 1024~2147483647M

验证归档状态:

-- 检查归档配置
SELECT arch_name, arch_type, arch_dest FROM V$DM_ARCH_INI;
-- 查看归档是否启用
SELECT arch_mode FROM V$DATABASE;

脱机备份数据库可配置归档也可以不配置。正常退出的库的备份不需要考虑本地归档日志的完整性,可以不配置归档;但对于故障退出的库的备份要求因故障未刷盘的日志也必须存在于本地归档中,因此必须配置归档,如果本地归档缺失,需要用户先修复归档,然后再备份。
备份表空间属于联机备份,必须配置归档。
备份表是联机完全备份,不需要配置归档。表在还原之后不需要再进行恢复操作,用不到归档日志。
备份归档日志必须配置归档。

2.4备份还原

DM备份(BACKUP)的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,而在备份的过程中,如果数据库系统还在继续运行,这期间的数据库操作并不是都会立即体现到数据文件中,而是首先以日志的形式写到归档日志中,因此,为了保证用户可以通过备份集将数据恢复到备份结束时间点的状态,就需要将备份过程中产生的归档日志也保存到备份集中。
数据库处于运行状态、并正常提供数据库服务情况下进行的备份操作称为联机备份。数据库处于关闭状态时进行的备份操作,被称为脱机备份。使用 DMRMAN 工具进行脱机备份,并且支持对异常关闭的数据库进行脱机库备份。备份异常关闭的数据库,要求配置了本地归档,如果本地归档不完整,则需要先修复本地归档,再进行备份。一般在物理全备前需要先确认数据库是否正常运行,然后使用安装路径bin目录下的服务关闭数据库实例再进行备份。
还原(RESTORE)与恢复(RECOVER)是备份的逆过程。还原是将备份集中的有效数据页重新写入目标数据文件的过程。恢复则是指通过重做归档日志,将数据库状态恢复到备份结束时的状态;也可以恢复到指定时间点和指定LSN。恢复结束以后,数据库中可能存在处于未提交状态的活动事务,这些活动事务在恢复结束后的第一次数据库系统启动时,会由DM数据库自动进行回滚。
联机备份则使用客户端工具连接到数据库实例后,通过执行SQL语句进行;也可以通过配置作业,定时完成自动备份。联机备份时,可能存在一些处于活动状态的事务正在执行,为确保备份数据的一致性,需要将备份期间产生的 REDO 日志一起备份。因此,只能在配置本地归档、并开启本地归档的数据库上执行联机备份。
按照备份内容的不同,物理备份可分为数据备份和归档日志备份。数据备份包括:库备份、表空间备份、表备份,后两者只能联机状态下进行备份;归档日志备份是扫描归档目录收集归档日志文件,并将归档日志写入到备份集中。既可以在数据库运行状态下,执行联机归档日志备份;也可以在数据库关闭状态下执行脱机归档日志备份。
按照备份数据完整性,可将备份分为完全备份和增量备份。库备份和表空间备份支持增量备份,表备份和归档备份不支持增量备份。

2.5备份集

备份集用来存放备份过程中产生的备份数据及备份信息。一个备份集对应了一次完整的备份,备份集包含一个或多个备份片文件,以及一个备份元数据文件。下面是并行数为2的备份集目录:
在这里插入图片描述

备份片文件后缀为.bak,用来存放备份数据。备份时,目标数据文件内容或归档日志内容经过处理后,都会存放到备份片文件中。
元数据文件用来存放备份信息,元数据文件的后缀为.meta。通过元数据文件,可以了解整个备份集信息

3联机状态下的备份还原

数据库处于运行状态、并正常提供数据库服务情况下进行的备份操作称为联机备份,还原也是同理。联机备份命令其实也是SQL命令的一种,可以用disql或者DM管理工具进行执行。
表空间备份、表备份只能联机状态下进行备份。
备份文件目录需要提前创建好并进行授权:

mkdir -p /dmbak/dmdba/
chown -R dmdba:dinstall /dmbak/dmdba/

3.1库备份

库备份可以在联机或者脱机状态执行,但是库还原必须是脱机状态才可以。
在联机状态下登录disql执行以下命令进行全库备份:

disql SYSDBA/'"密码"'
BACKUP DATABASE  BACKUPSET '/dmbak/dmdba/full_back_20250910';

在/dmbak/dmdba/目录下会生成备份文件:
在这里插入图片描述

将备份集传输到目标库,目标库在脱机状态下进行还原。还原可看第四节。

3.2表空间备份

表空间备份只能联机状态下进行备份,表空间还原需要脱机状态才可以。
在联机状态下登录disql执行以下命令进行test表空间备份:

disql SYSDBA/'"密码"'
BACKUP TABLESPACE test BACKUPSET '/dmbak/dmdba/test_tablespace_20250910';

源库:
在这里插入图片描述

生成的备份集:
在这里插入图片描述

将备份集传输到目标库,目标库在脱机状态下进行还原。还原可看第四节。

3.3单表表备份与还原

表备份只能联机状态下进行备份和还原,无法在脱机状态下进行,且一次只能备份一张表。
在联机状态下登录disql执行以下命令进行TEST2模式下面C3表的备份:

disql SYSDBA/'"密码"'
BACKUP TABLE TEST2.C3 BACKUPSET '/dmbak/dmdba/test2_c3_table_20250910';# 传输备份集 
# scp -r /dmbak/dmdba/test2_c3_table_20250910 root@192.168.30.175:/dmbak/dmdba/
# 传输过去后再授权一下
# chown -R dmdba:dinstall /dmbak/dmdba/

生成备份集并将此目录通过scp命令传输到目标库所在服务器
在这里插入图片描述

在目标库联机状态下登录disql进行联机恢复:
查看备份片中的表信息

disql SYSDBA/'"密码"'
SELECT BACKUPNAME, TABLENAME FROM V$BACKUPSET_TABLE WHERE BACKUPPATH='/dmbak/dmdba/test2_c3_table_20250910';

如果没有查到信息说明这个备份目录没有注册到系统中,实例的目录下有一个bak目录这个就是实例的默认备份目录,在dm.ini的BAK_PATH中默认指定,如果需要使用其他备份目录可以修改配置文件,或者使用以下命令临时添加(只在当前会话有效):

# 将备份集父目录添加到搜索路径中
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/dmbak/dmdba/');

在这里插入图片描述

还原表:

RESTORE TABLE TEST2.C3 FROM BACKUPSET '/dmbak/dmdba/test2_c3_table_20250910';
# 还原成功后查询表数据
select * from TEST2.C3;

在这里插入图片描述

在目标库将TEST2.C3表drop掉的话则不能进行还原:
在这里插入图片描述

但是如果你创建一个一模一样的表结构但是名称叫C4表,然后把表备份导入到C4的话是可以的:
在这里插入图片描述

3.4归档备份与还原

归档日志文件中保存了所有数据库操作产生的REDO日志,所以只要在一个基准备份集的基础上,加上一个完整的归档日志,我们就可以将数据库恢复到任意时间点的状态。为了数据库信息安全还可以将归档日志进行备份和还原。
归档日志备份是专门用来备份本地归档日志文件(注意是归档日志不是备份数据过程中产生的联机日志),将符合条件的本地归档日志文件拷贝到备份集中保存起来。
归档日志备份仅备份指定数据库生成的本地归档日志文件,要求归档日志文件的DB_MAGIC与数据库的DB_MAGIC保持一致。
在开启归档日志后可以在dmarch.ini配置文件的查到归档日志目录,归档日志目录内容如下:重启一次数据库也会滚动一个归档日志
在这里插入图片描述

我们可以通过在disql执行以下命令在联机状态下备份这些归档日志:

disql SYSDBA/'"密码"'
BACKUP ARCHIVE LOG ALL BACKUPSET '/dmbak/dmdba/arch_log_back_20250910';

生成的日志备份集如下:(备份后归档目录最新的归档文件会从开始的2G变成实际使用的大小)
在这里插入图片描述

归档备份的时候还可以指定(也就是“ALL”的位置)FROM LSN:指定备份的起始lsn;UNTIL LSN:指定备份的截止lsn。可以通过查询V$ARCH_FILE视图来获取更详细的归档日志。也可以用时间点来进行日志备份FROM TIME:指定备份的开始的时间点;UNTIL TIME:指定备份的截止的时间点。
这个归档备份其实可以理解为从归档日志中截取出你想要的那部分Redo日志用来在执行一次还原(RESTORE)后进行恢复(RECOVER)的时候要用到的那部分日志。
在备份归档日志成功后,我们以下将实例归档目录下的所有归档文件删除:
在这里插入图片描述
在这里插入图片描述

如果我们想要从归档备份集中还原上面的归档日志的话,必须在脱机状态下还原备份(当然一般正式库不会出现这种情况,我们也可以将TO ARCHIVEDIR指向其他目录用来恢复(RECOVER)任意时间点一个归档日志目录):

./dmrman
# 设置 OVERWRITE 为 2,如果归档文件已存在,会报错。
# 1、指定还原的目标归档日志目录
RESTORE ARCHIVE LOG FROM BACKUPSET '/dmbak/dmdba/arch_log_back_20250910' TO ARCHIVEDIR'/dmdata/arch' OVERWRITE 2;
# 也可以使用以下命令,两者是等价的执行一种即可
# 2、指定还原目标库的 dm.ini 文件路径:
RESTORE ARCHIVE LOG FROM BACKUPSET '/dmbak/dmdba/arch_log_back_20250910' TO  DATABASE '/dmdata/dmdb/dm.ini' OVERWRITE 2; 

在这里插入图片描述

执行还原命令后可以看到归档目录下恢复了一模一样的归档日志文件:
在这里插入图片描述

注意归档还原的时候不是必须要求数据库为脱机状态,比如我要恢复到其他目录的话,可以在数据库运行状态下使用dmrman工具进行归档还原:
在这里插入图片描述

4脱机状态下的备份还原

表空间备份和表备份只能联机状态下进行,库备份和归档日志备份是既可以在联机也可以在脱机状态下进行的;
还原的时候根据备份集类型,数据还原可以分为库还原、表空间还原和表还原。库还原和表空间必须脱机执行;表还原操作只能联机执行。表空间还原的数据来源既可以是表空间备份集,也可以是库备份集。还原的目标表空间不能是 TEMP 表空间。
在脱机状态下我们需要使用dmrman工具进行备份BACKUP、还原RESTORE、恢复RECOVER、更新数据库魔数。

4.1库备份与还原

在数据库实例关闭状态下,使用以下命令进行全库备份:

cd /home/dmdba/dmdbms/bin
./DmServicedmdb stop
./dmrman
BACKUP DATABASE '/dmdata/dmdb/dm.ini' BACKUPSET '/dmbak/dmdba/full_back_20250910'

使用scp命令将/dmbak/dmdba/full_back_20250910文件夹传输到目标库所在的机器:

# 将备份集传输到目的库所在服务器(提前在目的库上创建好对应目录以及授权):
scp -r /dmbak/dmdba/full_back_20250910/ root@192.168.30.175:/dmbak/dmdba/

在目标库进行全库还原:

cd /home/dmdba/dmdbms/bin
./DmServicedmdb stop
./dmrman
# 还原数据库
RESTORE DATABASE '/dmdata/dmdb/dm.ini' FROM BACKUPSET '/dmbak/dmdba/full_back_20250910'
# 恢复归档日志(如果是脱机备份的话是没有归档日志要还原的所以这一步很快执行完成)
RECOVER DATABASE '/dmdata/dmdb/dm.ini' FROM BACKUPSET '/dmbak/dmdba/full_back_20250910'
# 更新数据库魔数
RECOVER DATABASE '/dmdata/dmdb/dm.ini' UPDATE DB_MAGIC

在这里插入图片描述

4.2表空间还原

表空间备份只能联机状态下进行备份,表空间还原需要脱机状态才可以。前面使用以下命令在联机状态下对test表空间进行了备份:

disql SYSDBA/'"密码"'
BACKUP TABLESPACE test BACKUPSET '/dmbak/dmdba/test_tablespace_20250910';

使用以下命令进行还原:

cd /home/dmdba/dmdbms/bin
./DmServicedmdb stop
./dmrman
# 还原表空间
RESTORE DATABASE '/dmdata/dmdb/dm.ini' TABLESPACE test FROM BACKUPSET '/dmbak/dmdba/test_tablespace_20250910';
# 通过重做redo日志恢复表空间
RECOVER DATABASE '/dmdata/dmdb/dm.ini' FROM BACKUPSET '/dmbak/dmdba/full_back_20250910'

在这里插入图片描述

注意:表空间的备份集只能给导出这个备份的实例进行还原。
如果我将上面的的备份集拷贝到另一台机器上进行还原表空间会报错:
在这里插入图片描述

4.3归档备份与还原

前面演示了联机状态下的归档备份,在脱机状态下也可以进行归档备份和还原。脱机状态的备份可以使用以下命令:

cd /home/dmdba/dmdbms/bin
./DmServicedmdb stop
./dmrman
BACKUP ARCHIVE LOG ALL DATABASE '/dmdata/dmdb/dm.ini' BACKUPSET  '/dmbak/dmdba/arch_log_back_20250911'; 

关于归档还原可以看“3.4归档备份与还原”

5使用案例

5.1数据迁移

如果想把一个数据库实例从一台迁移到另一台新的数据库上。
首先,在新的服务器上安装同版本的数据库,并按照源实例的初始化参数在新的服务器上初始化一个一模一样的实例:

cd /home/dmdba/dmdbms/bin
./dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=dmdb instance_name=dmdb SYSDBA_PWD="密码" SYSAUDITOR_PWD="密码" 

charset=1表示UTF-8字符集;SYSSSO用户只有安全版才有可以按需设置SYSSSO_PWD;CASE_SENSITIVE:大小写敏感(Y)
注册数据库服务:要使用root用户

cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmserver -p dmdb -dm_ini /dmdata/dmdb/dm.ini

使用dmdba用户启动数据库实例服务:

cd /home/dmdba/dmdbms/bin
./DmServicedmdb stop

在这里插入图片描述

在源库使用全备进行数据导出:
首先停掉数据库实例:

su - dmdba
cd /home/dmdba/dmdbms/bin
./DmServicedmdb status

然后使用脱机备份工具DMRMAN进行全库备份:

# 创建备份目录
mkdir -p /dmbak/full_bak
# 授权
chown -R dmdba:dinstall /dmbak/
# 备份
cd /home/dmdba/dmdbms/bin
./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/dmdb/dm.ini' BACKUPSET '/dmbak/full_bak'"# 将备份集传输到目的库所在服务器(提前在目的库上创建好对应/dmbak目录):
# scp -r /dmbak/full_bak/ root@192.168.30.175:/dmbak/

如果备份的数据量大的话,要使用后台运行全备命令,否则会中断:

# CTLSTMT的双引号里面就是在rman命令行执行的语句nohup ./dmrman CTLSTMT="backup database '/dmdata/dmdb/dm.ini' FULL backupset '/dmbak/full_bak'  compressed LEVEL 5 parallel 8 "> /dmbak/back_20250909.log &

compressed LEVEL:压缩选项有不同的压缩级别可以选择,取值范围为 0~9。0 表示不压缩,1 表示 1 级压缩,9 表示 9 级压缩。压缩级别越高,压缩越慢,但压缩比越高。若仅指定 COMPRESSED,则压缩级别为 1。实际应用中用户可根据存储空间、数据文件大小、备份效率等确定合适的压缩级别;
PARALLEL:指定是否执行并行备份,以及执行并行备份的并行数,可以根据CPU核心数来制定,一般8以内就行了。
在这里插入图片描述

将备份文件拷贝到目的库所在机器,并执行脱机还原和恢复:

mkdir -p /dmbak/
chown -R dmdba:dinstall /dmbak/# 切换为dmdba用户执行
su - dmdba
cd /home/dmdba/dmdbms/bin
# 校验备份集
./dmrman CTLSTMT="check backupset '/dmbak/full_bak' "
# 还原数据库,如果数据库还是开启状态的话需要关闭实例服务
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/dmdb/dm.ini' FROM BACKUPSET '/dmbak/full_bak'"
# 恢复归档日志
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/dmdb/dm.ini' FROM BACKUPSET '/dmbak/full_bak'"
# 更新数据库魔数
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/dmdb/dm.ini' UPDATE DB_MAGIC"

同样的数据量比较大的话还原也是需要比较长的时间的,我们也可以使用后台运行的方式。

nohup ./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/dmdb/dm.ini' FROM BACKUPSET '/dmbak/full_bak' "> /dmbak/restore_back_20250909.log &

在这里插入图片描述
在这里插入图片描述

目标库还原后,将源库和目标库实例启动

su - dmdba
cd /home/dmdba/dmdbms/bin
./DmServicedmdb start
ps -ef|grep dmdba
systemctl list-unit-files | grep Dm

在这里插入图片描述

然后登录源库和目的库查一下数据量是否一致:

select db_used_space/1024.0/1024/1024*page GB;

补充:脱机备份的全库的备份集是可以多次还原的(RESTORE),但是中断了又要重新开始,数据量大的话比如上百G还是后台运行备份和还原,

5.2创建定时备份作业

定制备份策略如下所示
备份类型 备份周期 备份时间
全量备份 每周 每周六 23 点
增量备份 每天 除周六外每天 23 点
删除备份 每天 每天 23 点 30
登录数据库执行以下命令,创建作业系统表

SP_INIT_JOB_SYS(1);

全量备份(每周六 23 点全备):其中有1分钟后的一次性全备调度,执行完成后检查备份是否成功。

call SP_CREATE_JOB('bakfull',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakfull');
call SP_ADD_JOB_STEP('bakfull', 'bak1', 6, '01020000/dmdata/dmbak', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakfull', 'std1', 1, 2, 1, 64, 0, '23:00:00', NULL, '2021-11-01 21:17:22', NULL, '');
call SP_ADD_JOB_SCHEDULE('bakfull', 'once2bakfull', 1, 0, 0, 0, 0, NULL, NULL, sysdate+1/1440, NULL, '');
call SP_JOB_CONFIG_COMMIT('bakfull');

以上代码中call SP_ADD_JOB_SCHEDULE(‘bakfull’, ‘once2bakfull’, 1, 0, 0, 0, 0, NULL, NULL, sysdate+1/1440, NULL, ‘’);表示添加一个立即执行的测试调度(1 分钟后运行)。1分钟后备份目录下则会生成一个数据库的全备:

增量备份(每周除周六外每天 23 点增量备份):

call SP_CREATE_JOB('bakincr',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakincr');
call SP_ADD_JOB_STEP('bakincr', 'bak2', 6, '41010000/dmdata/dmbak|/dmdata/dmbak', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakincr', 'std2', 1, 2, 1, 63, 0, '23:00:00', NULL, '2021-11-01 21:19:30', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakincr');

备份定期删除(每天 23:30 删除 14 天前备份):

call SP_CREATE_JOB('delbak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('delbak');
call SP_ADD_JOB_STEP('delbak','bak1',0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dmdata/dmbak'');call sp_db_bakset_remove_batch(''DISK'',now()-14);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('delbak', 'del01', 1, 1, 1, 0, 0, '23:30:00', NULL, '2020-11-02 14:48:41', NULL, '');
call SP_JOB_CONFIG_COMMIT('delbak');

增量备份执行后类似这样:
在这里插入图片描述

补充:查询数据库的作业

select * from sysjob.sysjobs;
-- 要执行作业的话:call SP_DBMS_JOB_RUN(1755070830);

如果想删除一个作业则输入以下命令:

CALL SP_DROP_JOB('statistics');

这创建作业语句可以通过DM管理工具来创建,然后将DDL语句拿出来到生成环境的disql进行执行。

5.3全备与增量备份还原

当实例的数据量比较大的时候比如900G,重新执行全备的话需要1个多小时。但是实例有全量备份和两次增量数据,并且现在距离上次增量备份后也有进行修改操作,我们如何利用这3个备份集以及归档日志还原。
主体思路就是,把最近一次全备,两次增量以及归档日志都放到待还原的服务的同一个目录下,并且在还原(RESTORE)的时候指定最近的那次增量备份集,恢复(RECOVER)日志的时候如果你要把归档日志也还原的话就指定从备份的归档日志进行恢复,如果只想恢复到最后一次增量的状态的话就指定从最近那次增量来进行恢复。
首先,可以看到源库有一个全量,3个增量备份,
在这里插入图片描述

然后我们再插入一条测试数据到TEST2.C4:

insert into TEST2.C4(FID,FDESC) values(3,'在第三次增量备份后插入的数据')
select * from TEST2.C4;

测试表中有以下数据:
在这里插入图片描述

为了让联机日志进行完全检查点,把联机日志所有更改写入归档日志,所以需要关闭源库,然后再拷贝归档目录下的所有日志文件

cd /home/dmdba/dmdbms/bin
./DmServicedmdb stop
ps -ef|grep dmdba

在这里插入图片描述

拷贝归档日志:

cd /dmdata/dmbak
mkdir arch_log
cp -r /dmdata/arch /dmdata/dmbak/arch_log
scp -r /dmdata/dmbak root@192.168.30.175:/dmbak/dmdba/

在这里插入图片描述

将以上全量、增量、归档日志拷贝到目标库所在机器的/dmbak/dmdba/dmbak目录下。然后在脱机状态下进行目标库的还原:

su - dmdba
cd /home/dmdba/dmdbms/bin
./DmServicedmdb stop
# 还原数据库,如果数据库还是开启状态的话需要关闭实例服务
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/dmdb/dm.ini' FROM BACKUPSET '/dmbak/dmdba/dmbak/DB_DSC_INCREMENT_CUMULATIVE_2025_09_11_23_00_36'"
# 恢复归档日志
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/dmdb/dm.ini' WITH ARCHIVEDIR '/dmbak/dmdba/dmbak/arch_log/arch'"
# 更新数据库魔数
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/dmdb/dm.ini' UPDATE DB_MAGIC"

在这里插入图片描述

启动目标库实例,然后查询就能看到全量数据了,比如最后一次增量后插入TEST2.C4的数据:

在这里插入图片描述

达梦社区地址:https://eco.dameng.com/

http://www.dtcms.com/a/445855.html

相关文章:

  • 【AI论文】OpenGPT-4o-Image:面向高级图像生成与编辑的综合性数据集
  • Pyenv 使用教程:安装与卸载
  • 告别PECL,拥抱PIE:像Composer一样管理PHP扩展
  • weex做网站python做网页
  • 【超详细】使用conda配置python的开发环境
  • 深圳沙井公司网站建设网上银行登录
  • 高端公司网站建设自适应网站cms
  • isis整体知识梳理
  • 水管 / 污水管道巡检机器人(研究思路_1)
  • 操作系统命令:Linux与Shell(Operating System Command Line, OS/CLI)目录导航、文件操作与日志查看命令实践
  • 北海建设工程信息网站自助提卡网站怎么做
  • 【QT】概述补充——对象树
  • 一套完整的前端“白屏”问题分析与解决方案(性能优化)
  • fd 工具指南:find 的现代替代品
  • 珠海做网站最好的公司有哪些做恐怖网站
  • 国庆训练题题解10.5
  • CLion实现ini 解析器设计与实现
  • python全栈(基础篇)——day04:后端内容(字符编码+list与tuple+条件判断+实战演示+每日一题)
  • 广州网站建设功能洛阳霞光企业网站建设公司
  • list 与 forward_list:一场 STL 中的“链表哲学”之争
  • Vue 学习与实践大纲(后端视角)
  • 2025时序数据库选型,从架构基因到AI赋能来解析
  • 三合一网站平台做网站 如何注册公司
  • 中山今科网站建设德州百度推广公司
  • Rust 与 传统语言:现代系统编程的深度对比
  • STM32--智能小车
  • Rust 登堂 之 Cell 和 RefCell(十二)
  • 分布式追踪系统实战:OpenTelemetry集成Istio实现全链路故障定位
  • 不同光谱的工业相机有哪些?能做什么?
  • 计算机网络——数据链路层笔记整理