今天是DTCC第二天了,抽空去听了下,因为手头有一些活,听到一半只能赶回公司继续工作。
客户今天有一个需求,因为开发现在在生产环境中遇到了一些困难,需要在测试生产环境中复现问题,这样就需要从生产环境抽取出一些数据,可能数据量相对比较小,有个1G左右。需要把这些数据加载到测试生产环境中,
还是来张图更加清晰。我们需要把图中右边部分的生产环境中抽取部分数据导入到测试生产环境中,这里所说的测试生产环境是按照生产环境的结构来复制的。测试环境已经有一些测试数据,很可能和生产环境中的数据冲突。
就如同图中下面的部分列出的细节一样,很可能会存在数据冲突导致数据加载出现问题。

按照一般的情况下,我们是建议对测试生产环境做一个备份,采用expdp即可,然后清空对应schema下的数据,然后倒入需要重现问题的数据。问题复现之后,可以使用备份把数据恢复回来。
但是这种固有的思想还是存在一定的问题。
客户反馈的情况如下,说对应的schema下的数据量是相当大的,差不多2T多,如果做备份也是需要不少的空间,导出导入都是相当消耗时间和资源的。
OWNER                          SUM(BYTES)/1024/1024 
------------------------------ -------------------- 
APPO                                  2144666.63
这套环境借用的时间为3天,所以相对来说测试环境的高可用要求就没那么高了。
我们可以尝试采用flashback database来完成这种需求。
使用flashback database会有一些的顾虑和隐患,比如
闪回时间的考虑,如果考虑不周很可能达不到预期的效果。
数据库中默认是不会启用闪回数据库功能的,需要启用,完成数据恢复之后,再禁用,这些过程都是需要停库启库的,对于中间件来说就需要重新启动,需要和开发测试部分做协调,是否同意这种方式。
数据库做闪回操作之后,闪回到了数据清除前的状态,这个时候如果要打开数据库,是需要使用open resetlogs这种方式的,这样的话这个时间点之前的备份就失效了。也需要做确认,确保不会出现业务上意料之外的情况。
很快得到了回复,看来对于这种方式大家也是认可的,毕竟能够免去大量的备份和数据导入导出之苦。操作上也相对比较方便。

我们使用下面的脚本来简单模拟一下。我们创建一个表,然后启用flashback database功能,做truncate操作,然后导入一些新的数据,之后再做闪回数据库操作,闪回到truncate之前的数据情况,最后启用数据库即可。
修改闪回保留的时间,默认是1440分钟,即24小时
SQL> show parameter flashback
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target        integer     1440
我们创建了一个表,大小为2G左右,这样能够简单验证一下闪回日志的增长情况。
SQL> select segment_name,bytes from user_segments where segment_name='AA';
SEGMENT_NAME    BYTES
--------------- ----------
AA              2153775104

SQL> SELECT COUNT(*)FROM AA;
  COUNT(*)
----------
  18340352
  我们开始启用闪回数据库功能。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area  435224576 bytes
Fixed Size                  1337044 bytes
Variable Size             272632108 bytes
Database Buffers          155189248 bytes
Redo Buffers                6066176 bytes
Database mounted.
SQL> alter database flashback on;
Database altered.
SQL> 
SQL> alter database open;
Database altered.
启用之后,得到一个时间戳,一次来作为我们完成闪回的时间点。
select systimestamp from dual;
接着我们来做一个清理工作。
SQL> truncate table aa;
Table truncated.
我们尝试插入一部分
SQL> insert into aa select*from all_objects;
71642 rows created.
SQL> commit;
Commit complete.
这个数据量相比原本的2G就小了很多。
然后我们尝试使用闪回数据库功能,闪回到删除之前的状态。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down

SQL> startup mount;
ORACLE instance started.
Total System Global Area  435224576 bytes
Fixed Size                  1337044 bytes
Variable Size             272632108 bytes
Database Buffers          155189248 bytes
Redo Buffers                6066176 bytes
Database mounted.
SQL> Flashback database to timestamp to_timestamp('2015-04-17 17:42:29','yyyy-mm-dd hh24:mi:ss'); 
Flashback complete.
以只读方式打开,做验证,保证闪回没有问题。
SQL> alter database open read only;
Database altered.

SQL> conn n1/n1
Connected.
SQL> select count(*)from aa;
  COUNT(*)
----------
  18340352

数据又回来了。
查看闪回日志的大小,可以看到还是很少的。
total 16040
-rw-r----- 1 ora11g dba 8200192 Apr 17 17:43 o1_mf_bm1oc2qt_.flb
-rw-r----- 1 ora11g dba 8200192 Apr 17 17:45 o1_mf_bm1ofwb7_.flb
[ora11g@oel1 flashback]$ pwd
/u02/ora11g/flash_recovery_area/TEST11G/flashback
[ora11g@oel1 flashback]$

另外说明一下,对于闪回数据库功能,如果禁用之后,闪回日志会自动清除。

巧用flashback database实现灵活的数据切换相关推荐

  1. mysql数据库as表恢复_使用flashback database找回被误删除表空间

    我个人不怎么推荐使用flashback database功能,因为在生产库中,谁能够承受得起整个库的回退(也许特别极端的情况下可能需要使用到),今天帮网友恢复了一个案例:删除表空间,然后尝试着flas ...

  2. Oracle Flashback Database and Restore Points 说明

    一.FlashbackDatabase 和 Restore Points 说明 官网的链接如下: http://download.oracle.com/docs/cd/E18283_01/backup ...

  3. 【Flashback】Flashback Database闪回数据库功能实践

    [Flashback]Flashback Database闪回数据库功能实践 上一篇 / 下一篇  2012-04-07 21:16:40 / 个人分类:备份与恢复 查看( 278 ) / 评论( 2 ...

  4. oracle data guard闪回,11gR2 Active Data Guard 闪回 - flashback database / snapshot standby - 2

    二,11g 使用snapshot方式设置Data Guard闪回 snapshot standby是11g引入的新特性,它不需要开启flashback database特性,就可以让physical ...

  5. 在Oracle DG Standby库上启用flashback database功能

    曾经发生的一次故障,让想起了在Oracle Data Guard环境中配置flashback databae功能的必要性:这样在primary库中用户不小心做truncate或其他不便回退操作时,也可 ...

  6. 利用flashback query解决误删除表数据

    [使用场景]:1.操作失误导致delete.update的数据已经提交. 2.对一个表做了改动,你想看看有哪些数据发生了变化. 3.误删除了function,procedure,trigger等 [使 ...

  7. oracle 11g Flashback Data Archive(闪回数据归档)

    Flashback Data Archive(闪回数据归档) UNDO表空间记录的回滚信息虽然可以提供回闪查询,但时间久了,这些信息会被覆盖掉,其实只要事务一提交,他们就变成可覆盖的对象了,所以经常在 ...

  8. 使用闪回数据库(FLASHBACK DATABASE)和还原点(RESTORE POINT)

    这个章节讲述闪回数据库和还原点.作为数据保护策略整体的一部分,讨论配置,监控和维护这些特性. 1.闪回数据库,还原点和保证还原点概述 Oracle闪回数据库和还原点是相关的数据保护特性,让你可以按时间 ...

  9. oracle flashback 用法,使用Oracle10g Flashback database功能恢复用户错误

    使用Oracle10g Flashback database功能恢复用户错误 $ ps -ef|grep rvwr|grep -v grep oracle 27231 1 0 17:10:30 ? 0 ...

最新文章

  1. 【C++】Google C++编码规范(二):类
  2. 计算机组成原理精品课程申报书,【计算机科学与技术专业】【毕业设计】计算机组成原理精品课程平台的设计与实现...
  3. 在5分钟内搭建企业内部私有npm仓库
  4. Java中的Google协议缓冲区
  5. 实现IButtonControl接口时, PerformClick()方法的代码怎么写,请高手指导!
  6. harbor 多端口_Harbor使用 -- 修改80端口
  7. 问题三十三:怎么用ray tracing画特殊长方体(box)
  8. luogu2668 luogu2540 斗地主(以及增强版)
  9. 学习OpenflowJava
  10. linux下测试磁盘的读写IO速度(IO物理测速)
  11. MSAgent 详细解说(下)
  12. 使用Pytorch搭建CNN
  13. WordPress主题插件Modown6.1绿色版+Erphpdown11.6等多插件
  14. cubieboard笔记
  15. mysql数据库下订单功能项目_订单功能模块设计与实现
  16. 确定十二星座的日期范围
  17. Win11磁盘空间不足怎么清理?Win11清理磁盘空间的方法
  18. 微型计算机DEC影响零标志位吗,汇编语言中常用指令对标志位寄存器的影响
  19. 【Unity】动作游戏开发实战详细分析-07-连续技与组合技功能设计
  20. windows:将网络共享文件夹映射为网络硬盘

热门文章

  1. Python+selenium验证部分文本框内容相符即断言成功
  2. C++ 工程实践(5):避免使用虚函数作为库的接口
  3. 移动端浏览器沉浸式导航
  4. 都2021年了,为什么想回看5分钟前写的代码就这么难
  5. C语言编一个金山打字通小游戏,js实现金山打字通小游戏
  6. IOS 完成来电归属地
  7. 成都自传-MoccA and 555
  8. Android 虚拟机与类加载机制
  9. python生成loss/acc训练曲线
  10. laser_filters无效雷达数据屏蔽