客户现场误操作导致某张表数据内容有误,希望将该表数据内容恢复至前一天,有定时备份作业每天晚上全量备份。
初始化一个新实例,需与生产所用实例端口号不同,将前一日物理备份文件在新实例进行恢复,连接新实例将需要恢复的表进行逻辑导出,将导出的dmp文件在生产实例进行恢复。
1、查看备份情况及实例运行情况;
2、进入数据库bin目录下初始化新实例
cd /opt/dmdbms/bin/bin
./dminit PATH=/data/dm20240223 PORT_NUM=5238
3、正确启停一遍新实例,验证是否可以正确启动。
./dmserver /data/dm20240223/DAMENG/dm.ini
4、出现SYSTEM IS READY后输入exit正常退出
5、使用物理备份文件在新实例进行恢复
./dmrman CTLSTMT="RESTORE DATABASE '/data/dm20240223/DAMENG/dm.ini' FROM BACKUPSET '/data/dm8/DAMENG/baK/DB_DAMENG_FULL_2024_02_22_01_00_31'"
./dmrman CTLSTMT="RECOVER DATABASE '/data/dm20240223/DAMENG/dm.ini' FROM BACKUPSET '/data/dm8/DAMENG/baK/DB_DAMENG_FULL_2024_02_22_01_00_31'"
./dmrman CTLSTMT="RECOVER DATABASE '/data/dm20240223/DAMENG/dm.ini' UPDATE DB_MAGIC"
6、重新启动新实例
./dmserver /data/dm20240223/DAMENG/dm.ini
7、应用验证需要恢复的表数据内容是否和想恢复的内容一致,应用验证通过后,可以查询一下这张表的数据行数,等在生产恢复完以后验证行数是否一致,重新打开一个命令行窗口,启动新实例的窗口不能关闭。
./disql 用户名/密码@127.0.0.1:5238
SELECT COUNT(*)FROM BAS_PERSON;
exit;
8、使用dexp将该表数据导出。
./dexp USERID=CHECK_SZZB_V3/密码@127.0.0.1:5238 FILE=BAS_PERSON.dmp LOG=BAS_PERSON.log TABLES=BAS_PERSON DIRECTORY=/data
9、登录生产实例,先将需要恢复的表改名。
./disql 用户名/密码@127.0.0.1:5236
alter table BAS_PERSON rename to BAS_PERSON_bak;
exit;
10、使用dimp在生产实例进行导入。
./dimp USERID=CHECK_SZZB_V3/密码 FILE=/data/BAS_PERSON.dmp LOG=BAS_PERSON_IMP.log TABLES=BAS_PERSON DIRECTORY=/data
11、再次登录生产实例,查询该表数据行数与前面查询的结果是否一致。
./disql 用户名/密码@127.0.0.1:5236
SELECT COUNT(*)FROM BAS_PERSON;
exit;
12、表数据内容验证无误后将新初始化的实例输入exit关闭,然后将新实例目录删除,释放磁盘空间。
文章
阅读量
获赞