暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DM8的备份还原实战

得一阳阳 2025-01-16
87

冷备

冷备的关键是数据库必须处于关闭状态

然后利用dmrman工具进行备份

./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dmdata/dmbak/BACKUP_FILE'"
复制


执行脱机数据库的还原和恢复

./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE'"

./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE'"

./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
复制


热备

热备就是数据库运行过程中执行备份,其关键是数据库必须开启归档。

查看数据库是否开启归档模式:

SQL> select name,arch_mode from v$database;


行号 name arch_mode

---------- ------ ---------

1 DAMENG Y

已用时间: 314.391(毫秒). 执行号:601.
复制


命令行开归档:

Alter database mount;

alter database archivelog;

alter database add archivelog 'DEST=/dmdata/arch, TYPE=LOCAL, FILE_SIZE=64, SPACE_LIMIT=0, ARCH_FLUSH_BUF_SIZE=0';

Alter database open;
复制


查看归档信息:

SQL> select * from v$arch_status;


行号 ARCH_TYPE ARCH_DEST ARCH_STATUS ARCH_SRC

---------- --------- ------------ ----------- --------

1 REALTIME DM2 VALID DM1

2 LOCAL /dmdata/arch VALID DM1


已用时间: 34.193(毫秒). 执行号:602.
复制


热备,可以进行全库热备,增量热备,表空间备份,单表备份。

全库备份:

SQL> backup database full backupset '/dmdata/dmbak/full1';

操作已执行

已用时间: 00:00:34.720. 执行号:603.
复制


增量备份(其需要指定基于哪个全备进行增量备份):

SQL> BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dmdata/dmbak/full1' BACKUPSET '/dmdata/dmbak/db_increment_bak_02';

操作已执行

已用时间: 00:00:17.434. 执行号:701.
复制


表空间备份(比如备份main表空间):

SQL> backup tablespace main full backupset '/dmdata/dmbak/main_bak';

操作已执行

已用时间: 00:00:17.532. 执行号:702.
复制


单表备份(比如备份test.t1):

SQL> backup table test.t1 backupset '/dmdata/dmbak/t1';

操作已执行

已用时间: 00:00:01.080. 执行号:805.
复制


归档备份

BACKUP ARCHIVE LOG ALL BACKUPSET '/dmdata/dmbak/arch_bak_01';
复制


备份校验

还原前要进行备份文件的校验。

-- 校验备份,校验待还原备份集的合法性。disql登录进入数据库进行校验。或者使用dmramn进行校验


SELECT SF_BAKSET_CHECK('DISK','/dmdata/dmbak/full1');


行号 SF_BAKSET_CHECK('DISK','/dmdata/dmbak/full1')

---------- ---------------------------------------------

1 1

已用时间: 00:00:11.781. 执行号:807.
复制

或者使用dmrman工具检验

RMAN> CHECK BACKUPSET '/dmdata/dmbak/full1';

CHECK BACKUPSET '/dmdata/dmbak/full1';

[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]

check backupset successfully.

time used: 00:00:01.054
复制


还原恢复

数据库还原分为三步,第一步是使用 RESTORE 命令指定库级备份集进行还原,第二步是恢复使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。第三步更新数据库的 DB_MAGIC与数据库恢复一样使用 RECOVER 命令完成。

注:还原恢复需要关闭数据库

使用:dmrman工具(除了表还原外)

-- 使用正常退出数据库的备份集进行还原恢复,也就是使用基于备份集的恢复工作。

RMAN> restore database '/dmdata/data/DAMENG/dm.ini' from backupset '/dmdata/dmbak/full1';

RMAN> RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' from backupset '/dmdata/dmbak/full1';

RMAN> RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
复制


-- 存在备份集full1,数据库运行过程中故障,利用备份集+归档恢复到故障前的状态。

RMAN> restore database '/dmdata/data/DAMENG/dm.ini' from backupset '/dmdata/dmbak/full1';

RMAN> RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dmdata/arch';

RMAN> RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
复制


-- 增量合并,一般生产上都会周期执行完全备份或者增量备份,,来确保当数据库意外损坏时,可以通过指定完全备份集或增量备份集执行还原恢复操作,以修复丢失的数据。

RMAN> restore database '/dmdata/data/DAMENG/dm.ini' from backupset '/dmdata/dmbak/full1';

RMAN> MERGE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_increment_bak_02'

RMAN> RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dmdata/arch';

RMAN> RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
复制


-- 单表还原:有几个强制性条件必须符合,1是数据库开启可用状态,2是表必须存在,3是需要清空表数据

SQL>RESTORE TABLE TEST.t1 '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/t2';
复制


-- 表空间还原 ,进行脱机还原

RMAN> RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dmdata/dmbak/main_bak';

RMAN> RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' TABLESPACE MAIN;
复制


自动备份作业

--创建代理环境

call SP_INIT_JOB_SYS(1);
复制


--每周日两点全备,全备成功后,删除一个月前的备份文件。

call SP_CREATE_JOB('full_dele',1,0,'',0,0,'',0,'全备成功后,再删除过期备份文件');

call SP_JOB_CONFIG_START('full_dele');

call SP_ADD_JOB_STEP('full_dele', 'fullbak', 6, '00000000/dmdata/dmbak', 3, 1, 0, 0, NULL, 0);

call SP_ADD_JOB_STEP('full_dele', 'delebak', 0, 'CALL SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dmdata/dmbak'');

CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',sysdate-7);', 1, 1, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('full_dele', 'full_sche', 1, 2, 1, 1, 0, '02:00:00', NULL, '2022-11-24 22:00:00', NULL, '');

call SP_JOB_CONFIG_COMMIT('full_dele');
复制


--每天两点(除了周日)增备,增备失败后做一次全备

call SP_CREATE_JOB('increbak',1,0,'',0,0,'',0,'增备失败后,全备一次');

call SP_JOB_CONFIG_START('increbak');

call SP_ADD_JOB_STEP('increbak', 'incre_bak', 6, '10000000/dmdata/dmbak|/dmdata/dmbak', 1, 3, 0, 0, NULL, 0);

call SP_ADD_JOB_STEP('increbak', 'in_fullbak', 6, '00000000/dmdata/dmbak', 1, 1, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('increbak', 'incr_sche', 1, 2, 1, 126, 0, '02:00:00', NULL, '2022-11-24 22:00:00', NULL, '');

call SP_JOB_CONFIG_COMMIT('increbak');
复制


逻辑备份

-- 整库导出

./dexp SYSDBA/SYSDBA DIRECTORY=/dmdata/dmbak FILE=full.dmp FULL=Y LOG=full.log


-- 用户级别导出

./dexp SYSDBA/SYSDBA DIRECTORY=/dmdata/dmbak FILE=test.dmp OWNER=TEST LOG=test.log


-- 模式级别导出

./dexp SYSDBA/SYSDBA DIRECTORY=/dmdata/dmbak FILE=TEST.dmp SCHEMAS=TEST,TANG LOG=TT.log


-- 表级别导出

./dexp SYSDBA/SYSDBA DIRECTORY=/dmdata/dmbak FILE=tables.dmp TABLES=TEST.t1,TEST.t2,TEST.t3 LOG=tables.log
复制


逻辑还原

-- 将 TEST 模式下的数据库对象导入到TEST1

./dimp sysdba/SYSDBA file=TEST.dmp directory=/dmdata/dmbak log=imp_test.log remap_schema=TEST:TEST1
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论