当前位置:  数据库>oracle

Schema的回滚快照

    来源: 互联网  发布时间:2017-06-20

    本文导语: 多天前,我们的一个客户不小心在网站上做了一个"删除"操作.但他发现他无法确认被他删除的对象是否真的应该被删除.于是求助于我们,希望能看到“删除”操作之前的界面。 我们首先想到的是借助于闪回查询(Flashback Q...

多天前,我们的一个客户不小心在网站上做了一个"删除"操作.但他发现他无法确认被他删除的对象是否真的应该被删除.于是求助于我们,希望能看到“删除”操作之前的界面。

我们首先想到的是借助于闪回查询(Flashback Query)。但是,他的这个简单的删除操作实际上在后台数据库当中删除了十多张表的相关数据。而且用于在页面上显示这些对象的代码的逻辑也相当复杂。因此,闪回查询无助于他的要求。我们最终利用expdp的flashback_time参数,将这个schema的数据导出,再导入一个测试环境完成他的请求。

我当时想到,如果Oracle在会话级别提供一个参数flashback_scn/flashback_time控制这个会话的所有查询都闪回到某一个时间点,那这个问题就很容易解决:只要建立一个新的连接,当连上数据库后就修改该参数,就可以查询到该时间点的快照了。

于是我又想,能否找到一个方法,模拟实现出一个schema的闪回快照呢。最终,我找到一个不完善的方法:建立一个新的schema,在该schema当中,为每个源schema的表建立一个视图,在试图中引入闪回查询。并且引入一个“全局变量”来控制视图的闪回时间/scn。

以下就是代码

-- ################################################################################ 

-- # 

-- #         $Id: schema_snapshot.sql 

-- # 

-- #        File: $RCSfile: schema_snapshot.sql,v $ 

-- # Description: create a snapshot for a schema 

-- #       Usage: sqlplus -s /nolog @schema_snapshot   

-- #     Created: 07/02/2014 

-- #      Author: Wei Huang 

-- # User run as: / as sysdba (OS user should be oracle owner) 

-- #  Parameters: 1: existing schema name 

-- #  Parameters: 2: new schema name 

-- #  Parameters: 3: snapshot timestamp 

-- # 

-- #  Copyright (c) 2014 Wei Huang 

-- # 

-- # History 

-- # Modified by   When      Why 

-- # -----------   -------   ---------------------------------------------------- 

-- ################################################################################ 

 

prompt Usage: @schema_snapshot   

prompt Description: create a snapshot for a schema 

prompt   

 

declare 

  sql_str varchar2(4000); 

  c number; 

begin 

  select count(1) into c from dba_users where username = upper('&2'); 

  if c = 0 then 

    execute immediate 'create user &2 identified by &2'; 

    execute immediate 'grant connect,resource to &2'; 

    sql_str := q'[ 

CREATE OR REPLACE PACKAGE &2.var_pkg IS 

  var varchar2(255); 

  PROCEDURE set_var(val varchar2); 

  function get_var return varchar2; 

END var_pkg ; 

 

CREATE OR REPLACE PACKAGE BODY &2.var_pkg IS 

  PROCEDURE set_var(val varchar2) IS 

  BEGIN 

    var := val; 

  end set_var; 

 

  function get_var return varchar2  

  IS 

  BEGIN 

    return var; 

  END get_var; 

END var_pkg; 

]'; 

 

    execute immediate sql_str; 

    for q in (select 'grant select,flashback on '||owner||'.'||table_name||' to '||upper('&2')||';' str from dba_tables where owner=upper('&1')) loop 

      execute immediate q.str; 

    end loop; 

    for q in (select 'create or replace view '||upper('&2')||'.V_'||table_name||' as select * from '||owner||'.'||table_name||'  as of timestamp to_timestamp(var_pkg.get_var,''yyyymmddhh24miss'');' from dba_tables where owner=upper('&1') loop 

      execute immediate q.str; 

    end loop; 

    for q in (select 'create or replace synonym '||upper('&2')||'.'||table_name||' for '||upper('&2')||'.V_'||table_name||';' from dba_tables where owner=upper('&1') loop 

      execute immediate q.str; 

    end loop; 

 

    &2.var_pkg.set_var('&3'); 

  end if; 

end; 

这段代码将会产生用于创建闪回快照schema的中对象的代码。连接该schema的客户端将会读取到源schema的某个时间点的快照数据。当然,如果源schema中还有存储过程、视图等其他plsql代码的话,还要在该schema当中重新创建。


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.xml.validation类schema成员方法: schema定义参考
  • mod_schema
  • java命名空间javax.xml.validation类schema成员方法: newvalidatorhandler定义参考
  • Schema
  • java命名空间javax.xml类xmlconstants的类成员方法: w3c_xml_schema_ns_uri定义及介绍
  • 谁知道linux/unix下利用Schema读取校验xml的开源代码,给一个链接,谢谢!
  • java命名空间javax.xml.bind接口marshaller的类成员方法: jaxb_schema_location定义及介绍
  • linux LDAP和windows AD集成,schema怎么转换?
  • java命名空间javax.xml类xmlconstants的类成员方法: w3c_xml_schema_instance_ns_uri定义及介绍
  • Orcle的package中访问其它Schema的表报错ORA-00942解决方法
  • java命名空间javax.sql.rowset接口webrowset的类成员方法: public_xml_schema定义及介绍
  • 采用XML时候大家用DTD还是SCHEMA。
  • java命名空间javax.xml.bind接口marshaller的类成员方法: jaxb_no_namespace_schema_location定义及介绍
  • 有没有根据schema文件检验xml文档的java包或方法??
  • java命名空间javax.sql.rowset接口webrowset的类成员方法: schema_system_id定义及介绍
  • mysql数据库中的information_schema和mysql可以删除吗?
  • 以NetBeans IDE为例介绍如何使用XML中Schema语言
  • 推荐一本XML的书(inlcude schema, not dtd),进来有分
  • 那里有利用JAXP 1.2处理XML(基于XML Schema,而不是DTD)的JAVA程序例子!!! 200分!!!
  • json-schema-php
  • 解析MySQL的information_schema数据库


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3