DBA容灾与备份恢复:闪回应用及实践(一)

发布时间 2023-09-26 08:48:45作者: 三生有幸格格

闪回应用及实践
第一天:
以时间戳方式恢复被勿更新数据:
1.查看UNDO的空间是否充足
2.询问操作发生时间23:48:48,经确认这个表中数据变化很小。如果能把这个时间点前的表中数据恢复出来,就能把问题的影响降到最低。
先尝试使用闪回查询来做,依赖一些缓存空间和系统的负载,在反复确认时间后,写了如下的语句:
create table tmp_xxxxx as select * from owner_account.xxxxx as of timestamp to_timestamp('20140723234845','yyyymmddHH24misss');
总结:1.在脚本提交之前,如果是DML语句,最好能够评估修改的影响范围。
2.如果脚本比较大,有性能方面的潜在因素,尽量让DBA来把关。
3.充分的测试也很重要,保证数据的安全和高可用性是很有必要的。


第二天:
使用FlashbackQuery巧妙抽取指定数据
定义:FlashbackQuery是ORACLE数据库的一项特性,它允许从回滚段中读取表在一定时间内操作过的数据,实现数据比对或者修正由于意外提交造成的错误数据。(简单的说是以时间戳的方式从指定表内抽取,若存在多个表的映射依赖关系,以映射id等条件抽取)
比如有customer和subscriber两张表的映射id是customer_id分别抽取语句如下:
select * from customer as of timestamp xxxxx where customer_id=100;
select * from subscriber as of timestamp xxxxx where customer_id=100;
xxxxx代表抽取的时间戳。
将抽取的数据保存,生成dump文件,使用exp/expdp导出dump。
create table customer nologging as select * from customer as of timestamp xxxxx where customer_id=100;
create table subscriber nologging as select * from subscriber as of timestamp xxxxx where customer_id=100;

使用exp导出dump文件:
exp username/password@service_name file=dump_file.dmp log=dump_log.log feedback=10000 buffer=104857600 statistics=none owner=schema_name
其中,username和password是连接到数据库的用户名和密码;service_name是数据库服务名称;dump_file.dmp是要生成的dump文件名;dump_log.log是日志文件名;feedback指定每处理多少行给出一次反馈;buffer指定缓冲区大小;statistics指定是否收集统计信息;owner指定要导出的模式名称。

使用expdp导出dump文件:expdp username/password@service_name DIRECTORY=dir_name DUMPFILE=dump_file.dmp LOGFILE=dump_log.log FEEDBACK=10000 BUFFER=104857600 STATISTICS=NONE SCHEMAS=schema_name
其中,username和password是连接到数据库的用户名和密码;service_name是数据库服务名称;dir_name是目录对象名称,用于指定导出文件的存储位置;dump_file.dmp是要生成的dump文件名;dump_log.log是日志文件名;feedback指定每处理多少行给出一次反馈;buffer指定缓冲区大小;statistics指定是否收集统计信息;schemas指定要导出的模式名称。

请注意,上述示例中的参数值需要根据实际情况进行替换,如用户名、密码、服务名称、文件名等。另外,导出dump文件可能需要相应的权限和准备工作,请确保在导出之前进行相应的设置和备份。

摘自:杨建荣《OracleDBA工作笔记:运维、数据迁移与性能调优》