主备集群 达梦数据库备份还原实践(四)

字数: 4908

参考官方文档:物理备份还原 | 达梦技术文档 (dameng.com)

备份还原过程中的问题解决方案参考:备份还原 | 达梦技术文档 (dameng.com)

备份还原其实也挺简单,就是备份,一般整库备份,一般开启联机备份。就是把全库导出来,然后重新刷进去的过程

备份:就是从数据库文件拷贝出有效的数据页保存到备份集中

还原:就是备份的逆过程,将备份集中的数据内容(数据文件、数据页、归档文件)重新写入到目标数据文件的过程。

恢复:通过重做归档日志,将数据库恢复到备份结束时的状态,或者恢复到指定的时间点和LSN。

备份还原基础

相关术语

  • 联机备份还原:数据库处于运行状态时,进行的备份还原操作
  • 脱机备份还原:数据库服务关闭的情况下,进行的备份还原操作
  • 备份集:存放备份数据

备份的前提

对数据库实例开启归档模式,并处于打开的状态(如果是集群的话,就不需要再打开了,因为集群搭建时就会打开归档。如果是单机版,有可能没有打开归档模式,需要先打开)

1
2
3
4
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/home/dmdba/dmdbms/DMDB/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=10240';
ALTER DATABASE OPEN;

然后重新启动一下 达梦管理工具 ,不然达梦管理工具没刷新生效。建议直接到数据库服务器上使用 ./disql 操作

联机与脱机备份还原的区别

备份还原

备份

联机备份,就是数据库运行时进行备份。支持的备份有:

  • 数据库备份
  • 用户表空间备份
  • 用户表备份
  • 归档备份

脱机备份,只支持:

  • 数据库备份
  • 归档备份

表空间备份、表备份,只能联机备份!

数据库备份命令
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 全备
BACKUP DATABASE FULL BACKUPSET '/opt/dmdbms/BAK/db_full_bak_01';

# 增备
BACKUP DATABASE INCREMENT BACKUPSET '/opt/dmdbms/BAK/db_full_bak_01';

# 设置备份压缩等级 COMPRESSED LEVEL
BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_3_06' COMPRESSED LEVEL 5;

# 设置并行备份 PARALLEL
BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8;

# 设置切片大小 MAXPIECESIZE
BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_3_05' MAXPIECESIZE 300;

# 设置备份文件的名称 TO BAK_NAME
BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/dm_bak/db_bak_3_02';

# 添加备份备注 BACKUPINFO
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_04' BACKUPINFO  '完全备份';

结合起来就是这样的:

1
backup database full to "DB_DAMENG_FULL_2024_09_11_16_12_29" backupset '/home/dmdba/data/DAMENG/bak/DB_DAMENG_FULL_2024_09_11_16_12_29' backupinfo '全量备份' compressed level 1 parallel 8;
归档备份命令
1
BACKUP ARCHIVE LOG ALL BACKUPSET 'arch_bak_01'; 

这个应该是全备?参数也跟【数据库备份命令】一样

还原

达梦的联机还原,只支持表的还原。库、表空间等均不支持。

不推荐联机还原,当数据库需要还原时,肯定发生了一些大操作,使用脱机更好。

还原可以还原到指定的备份集(不管是联机备份数据库备份集,还是脱机备份的数据库备份集),也可以还原到指定的归档文件。

还原操作统一有一个工具 ./dmrman

DMRMAN(DM RECOVERY MANAGER)是脱机备份还原命令行工具,无需额外安装,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低用户的操作难度。

1
2
3
4
5
6
##启动DMRMAN
./dmrman

##退出DMRMAN
##启动后控制台中输入 exit 命令
RMAN>exit;

备份还原实践(单机版)

本次验证达梦单机版上的备份与还原,以防以后遇到后临时抱佛脚。

注意:

  • 请确保开启了归档模式!不然无法备份的。
  • 联机备份库、脱机还原库
  • 所有操作没有特定说明,均使用 dmdba 用户进行操作

本次为 全量备份 + 增量备份 还原数据库的实践

注意:

  • 当有全量备份 + 增量备份时,只需要使用最新的增量备份进行还原即可。但是全量备份文件不可删除,必须存在。
  • 也可以只使用全量,但是会造成期间数据的丢失。

场景一:删表还原(全备 + 增备还原)

  • 使用全备 + 增备,通过最新的增备文件进行还原

备份

因为我的测试库已经有一个 TEST 用户并且具有 DBA 权限,所以此处直接开始造数据,省略了建立表空间、用户、授权的前置步骤。

在数据库中插入测试数据
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
CREATE TABLE TEST.T_BAKUP_TEST(
	ID INT,
	BUSI_DATE DATE,
	DESCRIPTION VARCHAR2(200)
);

INSERT INTO TEST.T_BAKUP_TEST VALUES(1, SYSDATE(), '这是一条测试数据,用于备份还原的验证');
INSERT INTO TEST.T_BAKUP_TEST VALUES(2, SYSDATE(), 'aoedtl');

SELECT * FROM TEST.T_BAKUP_TEST;

数据如下:

1
2
1	2024-09-11 15:07:55	这是一条测试数据,用于备份还原的验证
2	2024-09-11 15:08:44	aoedtl

当然也有其他的测试表、数据、SP、表空间、用户等,顺便准备就行。

执行全备
1
BACKUP DATABASE FULL TO DB_DM_FULL_20240911_154700 BACKUPSET '/home/dmdba/data/DAMENG/bak' COMPRESSED LEVEL 5 ;

这个为啥备份了,名字没有按照命令设置?

1
2
3
4
5
[root@status bak]# ll
total 369736
-rw-r--r-- 1 dmdba dm     11264 Sep 11 16:01 bak_1.bak
-rw-r--r-- 1 dmdba dm 378478080 Sep 11 16:01 bak.bak
-rw-r--r-- 1 dmdba dm    116224 Sep 11 16:01 bak.meta

得这样:

1
BACKUP DATABASE FULL TO "DB_DM_FULL_20240911_1618" BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_FULL_20240911_1618' COMPRESSED LEVEL 1;
执行增备
第一次增备

往数据库里添加点新数据

1
2
INSERT INTO TEST.T_BAKUP_TEST VALUES(3, SYSDATE(), '第2条');
INSERT INTO TEST.T_BAKUP_TEST VALUES(4, SYSDATE(), '第3条');

然后执行增备

1
BACKUP DATABASE INCREMENT TO "DB_DM_INCREMENT_20240911_1623" BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_INCREMENT_20240911_1623' COMPRESSED LEVEL 1;
第二次增备
1
2
3
4
INSERT INTO TEST.T_BAKUP_TEST VALUES(5, SYSDATE(), '第4条');
INSERT INTO TEST.T_BAKUP_TEST VALUES(6, SYSDATE(), '第5条');

BACKUP DATABASE INCREMENT TO "DB_DM_INCREMENT_20240911_1625" BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_INCREMENT_20240911_1625' COMPRESSED LEVEL 1;
查看备份集

到服务器里看看,备份集

1
2
3
4
5
[root@status bak]# ll
total 12
drwxr-xr-x 2 dmdba dm 4096 Sep 11 16:19 DB_DM_FULL_20240911_1618
drwxr-xr-x 2 dmdba dm 4096 Sep 11 16:24 DB_DM_INCREMENT_20240911_1623
drwxr-xr-x 2 dmdba dm 4096 Sep 11 16:25 DB_DM_INCREMENT_20240911_1625

还原

全备 + 增备后还原,看看表数据是否恢复正常

删除表

上边已经备份完成了,直接把上边创建的表删了,然后进行还原操作,看看是否恢复。

1
DROP TABLE TEST.T_BAKUP_TEST;
还原操作

1)关闭数据库服务

1
2
3
[root@status bak]# cd /home/dmdba/dmdbms/bin
[root@status bin]# ./DmServiceDASERVER stop
Stopping DmServiceDASERVER:                                [ OK ]

2)启动 ./dmrman 服务进行校验备份集

1
2
3
4
5
6
7
8
9
[root@status bin]# ./dmrman 
dmrman V8

# 校验最新的增量备份集
RMAN> CHECK BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_INCREMENT_20240911_1625';
CHECK BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_INCREMENT_20240911_1625';
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]                                 
check backupset successfully.
time used: 166.999(ms)

3)还原

1
2
3
4
5
6
7
8
9
RMAN> RESTORE DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_INCREMENT_20240911_1625';
RESTORE DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_INCREMENT_20240911_1625';
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:03][Remaining:00:00:00]                                   
[-8024]:数据文件读写出错

这里还原时,报错了 [-8024]

查看官方文档:备份还原 | 达梦技术文档 (dameng.com)

因为用户忘了切换,使用了 root 用户进行操作。需要使用 dmdba 用户进行操作才行,也要注意备份的文件 dmdba 用户是否有权限读写。

切换dmdba 重新来

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
RMAN> RESTORE DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_INCREMENT_20240911_1625';
RESTORE DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_INCREMENT_20240911_1625';
file dm.key not found, use default license!
os_file_open_low_real error! desc: Permission denied, path: /home/dmdba/data/DAMENG/SYSTEM.DBF, code: 13
os_file_open_normal_rw error! path: '/home/dmdba/data/DAMENG/ctl_bak/dm_20240911165939_295566.ctl', code: 13, desc: Permission denied
os_file_open_normal_rw error! path: '/home/dmdba/data/DAMENG/ctl_bak/dm_20240911165845_735048.ctl', code: 13, desc: Permission denied
os_file_open_low_real error! desc: Permission denied, path: /home/dmdba/data/DAMENG/DAMENG01.log, code: 13
os_file_open_low_real error! desc: Permission denied, path: /home/dmdba/data/DAMENG/DAMENG02.log, code: 13
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:19][Remaining:00:00:00]os_file_open_normal_rw error! path: '/home/dmdba/data/DAMENG/ctl_bak/dm_20240911165939_295566.ctl', code: 13, desc: Permission denied
os_file_open_normal_rw error! path: '/home/dmdba/data/DAMENG/ctl_bak/dm_20240911165845_735048.ctl', code: 13, desc: Permission denied
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:19][Remaining:00:00:00]                                 
restore successfully.
time used: 00:00:19.990

error 报错都是 Permission denied ,挨个看看目录、文件的用户主组是否都是 dmdba

先不管,往下执行看看最后能不能成功?

也能成功,使用 dmdba 用户执行的话,是不会有权限拒绝的情况的

恢复操作

据库恢复是指重做 REDO 日志,有两种方式:从备份集恢复,即重做备份集中的 REDO 日志;或从归档恢复,即重做归档中的 REDO 日志。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
RMAN> RECOVER DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_INCREMENT_20240911_1625';
RECOVER DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_INCREMENT_20240911_1625';
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[3756051], file_lsn[3756051]
[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]                               
recover successfully!
time used: 00:00:02.726

恢复成功

更新操作

数据库更新是指更新数据库的 DB_MAGIC,并将数据库调整为可正常工作状态,与数据库恢复一样使用 RECOVER 命令完成。数据库更新发生在重做 REDO 日志恢复数据库后。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
RMAN> RECOVER DATABASE '/home/dmdba/data/DAMENG/dm.ini'  UPDATE DB_MAGIC;
RECOVER DATABASE '/home/dmdba/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[3756064], file_lsn[3756064]
os_file_open_normal_rw error! path: '/home/dmdba/data/DAMENG/ctl_bak/dm_20240911165939_295566.ctl', code: 13, desc: Permission denied
os_file_open_normal_rw error! path: '/home/dmdba/data/DAMENG/ctl_bak/dm_20240911165845_735048.ctl', code: 13, desc: Permission denied
recover successfully!
time used: 00:00:01.182

这个 DB_MAGIC 就是魔数,魔数,就是每个数据文件、REDO \ UNRO 日志开头的一个标识

重启数据库验证还原情况

执行更新操作后,数据库就算还原成功了。这个时候启动数据库实例,进去看看有没有还原【2.1.1】步骤中删除的表。

1
2
SELECT * FROM SYS.ALL_OBJECTS A WHERE A.OWNER = 'TEST' AND A.OBJECT_NAME = 'T_BAKUP_TEST';
SELECT * FROM TEST.T_BAKUP_TEST;

都正常

场景二:删表空间与用户

  • 新建表空间与用户,并在里边添加点数据,然后进行全量备份,使用全量备份集还原。
  • SYSDBATEST BAKUSER 都删掉,然后恢复。具体:删除 TEST 用户,删除 BAKUSER 用户与对应表空间。
  • 验证表空间、用户、权限是否都恢复。

准备工作

新建表空间、用户、授权

使用 SYSDBA 创建测试的表空间、用户,并给 4 个权限

1
2
3
4
5
6
7
8
-- 创建表空间
CREATE TABLESPACE "TS_BACKUP_TEST" DATAFILE '/home/dmdba/data/DAMENG/TS_BACKUP_TEST.DBF' SIZE 128 AUTOEXTEND ON NEXT 40 MAXSIZE 1024; 
-- 创建用户
CREATE USER BAKUSER IDENTIFIED BY "test123456" DEFAULT TABLESPACE TS_BACKUP_TEST;
GRANT CREATE SESSION TO BAKUSER;
GRANT CREATE TABLE TO BAKUSER;
GRANT INSERT ANY TABLE TO BAKUSER;
GRANT INSERT TABLE TO BAKUSER;

查看它的权限

1
2
3
4
5
6
SELECT * FROM DBA_SYS_PRIVS A WHERE A.GRANTEE = 'BAKUSER';
-----------------------------
BAKUSER	CREATE TABLE	NO
BAKUSER	INSERT TABLE	NO
BAKUSER	INSERT ANY TABLE	NO
BAKUSER	CREATE SESSION	NO
添加测试数据

使用创建好的用户 BAKUSER 造点数据

1
2
3
4
5
6
CREATE TABLE BAKUSER.T_TEST(
	ID INT,
	MARK VARCHAR2(200)
);

INSERT INTO BAKUSER.T_TEST VALUES (1, '用来验证还原操作的数据');

备份

直接全备,不用增备了

1
BACKUP DATABASE FULL TO "DB_DM_FULL_20240912_093400" BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_FULL_20240912_093400' COMPRESSED LEVEL 1;

还原

删除表空间、用户
  • 删除 TEST 用户
  • 删除 BAKUSER 用户、删除它的表空间
1
2
3
4
-- 使用级联删除
DROP USER BAKUSER CASCADE;
DROP TABLESPACE TS_BACKUP_TEST;
DROP USER TEST CASCADE;
还原操作

1)关闭数据库

1
2
3
[dmdba@status /]$ cd /home/dmdba/dmdbms/bin
[dmdba@status bin]$ ./DmServiceDASERVER stop
Stopping DmServiceDASERVER:                                [ OK ]

2)检验备份集

1
2
3
4
5
6
7
[dmdba@status bin]$ ./dmrman 
dmrman V8
RMAN> CHECK BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_FULL_20240912_093400';
CHECK BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_FULL_20240912_093400';
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:01][Remaining:00:00:00]                                 
check backupset successfully.
time used: 00:00:01.752

3)还原操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
RMAN> RESTORE DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_FULL_20240912_093400';
RESTORE DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_FULL_20240912_093400';
file dm.key not found, use default license!
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:18][Remaining:00:00:00]                                 
restore successfully.
time used: 00:00:18.930
恢复操作
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
RMAN> RECOVER DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_FULL_20240912_093400';
RECOVER DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/data/DAMENG/bak/DB_DM_FULL_20240912_093400';
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[3756229], file_lsn[3756229]
[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]                               
recover successfully!
time used: 00:00:02.774
更新操作
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
RMAN> RECOVER DATABASE '/home/dmdba/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
RECOVER DATABASE '/home/dmdba/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[3756333], file_lsn[3756333]
recover successfully!
time used: 00:00:01.182
重启数据库验证还原情况
1
2
[dmdba@status bin]$ ./DmServiceDASERVER start
Starting DmServiceDASERVER:                                [ OK ]
1
2
3
4
5
6
7
8
9
-- 查看用户
SELECT * FROM SYS.ALL_USERS;
---------------------------------------------------
SYS	50331648	2024-06-24 16:33:25.403980
SYSDBA	50331649	2024-06-24 16:33:25.403980
SYSAUDITOR	50331650	2024-06-24 16:33:25.403980
SYSSSO	50331651	2024-06-24 16:33:25.403980
TEST	50331748	2024-06-24 17:02:49.225244
BAKUSER	50331749	2024-09-12 09:04:08.170548
1
2
3
4
5
6
7
8
9
-- 查看表空间
SELECT * FROM V$TABLESPACE;
---------------------------------------------------
0	SYSTEM		1	0	0	9472	1						3008	0	0	64	404	1
1	ROLL		1	0	0	16384	1						336	0	0	64	1003	38
3	TEMP		2	0	0	1280	1						48	0	0	64	77	34
4	MAIN		1	0	0	16384	1						256	0	0	64	1008	1
5	TS_TEST		1	0	0	197120	1						195904	0	0	64	76	1
6	TS_BACKUP_TEST		1	0	0	16384	1						32	0	0	64	1022	1
1
2
3
4
5
6
7
-- 查看用户权限
SELECT * FROM DBA_SYS_PRIVS A WHERE A.GRANTEE = 'BAKUSER';
---------------------------------------------------
BAKUSER	CREATE TABLE	NO
BAKUSER	INSERT TABLE	NO
BAKUSER	INSERT ANY TABLE	NO
BAKUSER	CREATE SESSION	NO
1
2
3
4
-- 查看测试表数据
SELECT * FROM BAKUSER.T_TEST;
---------------------------------------------------
1	用来验证还原操作的数据

都还原成功了。

实际项目的备份方案

  • 每周六全量备份 + 每天晚上 9 点进行增量备份(定时备份)
  • 保留两周的备份文件,定期删除两周以前的备份文件(定期删除)

管理工具备份

管理控制台全量备份

进入达梦管理工具 - 右键代理 - 新建代理环境 - 作业 - 新建作业

1)填写作业名

2)设置步骤名称、备份路径、备份方式、压缩级别

  • 备份路径:填写数据库服务器的路径

3)设置频率、持续实践

  • 全量为每周六,中午12点(可以自己定)
  • 增量可以每天晚上9点

4)执行后,在服务里可以看到已经备份了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[root@YD-FXQDB01-3-161 bak]# pwd
/u01/amop/AMOP/bak
[root@YD-FXQDB01-3-161 bak]# ll
总用量 0
drwxr-xr-x 2 dmdba dinstall 141  9月 12 11:21 DB_AMOP_FULL_2024_09_12_11_21_56
[root@YD-FXQDB01-3-161 bak]# cd DB_AMOP_FULL_2024_09_12_11_21_56/
[root@YD-FXQDB01-3-161 DB_AMOP_FULL_2024_09_12_11_21_56]# ll
总用量 14004
-rw-r--r-- 1 dmdba dinstall  1312768  9月 12 11:21 DB_AMOP_FULL_2024_09_12_11_21_56_1.bak
-rw-r--r-- 1 dmdba dinstall 12913152  9月 12 11:21 DB_AMOP_FULL_2024_09_12_11_21_56.bak
-rw-r--r-- 1 dmdba dinstall   108032  9月 12 11:21 DB_AMOP_FULL_2024_09_12_11_21_56.meta
  • 全量备份的名称是 DB_实例名_FULL_日期
管理控制台增量备份

步骤都差不多,区别就是增量备份需要基于一个全量备份集。

SQL 备份

SQL 全量备份
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
call SP_CREATE_JOB('全量备份_周六',1,0,'',0,0,'',0,'每周六定时全量备份数据库');

call SP_JOB_CONFIG_START('全量备份_周六');

call SP_ADD_JOB_STEP('全量备份_周六', 'DB_DM_FULL_BACKUP', 6, '01000000/u01/amop/AMOP/bak', 0, 0, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('全量备份_周六', 'DB_DM_FULL_BACKUP', 1, 2, 1, 64, 0, '12:00:00', NULL, '2024-09-12 11:15:41', NULL, '');

call SP_JOB_CONFIG_COMMIT('全量备份_周六');

call SP_JOB_SET_SCHEMA('全量备份_周六', 'SYSDBA');
SP 详解
SP_CREATE_JOB
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SP_CREATE_JOB(
  JOB_NAME,		-- 作业名称
  ENABLED,		-- 作业是否启用 1-启用,0-不启用
  ENABLE_EMAIL,		-- 是否开启邮件系统 1-启用,0-不启用
  EMAIL_OPTR_NAME,		-- 操作员名称,没有为 '' 空
  EMAIL_TYPE,					-- 什么情况下发邮件 0-成功后发 1-失败发 2-结束就发
  ENABLED_ENTSEND,		-- 是否开启网络作业 1-开 0-不开
  NETSEND_OPTR_NAME,	-- 操作员,没有为 '' 空
  ENTSEND_TYPE,				-- 什么情况下发消息,0-成功发 1-失败发 2-结束就发
  DESCRIBE		-- 作业描述,可以为 '' 空
)
SP_JOB_CONFIG_START
1
2
3
SP_JOB_CONFIG_START(
  JOB_NAME		-- 开始配置某个作业,传作业名称
)

额,具体详见《DM8作业系统使用手册.pdf》,不再看了,用达梦管理工具就行了。

SQL 增量备份
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
call SP_CREATE_JOB('增量备份_每日',1,0,'',0,0,'',0,'');

call SP_JOB_CONFIG_START('增量备份_每日');

call SP_ADD_JOB_STEP('增量备份_每日', 'DayBackup', 6, '11000000/u01/amop/AMOP/bak/|/u01/amop/AMOP/bak', 0, 0, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('增量备份_每日', 'DayBackup', 1, 1, 1, 0, 0, '21:00:00', NULL, '2024-09-12 13:09:05', NULL, '');

call SP_JOB_CONFIG_COMMIT('增量备份_每日');

call SP_JOB_SET_SCHEMA('增量备份_每日', 'SYSDBA');

定期删除旧备份文件

删除旧备份,确保不会把所有的备份都删除,要确保一个最新的增量备份以及它的基备份存在(反正就是留着最新的全量 + 增量备份集)

  • 加一个删除备份的作业步骤
  • 在上一个作业步骤设置,执行成功后继续执行下一步:删除备份的作业

删除备份的SP如下:

1
2
3
4
-- 添加备份目录
SF_BAKSET_BACKUP_DIR_ADD('DISK','/u01/amop/AMOP/bak');
-- 删 30 天前的备份文件
CALL SP_DB_BAKSET_REMOVE_BATCH('DISK',SYSDATE-30);

总结

  • 还原就是使用 全量 + 增量 备份集进行还原
  • 还原操作 RESTORE DATABASE 后,数据库还不能操作,需要使用 RECOVER 恢复数据库工作,最后更新数据库的 DB_MAGIC 魔数
  • 实际项目上的方案:每周全量 + 每天增量 + 保留 14 天备份集
Licensed under CC BY-NC-SA 4.0
最后更新于 2024年10月14号 22:37