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;
联机备份:数据库是启动状态
联机备份:可能存在一些处于活动状态的事务正在执行,为确保备份数据的一致性只能在配置本地归档、并开启本地归档的数据库上执行联机备份
联机备份准备:
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.建表,并插入数据
create table test(id int);
insert into test values(1);
commit;
1.2.在disql中执行联机完全备份数据库
backup database full to "backup" backupset '/dm8/data/backup';
select * from v$backupset; --查看备份集基本信息
1.3删除表
drop table test;
1.4.停止数据库服务器,启动dmrman工具,执行脱机还原
cd /dm8/bin
./dmrman
基于备份集将数据库还原到备份时刻
RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup';
1.5.恢复数据库
基于归档将数据库完全恢复到最新状态
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup';
更新数据库魔术:每次库级备份或还原后都要更新数据库魔数。
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
1.6.启动数据库服务,查询表
select * from test;
drop table test;
差异增量备份的基备份既可以是一个完全备份集,也可以是一个增量备份集。
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';
2.1.3继续向表插入数据
insert into test values(2);
insert into test values(3);
commit;
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';
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';
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;
2.1.8启动数据库服务,查询表
./disql SYSDBA/SYSDBA@192.168.92.201
select * from test;
累积增量备份的基备份只能是完全备份集,而不能是增量备份集。
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;
2.2.2执行联机完全备份数据库
backup database full to "backup" backupset '/dm8/data/bak/db_full_bak_01';
2.2.3继续向表插入数据
insert into test values(2);
insert into test values(3);
commit;
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';
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';
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;
2.2.8启动数据库服务,查询表
./disql SYSDBA/SYSDBA@192.168.92.201
select * from test;
DM仅支持表空间联机备份
3.1创建表空间
create tablespace "TS1" datafile '/dm8/data/DAMENG/TS1.dbf' size 128;
3.2创建表,并指定表的存储空间为TS1
create table test(c1 int) storage(on "TS1");
insert into test values(1);
commit;
3.3备份表空间
backup tablespace "TS1" full to "ts_bak_01" backupset '/dm8/data/bak/ts_bak_01' device type disk;
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';
3.6恢复数据库
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' TABLESPACE TS1;
3.7查询表test
select * from test;
4.1建表,并插入数据
create table test(id int);
insert into test values(1);
commit;
4.2备份表
backup table "SYSDBA"."TEST" to "test_bak" backupset '/dm8/data/bak/test_bak';
4.3删除表
drop table test;
4.4执行表结构还原
RESTORE TABLE test STRUCT FROM BACKUPSET '/dm8/data/bak/test_bak';
4.5执行表数据还原
表还原是联机完全备份还原,因此还原后不需要恢复。
RESTORE TABLE "SYSDBA"."TEST" FROM BACKUPSET '/dm8/data/bak/test_bak';
4.6查询表
select * from test;
5.1联机执行数据归档日志备份
backup archive log all to "arch_01" backupset '/dm8/data/bak/arch_01';
5.2停止数据库服务,启动dmrman工具,脱机执行归档还原
RESTORE ARCHIVE LOG FROM BACKUPSET '/dm8/data/bak/arch_01' to database '/dm8/data/DAMENG/dm.ini' OVERWRITE 3;
恢复数据库到指定时间点/LSN是从归档恢复的一种方式,也称为不完全恢复
通过:
RECOVER DATABASE…UNTIL TIME命令恢复到指定的时间
例:
6.1建表,并插入数据
create table test(id int);
insert into test values(1);
commit;
6.2进行联机完全备份
backup database full to "db_full" backupset '/dm8/data/db_full';
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
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
6.5停止数据库服务,使用dmrman工具还原数据库:
RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/db_full';
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;
6.7重启数据库,查询test数据:
select * from test;
数据库在关闭后产生的备份。支持对异常关闭的数据库进行脱机库备份。备份异常关闭的数据库,要求配置了本地归档,如果本地归档不完整,则需要先修复本地归档,再进行备份。
例:
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;
5.停止数据库服务
./DmServiceRAC1 stop
6.启动DMAP服务
./DmAPService start
7.执行脱机完全备份数据库
./dmrman
BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' FULL BACKUPSET '/dm8/data/bak/db_full_bak1';
8.启动数据库服务,登录disql,并删除表
./disql SYSDBA/SYSDBA@192.168.92.201
drop table test;
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';
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;
12.启动数据库服务,查询表
./disql SYSDBA/SYSDBA@192.168.92.201
select * from test;
备份的主要目的是数据容灾,保证数据的安全性,在数据库发生故障时,通过还原备份集,将数据恢复到可用状态,所有在安装达梦数据库后设置一个定时备份数据库的作业。
例:
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');
文章
阅读量
获赞