参考官方文档:物理备份还原 | 达梦技术文档 (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;
|
都正常
场景二:删表空间与用户
- 新建表空间与用户,并在里边添加点数据,然后进行全量备份,使用全量备份集还原。
- 用
SYSDBA
将 TEST
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
|
管理控制台增量备份
步骤都差不多,区别就是增量备份需要基于一个全量备份集。
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 天备份集