注册
达梦数据库物理备份还原
培训园地/ 文章详情 /

达梦数据库物理备份还原

陈星宇 2022/12/07 1086 0 0

一,备份还原基本概念

1,备份包含物理备份和逻辑备份。
物理备份是拷贝有效的数据页,不关心数据页的具体内容是什么。
逻辑备份是导出数据库中逻辑数据,针对的是数据内容,并不关心这些数据物理存储在什么位置。
2,物理备份分为完全备份、增量备份;联机备份(热备)和脱机备份(冷备)。
完全备份:是指一个备份包含指定数据库或表空间的所有数据;
增量备份:是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件;

增量备份包含差异增量备份和累积增量备份,默认是差异增量备份。 	
	1.差异增量备份的基础备份集可以是全量备份,也可以是增量备份; 
	2.累计增量备份的基备份集只能是全量备份。  

差异增量备份和累积增量备份的差别:

1.累积增量需要更多的备份时间,同时需要较小的恢复时间;
2.差异增量正好相反,它可以备份同级备份以来变化的数据块。所以会减少备份时间,但需要更多的恢复时间

联机备份(热备)和脱机备份(冷备)

热备:指数据库启动状态下的备份 
冷备:指数据库关闭状态下的备份。

3,备份级别:全库备份、表空间级备份、表级备份、归档备份。
4,还原与恢复
4.1还原
物理还原是备份的逆过程;恢复是使用归档将数据库恢复到最新状态或指定时间点;或使用备份集中的redo信息将数据库恢复至一致性状态。

1.联机还原:指数据库处于运行状态时,通过SQL语句执行还原操作。
2.脱机还原:指数据库处于关闭状态时执行的还原操作,脱机还原通过DMRMAN工具进行。
3.库还原和表空间必须脱机执行;表还原操作只能联机执行
4.表空间还原:数据来源既可以是表空间备份集,也可以是库备份集。还原的目标表空间不能是TEMP表空间,只能是MAIN、SYSTEM、ROLL表空间,或者用户定义的表空间。
5.表还原:是从表备份集读取数据,重新恢复目标表数据,还会在目标表上重建索引、约束。
6.归档日志还原则将归档日志备份集中的归档日志内容,重新生成到指定目录中。

4.2恢复
数据恢复是指在还原执行结束后,重做REDO日志,将数据库恢复到一致性状态,并执行更新DB_MAGIC的过程。
更新数据库魔术(DB_MAGIC):每次库级备份或还原后都要更新数据库魔数。
可以通过下列语句查看系统的PERMANENT_MAGIC(数据库永久永久魔数)和DB_MAGIC(数据库魔数)值

SELECT PERMANENT_MAGIC; 
SELECT DB_MAGIC FROM V$RLOG;

image.png

二,联机备份还原实战

联机备份:数据库是启动状态
联机备份:可能存在一些处于活动状态的事务正在执行,为确保备份数据的一致性只能在配置本地归档、并开启本地归档的数据库上执行联机备份
联机备份准备:
1.在数据文件目录data/DAMENG下配置dmarch.ini

[ARCHIVE_LOCAL1]
ARCH_TYPE= LOCAL    #归档类型 
LOCAL/REALTIMEARCH_DEST= /dm8/data/DAMENG/arch    #归档目标路径
ARCH_FILE_SIZE= 1024    #归档文件大小,单位
ARCH_SPACE_LIMIT = 10240     #单位Mb,0表示无限制,范围1024~2147483647M

2.打开dm.ini中归档开关:

ARCH_INI=1vim /dm8/data/DAMENG/dm.ini

重启数据库服务器

./DmServiceRAC1 stop
./DmServiceRAC1 start

3.启动DMAP服务
启动DMAP服务的操作系统用户,必须和启动DM服务的操作系统用户保持一致,否则报错

cd /dm8/bin
./DmAPService start

1.完全备份:备份的是数据库或者表空间全部的数据

1.1.建表,并插入数据

create table test(id int);
insert into test values(1);
commit;

image.png
1.2.在disql中执行联机完全备份数据库

backup database full to "backup" backupset '/dm8/data/backup';

image.png

select * from v$backupset;  --查看备份集基本信息

image.png
1.3删除表

drop table test;

1.4.停止数据库服务器,启动dmrman工具,执行脱机还原

cd /dm8/bin
./dmrman

基于备份集将数据库还原到备份时刻

RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup';

image.png
1.5.恢复数据库
基于归档将数据库完全恢复到最新状态

RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup';

更新数据库魔术:每次库级备份或还原后都要更新数据库魔数。

RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

image.png
1.6.启动数据库服务,查询表
select * from test;
drop table test;
image.png

2.增量备份:备份上一次完全备份或者增量备份后,以后每次只备份修改过的数据页

2.1.差异增量备份

差异增量备份的基备份既可以是一个完全备份集,也可以是一个增量备份集。
2.1.1启动数据库,登录disql,并建表,插入数据

./disql SYSDBA/SYSDBA@192.168.92.201
create table test(id int);
insert into test values(1);
commit;
select * from test;

2.1.2执行联机完全备份数据库

backup database full to "db_full_bak_01" backupset '/dm8/data/db_full_bak_01';

image.png
2.1.3继续向表插入数据

insert into test values(2);
insert into test values(3);
commit;

image.png
2.1.4执行联机增量备份数据库

backup database increment base on backupset '/dm8/data/db_full_bak_01' to "db_increment_bak_02" backupset '/dm8/data/db_increment_bak_02';

image.png
2.1.5删除表

drop table test;

2.1.6停止数据库服务,使用dmrman工具执行脱机还原数据库

./DmServiceRAC1 stop
./dmrman
RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/db_increment_bak_02';

image.png
2.1.7使备份集恢复

RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/db_increment_bak_02';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

image.png
2.1.8启动数据库服务,查询表

./disql SYSDBA/SYSDBA@192.168.92.201
select * from test;

image.png

2.2累积增量备份

累积增量备份的基备份只能是完全备份集,而不能是增量备份集。
2.2.1启动数据库,登录disql,并建表,插入数据

./disql SYSDBA/SYSDBA@192.168.92.201
create table test(id int);
insert into test values(1);
commit;
select * from test;

image.png
2.2.2执行联机完全备份数据库

backup database full to "backup" backupset '/dm8/data/bak/db_full_bak_01';

image.png
2.2.3继续向表插入数据

insert into test values(2);
insert into test values(3);
commit;

image.png
2.2.4执行联机累计增量备份数据库

backup database increment cumulative base on backupset '/dm8/data/bak/db_full_bak_01' to "db_increment_bak_03" backupset '/dm8/data/bak/db_increment_bak_03';

image.png
2.2.5删除表

drop table test;

2.2.6停止数据库服务,使用dmrman工具执行脱机还原数据库

./DmAPService stop
./dmrman
RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/bak/db_increment_bak_03';

image.png
2.2.7使备份集恢复

RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/bak/db_increment_bak_03';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

image.png
2.2.8启动数据库服务,查询表

./disql SYSDBA/SYSDBA@192.168.92.201
select * from test;

image.png

3.表空间级备份与还原

DM仅支持表空间联机备份
3.1创建表空间

create tablespace "TS1" datafile '/dm8/data/DAMENG/TS1.dbf' size 128;

image.png
3.2创建表,并指定表的存储空间为TS1

create table test(c1 int) storage(on "TS1");
insert into test values(1);
commit;

image.png
3.3备份表空间

backup tablespace "TS1" full to "ts_bak_01" backupset '/dm8/data/bak/ts_bak_01' device type disk;

image.png
3.4删除TS1表空间数据文件

host rm TS1.DBF

3.5停止数据库服务器,启动dmrman工具,执行表空间还原:

RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' TABLESPACE TS1 FROM BACKUPSET '/dm8/data/bak/ts_bak_01';

image.png
3.6恢复数据库

RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' TABLESPACE TS1;

image.png
3.7查询表test

select * from test;

image.png

4.表级备份和还原

4.1建表,并插入数据

create table test(id int);
insert into test values(1);
commit;

image.png
4.2备份表

backup table "SYSDBA"."TEST" to "test_bak" backupset '/dm8/data/bak/test_bak';

image.png
image.png

4.3删除表

drop table test;

4.4执行表结构还原

RESTORE TABLE test STRUCT FROM BACKUPSET '/dm8/data/bak/test_bak';

image.png
4.5执行表数据还原
表还原是联机完全备份还原,因此还原后不需要恢复。

RESTORE TABLE "SYSDBA"."TEST" FROM BACKUPSET '/dm8/data/bak/test_bak';

image.png
4.6查询表

select * from test;

5.归档备份与还原

5.1联机执行数据归档日志备份

backup archive log all to "arch_01" backupset '/dm8/data/bak/arch_01';

image.png
5.2停止数据库服务,启动dmrman工具,脱机执行归档还原

RESTORE ARCHIVE LOG FROM BACKUPSET '/dm8/data/bak/arch_01' to database '/dm8/data/DAMENG/dm.ini' OVERWRITE 3;

image.png

6.恢复到指定时间点

恢复数据库到指定时间点/LSN是从归档恢复的一种方式,也称为不完全恢复
通过:
RECOVER DATABASE…UNTIL TIME命令恢复到指定的时间
例:
6.1建表,并插入数据

create table test(id int);
insert into test values(1);
commit;

image.png
6.2进行联机完全备份

backup database full to "db_full" backupset '/dm8/data/db_full';

image.png
6.3插入数据,并查询当前时间:

insert into test values(2);
commit;
select * from test;
SELECT SYSDATE;--查询当前时间
SELECT FILE_LSN FROM V$RLOG;--查询此时的LSN

记录当前时间t1:2022-10-25 21:10:55
LSN:86767
image.png

6.4过两分钟左右,在插入数据:

insert into test values(3);
commit;
select * from test;
SELECT SYSDATE;--查询当前时间
SELECT FILE_LSN FROM V$RLOG;--查询此时的LSN

记录当前时间t2:2022-10-25 21:13:28
LSN:86818
image.png
6.5停止数据库服务,使用dmrman工具还原数据库:

RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/db_full';

image.png
6.6将数据库恢复到t1与t2之间的时间点

RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dm8/data/DAMENG/arch' UNTIL TIME '2022-10-25 21:10:55';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

image.png
6.7重启数据库,查询test数据:

select * from test;

image.png

三,脱机备份还原实战

数据库在关闭后产生的备份。支持对异常关闭的数据库进行脱机库备份。备份异常关闭的数据库,要求配置了本地归档,如果本地归档不完整,则需要先修复本地归档,再进行备份。
例:
1.在数据文件目录data/DAMENG下配置dmarch.ini

[ARCHIVE_LOCAL1]
ARCH_TYPE= LOCAL    #归档类型 LOCAL/REALTIME
ARCH_DEST= /dm8/data/DAMENG/arch    #归档目标路径
ARCH_FILE_SIZE= 32    #归档文件大小,单位
ARCH_SPACE_LIMIT = 1024     #单位Mb,0表示无限制,范围1024~2147483647M

2.打开dm.ini中归档开关:ARCH_INI=1

vim /dm8/data/DAMENG/dm.ini

重启数据库服务器

./DmServiceRAC1 stop
./DmServiceRAC1 start

3.启动DMAP服务
启动DMAP服务的操作系统用户,必须和启动DM服务的操作系统用户保持一致,否则报错

cd /dm8/bin
./DmAPService start

4.启动数据库,登录disql,并建表,插入数据

./disql SYSDBA/SYSDBA@192.168.92.201
create table test(id int);
insert into test values(3);
commit;
select * from test;

image.png
5.停止数据库服务

./DmServiceRAC1 stop

6.启动DMAP服务

./DmAPService start

7.执行脱机完全备份数据库

./dmrman
BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' FULL BACKUPSET 	'/dm8/data/bak/db_full_bak1';

image.png

8.启动数据库服务,登录disql,并删除表

./disql SYSDBA/SYSDBA@192.168.92.201
drop table test;

image.png
9.停止数据库服务

./DmServiceRAC1 stop

10.脱机还原,要确保dmap服务在运行

./dmrman
RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/bak/db_full_bak1';
RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/FULL_BACK';

image.png
11.使备份集恢复

RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/bak/db_full_bak1';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/FULL_BACK';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

image.png
12.启动数据库服务,查询表

./disql SYSDBA/SYSDBA@192.168.92.201
select * from test;

image.png

四,定时备份作业配置

备份的主要目的是数据容灾,保证数据的安全性,在数据库发生故障时,通过还原备份集,将数据恢复到可用状态,所有在安装达梦数据库后设置一个定时备份数据库的作业。
例:
1.初始化作业环境

SP_INIT_JOB_SYS(1);
SP_CREATE_SYSTEM_PACKAGES(1);

2.全量备份定时任务(每个星期天早上1:00 全库备份)

call SP_CREATE_JOB('bakfull',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakfull');
call SP_JOB_SET_EP_SEQNO('bakfull', 0);
call SP_ADD_JOB_STEP('bakfull', 'bak1', 6, '00000000/dm8/data/BAK', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakfull', 'std1', 1, 2, 1, 1, 0, '01:00:00', NULL, '2022-09-13 16:38:10', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakfull');

3.增量备份定时任务(每周星期一到星期六,每天早上1:00增量备份,增量备份失败后会全量备份)

call SP_CREATE_JOB('bakincr',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakincr');
call SP_ADD_JOB_STEP('bakincr', 'bak2', 6, '10000000/dm8/data/BAK|/dm8/data/BAK', 1, 3, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP('bakincr', 'bak3', 6, '00000000/dm8/data/BAK', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakincr', 'std2', 1, 2, 1, 126, 0, '01:00:00', NULL, '2022-10-31 21:17:20', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakincr');

4.备份定期删除(每天早上00:30点删除15天以前的备份)

call SP_CREATE_JOB('delbak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('delbak');
call SP_JOB_SET_EP_SEQNO('delbak', 0);
call SP_ADD_JOB_STEP('delbak', 'bak1', 0, 'call 	SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dm8/data/BAK'');call SP_DB_BAKSET_REMOVE_BATCH(''DISK'', NOW()-15);', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('delbak', 'del01', 1, 1, 1, 0, 0, '00:30:00', NULL, '2022-09-13 17:10:28', NULL, '');
call SP_JOB_CONFIG_COMMIT('delbak');
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服