一、 备份知识介绍
1.1、备份的意义
数据库备份是 DBA 日常最重要的工作内容。
备份的主要目的是数据容灾,保证数据的安全性,在数据库发生故障时,通过还原备份集,将数据恢复到可用状态。
1.2、备份的分类方式
逻辑备份和物理备份
联机备份和脱机备份
数据备份和归档日志备份
一致性备份和非一致性备份
完全备份和增量备份
1.3、逻辑备份
工具:dexp/dimp (类似oracle的exp/imp)
逻辑备份是指利用dexp导出工具,将指定对象(库、模式、表)的数据导出到文件的备份方式。
逻辑备份针对的是数据内容,并不关心这些数据物理存储在什么位置。
1.4、物理备份
物理备份是直接扫描数据库文件,找出那些已经分配、使用的数据页,拷贝并保存到备份集中。
物理备份过程中,不关心数据的具体内容是什么,也不关心数据也属于哪一张表。
1.5、冷热备份
联机备份 又称为热备。数据库是open,DB可对外提供读写服务的。
脱机备份 又称为冷备。数据库是shutdown,外部无法访问DB。
1.6、DM备份工具
disql
manager
dmrman
console
详情请参考官方文档 《DM8 backup and recovery》
二、开启数据库归档模式
联机备份数据库的前提条件。也建议生产库必须开启归档模式。
2.1 方式1、manager工具开启归档
2.2 方式2 、使用命令行方式开启归档模式
--修改数据库为 MOUNT 状态
ALTER DATABASE MOUNT;
--配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = dmdata/arch, TYPE = local,FILE_SIZE = 1024,SPACE_LIMIT =102400,ARCH_FLUSH_BUF_SIZE=16,HANG_FLAG=1';
--开启归档模式
ALTER DATABASE ARCHIVELOG;
--修改数据库为 OPEN 状态
ALTER DATABASE OPEN;
2.3 方式3、编辑dmarch.ini和dm.ini文件开启归档
1)手动编辑 dmarch.ini 文件,之后保存在 dm.ini 所在的目录
2)编辑 dm.ini 文件,设置参数 ARCH_INI=1,保存;
3)启动数据库实例, 数据库已运行于归档模式。
2.4、验证 归档模式
三、备份实验
3.1 使用manager工具进行数据库备份
3.2 使用disql命令行方式备份数据库
backup database full to "DB_amber_FULL_2022_08_22_11_32_53" backupset 'DB_amber_FULL_2022_08_22_11_32_53' device type disk backupinfo 'db_full_bak' compressed level 2 parallel 2;
3.3 使用manager配置归档日志备份
3.4 使用disql命令行备份归档日志
backup archivelog all to "ARCH_2022_08_22_11_35_29" backupset 'ARCH_2022_08_22_11_35_29' backupinfo 'arch_backup' parallel 2;
3.5 使用manager配置增量备份
3.6 使用disql配置增量备份
backup database increment with backupdir '/dmdata/backup' to "DB_amber_INCRE_2022_08_22_12_26_47" backupset 'DB_amber_INCRE_2022_08_22_12_26_47' backupinfo 'db_incr_backup' parallel 2;
3.7 manager查看备份文件
四、数据库恢复
4.1 先关闭数据库
我这里比较暴力,直接kill。
建议大家使用服务命令来停库 ./DmServiceDMSERVER stop
4.2 使用console工具来恢复数据库
先恢复完整备份,再恢复增量备份
4.3 还原数据库/归档
4.4. 更新magic
经过以上步骤,恢复已经完成。
五、起库验证
六、恢复操作的后台日志信息
[INFO] drman_execute_sql:CONFIGURE DEFAULT TRACE LEVEL 1;
Show BACKUPSETS WITH BACKUPDIR '/dmdata/backup' to '/dm8/tool/backupset_result_1661145590896.xml' FORMAT XML ;
2022-08-22 13:19:50 [com.dameng.console.service.BackupRestoreService]
[INFO] use_ap:1; ap_port:-1
Show BACKUPSETS WITH BACKUPDIR '/dmdata/backup' to '/dm8/tool/backupset_result_1661145590896.xml' FORMAT XML;
2022-08-22 13:23:22 [com.dameng.console.service.BackupRestoreService]
[INFO] drman_execute_sql:CONFIGURE DEFAULT TRACE LEVEL 1;
RESTORE DATABASE '/dmdata/amber/dm.ini' OVERWRITE FROM BACKUPSET '/dmdata/backup/DB_amber_FULL_2022_08_22_12_24_33' DEVICE TYPE disk;
2022-08-22 13:23:22 [com.dameng.console.service.BackupRestoreService]
[INFO] use_ap:1; ap_port:-1
RESTORE DATABASE '/dmdata/amber/dm.ini' OVERWRITE FROM BACKUPSET '/dmdata/backup/DB_amber_FULL_2022_08_22_12_24_33' DEVICE TYPE disk;
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:04][Remaining:00:00:00]
2022-08-22 13:24:32 [com.dameng.console.service.BackupRestoreService]
[INFO] drman_execute_sql:CONFIGURE DEFAULT TRACE LEVEL 1;
RECOVER DATABASE '/dmdata/amber/dm.ini' FORCE FROM BACKUPSET '/dmdata/backup/DB_amber_FULL_2022_08_22_12_24_33' DEVICE TYPE disk;
2022-08-22 13:24:32 [com.dameng.console.service.BackupRestoreService]
[INFO] use_ap:1; ap_port:-1
RECOVER DATABASE '/dmdata/amber/dm.ini' FORCE FROM BACKUPSET '/dmdata/backup/DB_amber_FULL_2022_08_22_12_24_33' DEVICE TYPE disk;
[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]
2022-08-22 13:25:23 [com.dameng.console.service.BackupRestoreService]
[INFO] drman_execute_sql:CONFIGURE DEFAULT TRACE LEVEL 1;
RECOVER DATABASE '/dmdata/amber/dm.ini' UPDATE DB_MAGIC ;
2022-08-22 13:25:23 [com.dameng.console.service.BackupRestoreService]
[INFO] use_ap:1; ap_port:-1
RECOVER DATABASE '/dmdata/amber/dm.ini' UPDATE DB_MAGIC;
2022-08-22 13:26:58 [com.dameng.console.service.BackupRestoreService]
[INFO] drman_execute_sql:CONFIGURE DEFAULT TRACE LEVEL 1;
Show BACKUPSETS WITH BACKUPDIR '/dmdata/backup' to '/dm8/tool/backupset_result_1661146018970.xml' FORMAT XML ;
2022-08-22 13:26:58 [com.dameng.console.service.BackupRestoreService]
[INFO] use_ap:1; ap_port:-1
Show BACKUPSETS WITH BACKUPDIR '/dmdata/backup' to '/dm8/tool/backupset_result_1661146018970.xml' FORMAT XML;
[dmdba@amber tool]$
七、 dmrman工具备份恢复实验
dmrman有个缺陷,数据库必须是关闭状态才可以!!!
这个跟oracle的RMAN无法相提并论了~
7.1 dmrman备份
7.2 查看备份集
show backupset '/dmdata/backup/DB_amber_FULL_20220822_134550_703551';
7.3 检验备份有效性
RMAN> CHECK BACKUPSET '/dmdata/backup/DB_amber_FULL_20220822_134550_703551';
CHECK BACKUPSET '/dmdata/backup/DB_amber_FULL_20220822_134550_703551';
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
check backupset successfully.
time used: 349.090(ms)
RMAN>
7.4 dmrman恢复数据库
RESTORE DATABASE '/dmdata/amber/dm.ini' FROM BACKUPSET '/dmdata/backup/DB_amber_FULL_20220822_134550_703551';
RECOVER DATABASE '/dmdata/amber/dm.ini' FROM BACKUPSET '/dmdata/backup/DB_amber_FULL_20220822_134550_703551';
RECOVER DATABASE '/dmdata/amber/dm.ini' WITH ARCHIVEDIR '/dmdata/backup/ARCH_LOG_20220822_134620_854319';
RECOVER DATABASE '/dmdata/amber/dm.ini' UPDATE DB_MAGIC;
八、实验过程遇到的报错
原因分析:
我用manager和disql和dmarch.in配置归档模式的时候,多次关闭已配置的本地归档之后再重新打开,会造成归档文件中部分日志缺失,备份时检查归档文件连续性时将会报错。
解决方案:
1. 备份前调用checkpoint(100)函数主动刷新检查点。
checkpoint(100)
2. 备份前修复归档
repair archivelog database '/dmdata/amber/dm.ini'
3. 备份前删除过期归档
在备份之前,从linux层面,直接rm过期归档