巧用flashback database实现灵活的数据切换

今天是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]$    

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

时间: 2024-09-20 16:38:19

巧用flashback database实现灵活的数据切换的相关文章

巧用flashback database实现灵活的数据回滚

之前写了一篇博文分享了使用flashback database的特性来在测试环境中避免重复导入大批量的数据,造成时间和存储空间的浪费.http://blog.itpub.net/23718752/viewspace-1584057/ 今天碰到的这个问题更有针对性和普遍性,在很多时候都需要一套独立的环境来作为客户的培训和演示需要,环境中的数据一旦配置完成,一般是很少需要改动的.如果培训完成后,第二天如果还有培训或者演示,想得到原来的初始化数据就很困难了. 这个时候我们可以尝试使用flashback

Oracle Flashback Database简介

Flashback 技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTON参数.要使用flashback的特性,必须启用自动撤销管理表空间. 在Oracle 10g中, Flash back家族分为以下成员: Flashback Database, Flashback Drop,Flashback Query(分Flashback Query,Flashback Version Query, Flashback Transaction Query 三种) 和Fla

Oracle Flashback Database的操作示例

做操作前先备份数据库 RMAN> backup database; 1. 检查是否启动了flash recovery area:   SQL> show parameter db_recovery_file NAME                    TYPE        VALUE ------------------------------------  ----------- ------------------------------ db_recovery_file_dest

Oracle与Flashback Database 相关的视图

1. V$database 这个视图可以查看是否启用了Flashback database功能 SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES 2. V$flashback_database_log Flashback Database 所能回退到的最早时间,取决与保留的Flashback Database Log 的多少, 该视图就可以查看许多有用的信息. Oldest_flashbac

闪回数据库(Flashback Database)

Flashback Database闪回数据库 使用闪回数据库可以将数据库快速的闪回到过去某个时间点.在启用闪回数据时,会将修改过的块的前映像作为闪回数据库日志保存在闪回恢复区中,如出现逻辑坏块或用户错误操作需要恢复到过去的时间点,闪回数据库将还原数据库的前映像,然后使用归档日志和redo前滚到期望恢复的时间点,因为无需还原数据库的数据文件,所有此过程速度比较传统的还原恢复通常快很多. 启动闪回数据库时,会将前映像数据保存在"闪回缓冲区"中,然后由恢复写入器(Recovery Writ

Oracle 闪回特性(FLASHBACK DATABASE)

--===================================== -- Oracle 闪回特性(FLASHBACK DATABASE) --=====================================       闪回技术通常用于快速简单恢复数据库中出现的认为误操作等逻辑错误,从闪回的方式可以分为基于数据库级别闪回.表级别闪回.事务 级别闪回,根据闪回对数据的影响程度又可以分为闪回恢复,闪回查询.闪回恢复将修改数据,闪回点之后的数据将全部丢失.而闪回查询则可 以查询数

请教 oracle 10g 开启不了flashback database

问题描述 这是错误信息:SQL> alter database flashback on;alter database flashback on*第 1 行出现错误:ORA-00439: 未启用功能: Flashback Database这是一些参数贴出来大家看下:SQL> show parameter db_recovery;NAME TYPE VALUE------------------------------------ ----------- --------------------

oracle中使用Flashback database功能恢复用户错误

Oracle10g中有一个新增得功能Flashback Database,当你启动它以后,它会定期将已发生变化的块写入到闪回日志的日志文件中.请注意这些日志不是由传统的Log Writer (LGWR) 过程写入,而是由一种称作Recovery Writer的新过程来写入. $ ps -ef|grep rvwr|grep -v grep oracle 27231 1 0 17:10:30 ? 0:00 ora_rvwr_eygle 注释:与常规的重做日志有所不同,回闪日志既不需要DBA创建,也不

巧用Excel2003“自动筛选”工具筛选数据技巧

  巧用Excel2003"自动筛选"工具筛选数据技巧           方法一.直接选择筛选对象 1.打开Excel表格,选择菜单栏中的"数据"-"筛选"-"自动筛选"命令.在这里我们以筛选出"性别女"为例. 2.第一行单元格的右下角出现倒三角形按钮.点击需要筛选的类别,选择筛选的对象即可. 方法二.通过"自定义"选择筛选对象. 1.我们选择名为"性别"的单元格,