问题背景
客户在2023-06-26 20:54:13误truncate了一张业务表,需要要紧急恢复,达梦不建议使用闪回查询恢复,只能考虑恢复整库,再将删除表数据导入到生产库相应表,可以使用dts迁移数据,可以通过逻辑导出导入表数据。
恢复方案
1,检查误删数据库的全库备份、增量备份、归档文件,是否连续完整?
2,在测试环境新建一个数据库实例。
3,传输完整的全库和增量备份到测试库,传输能连接备份数据的归档文件至目标端。
4,恢复数据库数据
5,导出导入误删数据
6,规划数据库路径:
全备和增量备份目录: /bak/dmbak/oabak
归档文件目录: /bak/dmbak/archbak
新建数据库实例数据数据目录:/data/dmdata/OABAK/dm.ini
数据库恢复
初始化测试实例
/home/dmdbms/bin/dminit PATH=/bak/dmbak/dmdata/ PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 CHARSET=1 CASE_SENSITIVE=Y DB_NAME=BAK1 INSTANCE_NAME=BAK1 PORT_NUM=5238
服务注册 ,使用root用户
/home/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /bak/dmbak/dmdata/BAK1/dm.ini -p OABAK1
远程拷贝数据
scp拷贝 全备、增备、归档
恢复数据,恢复时间点:2023-06-26 20:54:12
'DB_DMDB_INCREMENT_2023_06_26_00_30_26' 为最后一份增量备份的目录名
cd /home/dmdbms/bin/
./dmrmanRESTORE DATABASE '/bak/dmbak/dmdata/BAK1/dm.ini' from backupset '/bak/dmbak/oabak/DB_DMDB_INCREMENT_2023_06_26_00_30_26' task thread 32
RECOVER DATABASE '/bak/dmbak/dmdata/BAK1/dm.ini' with archivedir '/bak/dmbak/archbak' until time '2023-06-26 20:54:12'
RECOVER DATABASE '/bak/dmbak/dmdata/BAK1/dm.ini' update db_magic
启动数据库实例
cd /home/dmdbms/bin/
./DmServiceBAK1 start./disql sysdba/SYSDBA
--将主备库强制open
sql> sp_set_para_value(1,’ALTER_MODE_STATUS’,1);
sql> alter database normal;
sql> alter database open force;
sql> select checkpoint(100);
测试库导出数据,导出问题表
./dexp userid=SYSDBA/SYSDBA:5236 FILE=/bak/dmbak/oabak/xxxxx_06262212.dmp LOG=/bak/dmbak/oabak/xxxxx_06262212.log TABLES=xxx.xxxxx TABLE_PARALLEL=4
导入之前停止应用,将误删后产生的数据备份,然后清空表导入数据,导入完成后将备份数据插入到表中。
导入数据
./dimp userid=SYSDBA/SYSDBA@192.168.xxx.xx:5236 FILE=/bak/dmbak/oabak/xxxxx_06262212.dmp LOG=/bak/dmbak/oabak/IMP_xxxxx_06262212.log TABLES=xxx.xxxxx TABLE_PARALLEL=8 TABLE_EXISTS_ACTION=append
收集问题表的统计信息
DBMS_STATS.GATHER_TABLE_STATS('xxx','xxxxxxx',NULL,100,TRUE,'FOR ALL COLUMNS SIZE AUTO',2);
应用验证数据
应用方验证数据是否准确
全库备份
归档保留空间太小20G,大量导入数据后,历史归档文件被删除,立即做个全量备份
backup database FULL backupset '/bak/dmbak/full/DB_DMDB_FULL_2023_06_26_00_51' task thread 32 parallel 8;
总结思考
1.生产环境做任务数据删除之前,一定要先做数据的备份。
2.数据库一定要定期做数据库的全量备份,归档日志的备份,有备份才能恢复数据。
3.一定要确保归档空间足够,日志保留时间充足,避免因空间不够,或归档保留期限到期,归档被删除,导致归档文件确实不连续,无法恢复数据。
达梦技术社区:https://eco.dameng.com