备份本质是从数据库文件中拷贝有效数据页保存到备份集中。
还原是备份的逆过程,分为数据还原和数据恢复。数据还原是将备份集中的有效数据页重新写入目标数据文件的过程,数据恢复是指通过重做归档日志,将数据库状态恢复到备份结束时的状态。
注:备份期间数据库可能还在运行(联机备份),数据页不一定完全一致。还原只是“搬回”了数据页,还需要重做归档日志“补齐”备份期间发生的变更,才能达到一致状态。
备份的主要目的是数据容灾,保证数据的安全性,在数据库发生故障时,通过还原备份集,将数据恢复到可用状态。
联机方式支持数据库、用户表空间、用户表和归档的备份以及用户表的还原,并且进行联机库备份、表空间备份和归档备份时,必须配置归档,启动DmAPService。
联机方式下仅支持表还原,数据库、表空间等还原见脱机。
联机备份的基石是归档模式。开启归档有两种方式:
-- 1. 将数据库切换至MOUNT状态
ALTER DATABASE MOUNT;
-- 2. 开启归档模式
ALTER DATABASE ARCHIVELOG;
-- 3. 添加本地归档配置(路径根据实际环境修改)
ALTER DATABASE ADD ARCHIVELOG 'DEST = /dm8/arch, TYPE = LOCAL, FILE_SIZE = 1024, SPACE_LIMIT = 2048';
-- 4. 切回OPEN状态
ALTER DATABASE OPEN;
注意:归档路径必须与数据文件存放在不同的物理磁盘上,避免介质故障时归档和业务数据同时损坏。
dm.ini中设置 ARCH_INI = 1dmarch.ini文件:[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
查询是否成功开启归档:
SELECT ARCH_MODE FROM V$DATABASE;
数据库备份是最完整的备份方式,备份整个数据库的所有数据。
-- 最简单的全量备份
BACKUP DATABASE FULL BACKUPSET '/dm/backup/db_full_bak';
-- 带压缩和并行的全量备份
BACKUP DATABASE FULL BACKUPSET '/dm/backup/db_full_bak' COMPRESSED 4 PARALLEL 8;
FULL关键字表示完全备份,不指定时默认也是全量备份。COMPRESSED后面跟压缩级别(0-9),PARALLEL指定并行数。
-- 增量备份(使用WITH BACKUPDIR指定基备份搜索目录)
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dm/backup' BACKUPSET '/dm/backup/incr/incrbak_01';
表空间备份仅备份指定表空间的数据,恢复粒度比数据库级更精细。
-- 备份MAIN表空间
BACKUP TABLESPACE MAIN FULL BACKUPSET '/dm/backup/ts_full_bak_01';
-- 表空间增量备份
BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/dm/backup' BACKUPSET '/dm/backup/ts_increment_bak_02';
-- 备份指定表
BACKUP TABLE 模式名.表名 BACKUPSET '/dm/backup/tab_bak_01';
-- 还原指定表
RESTORE TABLE 模式名.表名 FROM BACKUPSET '/dm/backup/tab_bak_01';
归档备份是对数据库产生的归档日志文件进行备份,用于实现时间点恢复(PITR)。
-- 备份所有归档日志
BACKUP ARCHIVE LOG ALL TO ARCHBAK BACKUPSET '/dm/backup/archbak';
数据库必须完全关闭,无需配置归档。
-- 全量备份
BACKUP DATABASE '/data/DM/dmdata/DAMENG/dm.ini' FULL BACKUPSET '/dm/backup/db_full_bak_01';
-- 差异增量备份
BACKUP DATABASE '/data/DM/dmdata/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/dm/backup' BACKUPSET '/dm/backup/db_increment_bak_02';
--还原与恢复(以全量备份为例,其余备份方式替换文件名即可)
-- 1. 还原
RESTORE DATABASE '/data/DM/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/db_full_bak_01';
-- 2. 恢复(应用归档日志,脱机备份可省略该步骤)
RECOVER DATABASE '/data/DM/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/db_full_bak_01';
-- 3. 更新DB_MAGIC
RECOVER DATABASE '/data/DM/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC;
表空间仅支持联机备份,以下为脱机还原方法。
-- 还原表空间(数据库实例打开,表空间脱机)
ALTER TABLESPACE 表空间名 OFFLINE;
RESTORE TABLESPACE MAIN FROM BACKUPSET '/dm/backup/ts_offline_full_bak';
ALTER TABLESPACE 表空间名 ONLINE;
BACKUP ARCHIVE LOG ALL BACKUPSET '/dm/backup/arch_offline_bak';
RESTORE ARCHIVE LOG FROM BACKUPSET '/dm/backup/arch_offline_bak' TO ARCHIVEDIR '/dm/restore_arch';
以下为表备份还原的简单示例
右键“表备份”,点击“新建备份”,可打开对话框,配置备份的参数信息,配置完成后点击确定
可看到刚才新建的备份
右键它,点击“备份校验”,可以检验备份是否合法
右键它,点击“备份还原”,可配置还原相关的参数信息
--备份位置是/dmbak,根据实际情况修改脚本路径
sp_init_job_sys(1);
--全备:周六23点,备份保留30天,删除过期备份
call SP_CREATE_JOB('DM_FULL_DEL_BAK',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('DM_FULL_DEL_BAK');
call SP_ADD_JOB_STEP('DM_FULL_DEL_BAK', 'FULL_BAK', 6, '01000000/dmbak', 3, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP('DM_FULL_DEL_BAK', 'DEL_BAK', 0, 'SF_BAKSET_BACKUP_DIR_ADD('DISK','/dmbak');
call SP_DB_BAKSET_REMOVE_BATCH('DISK',SYSDATE-30);', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('DM_FULL_DEL_BAK', 'FULL2', 1, 2, 1, 64, 0, '23:00:00', NULL, '2024-01-01 00:00:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('DM_FULL_DEL_BAK');
--增备:周日-周五 23点
call SP_CREATE_JOB('DM_INC_BAK',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('DM_INC_BAK');
call SP_ADD_JOB_STEP('DM_INC_BAK', 'INC1', 6, '11000000/dmbak|/dmbak', 1, 3, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP('DM_INC_BAK', 'FULL1', 6, '01000000/dmbak', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('DM_INC_BAK', 'INC2', 1, 2, 1, 63, 0, '23:00:00', NULL, '2024-01-01 00:00:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('DM_INC_BAK');
右键创建代理
右键新建作业
添加作业步骤
选择步骤类型备份数据库,备份方式为完全备份
还可以设置作业步骤完成时的操作
再添加一个作业步骤
步骤类型选择SQL脚本,编写SQL
添加作业调度
再添加一个作业
添加作业步骤
步骤类型为备份数据库,备份方式为差异增量备份
添加作业调度
文章
阅读量
获赞
