博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Oracle 10g中使用闪回技术
阅读量:4039 次
发布时间:2019-05-24

本文共 4281 字,大约阅读时间需要 14 分钟。

闪回技术和恢复
 
闪回技术概述
 
在Oracle10g中,可以在行、表和数据库级别使用闪回技术,具体分类如下:
1、
  行级闪回
可以使用行闪回技术撤销对个别行的错误更改。有三种行级闪回技术,他们全都依赖于存储在撤销表空间中的撤销数据。
(1)
       闪回查询:允许根据时间点或SCN查看旧的行数据。可以查看更旧的数据,并且,如果需要可以检索它并撤销错误的更改。
(2)
       闪回版本查询:允许查看相同行在一段时间内的所有版本,以便可撤销逻辑错误。它还可以提供更改的审计历史,允许比较当前数据与历史数据而不用执行DML活动。
(3)
       闪回事务查询:允许查看事务级所做的更改。此技术帮助分析和审计事务,例如,一个批作业执行了两次,你想确定哪些对象受到影响等。使用此技术可撤销指定时间段内某个事务所做的更改。
2、
  表级闪回
(1)
       闪回表:复原一个表到某个时间点,或者到指定的SCN而不用恢复数据文件。此特性使用DML更改撤销表中的更改。闪回表特性依赖于撤销数据。
(2)
       闪回删除:允许倒退一条DROP TABLE语句的结果,而不用进行时间点恢复。闪回删除特性使用回收站复原被删除的表。
3、
  数据库级闪回
闪回数据库特性允许复原整个数据库到某个时间点,从而撤销自该时间以来的所有更改。闪回数据库主要利用闪回日志检索数据块的更旧的版本,它也依赖归档重做日志完全地恢复数据库,不用复原数据文件和执行传统的介质恢复。
 
闪回和传统的恢复技术对比
与传统恢复技术不同,闪回技术的主要目的不是从介质丢失中恢复,而是从人为错误中恢复。例如:用户可能错误的删除了某个表或者错误的更改了某个表的数据。这时候你想撤销你刚才的操作。
传统上,从人为错误中恢复数据唯一的办法就是采用用户管理的备份和恢复技术。先复原数据库文件然后利用所有重做日志文件前滚的过程需要长时间的停机。
而闪回技术提供了从逻辑错误中恢复的更有效和更快的方法,多数情况下,在用这种技术进行恢复时数据库仍然联机并对用户可用。此外,闪回技术允许选择性地复原某些对象。使用传统的技术,从某种意义上说某有选择,只能恢复整个数据库。
 
闪回删除
闪回删除特性提供了恢复被意外删除的表(或索引)而不丢失最近事务的一种手段。在Oracle10g中,在删除一个表时,Oracle并不立即丢弃它。而是把它放在回收站中列出该表以及其依赖的对象,并保留尽可能长的时间。如果你很快意识到自己犯了错误,可以简单的使用一些命令即可找回被你删除的表。
 
SQL> conn scott/tiger;
已连接。
SQL> create table mytest as select * from dept;
 
表已创建。
 
SQL> drop table mytest;
 
表已删除。
 
SQL>
flashback table mytest to before drop;
 
闪回完成。
 
SQL> select * from mytest;
 
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
 
SQL> drop table mytest;
 
表已删除。
 
闪回如何工作?
在Oracle10g之前,执行DROP TABLE命令将导致表以及其所有依赖对象立即被删除,并且表段中所有相关的空间都被释放回数据库。
在Oracle10g中,表及其依赖对象不会被立即删除,而是被重命名了,他们仍然保留在原位置,Oracle将根据空间紧迫情况尽可能长的保留它们。在Oracle10中,有一个回收站的概念:回收站是一个逻辑容器(一个数据字典表,它保存被删除的表的相关信息,如它们的新名字和原来的名字等)信息。
 
SQL> desc recyclebin;
通过上述命令可以看到回收站的系统字段
如果想查看回收站中的内容可以使用
SQL> select * from recyclebin;
 
SQL> select object_name,droptime,dropscn,purge_object from recyclebin;
 
OBJECT_NAME               DROPTIME              DROPSCN PURGE_OBJECT
------------------------------ ------------------- ---------- ------------
 
BIN$ugr+dcX2R1Kk6imZ2wEQOQ==$0 2007-08-10:21:33:43     5456762        54660
 
在Oracle10g Release 2版本中,可以使用RECYCLEBIN初始化参数关闭闪回删除功能。默认是,此参数设置为ON,表示所有删除的表都要进入回收站,可以利用闪回删除特性恢复它们。通过设置此参数的值为OFF,关闭闪回删除特性,表在被删除后不进入回收站。
 
如果需要真正的删除掉一张表,那就需要清空回收站。
u
       用户使用PURGE命令(DROP TABLE table_name PURGE)从回收站中永久删除对象
u
       Oracle迫于空间压力(如果Oracle在表空间中没有足够的可用空间创建新对象或不能为现有对象扩展更过空间时)自动删除回收站中的对象。
 
如果需要真正删除表
SQL> select * from mytest;
 
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
 
SQL> d
rop table mytest purge;
 
表已删除。
 
SQL> select object_name,droptime,dropscn,purge_object from recyclebin;
 
OBJECT_NAME                     DROPTIME               DROPSCN PURGE_OBJECT
------------------------------ ------------------- ---------- ------------
 
这样就找不到表了。
我们在删除的同时,也从回收站情况了它。
 
什么是回收站?
回收站是一个逻辑结构,一个名为RECYCLEBIN的数据字典。你可以通过USER_RECYCLEBIN视图,查看自己在回收站中当前登记的内容。
或者通过dba_recyclebin视图也可以查看回收站中的内容
SQL> select owner,original_name,object_name,ts_name,droptime from dba_recyclebin;
 
OWNER                           ORIGINAL_NAME                    OBJECT_NAME                    TS_NAME 
------------------------------ -------------------------------- ------------------------------ -----
SCOTT                           BONUS                            BIN$cyqKxbJ9SQWbX52tIgAS9A==$0 USERS   
SCOTT                           SALGRADE                         BIN$myTqyz98SN6Oi6IAmPA4LA==$0 USERS   
 
可以看到,当一个表被移动到回收站,Oracle给他指派一个系统生成的名字,此名字通常有30个字符长。如果你相在回收站中查询一个对象,则必须使用用其系统生成的名字,扩在双引号中:
SQL> conn scott/tiger;
已连接。
使用SCOTT用户登录后进行查询。
SQL> select * from "BIN$myTqyz98SN6Oi6IAmPA4LA==$0";
 
     GRADE      LOSAL      HISAL
---------- ---------- ----------
         1        700       1200
         2       1201       1400
         3       1401       2000
         4       2001       3000
         5       3001       9999
 
注意:回收站中的对象只能进行查询,任何的DML操作将不起作用。
 
恢复被删除的表
只要回收站中列出被删除的表,就可以使用命令恢复它。
FLASHBACK TABLE table_name TO BEFORE DROP
在恢复之后,Oracle将把它们从回收站中删除。
永久删除表
在删除表示使用命令
DROP TABLE table_name PRUGE
 
还可以使用PURGE TABLE或者PURGE INDEX命令从回收站中永久除去以前删除的表或索引。
 
可以使用PURGE TABLESPACE命令从回收站中删除作为相应表空间成分的所有对象,如:
PURGE TABLESPACE users USER scott
 
上述命令将从USERS表空间中删除单一用户scott的所有对象(以及存在于其他表空间中的所有依赖对象)。
必须的权限
为使用FLASHBACK TABLE TABLE_NAME TO BEFORE DROP命令取回一个表,你必须拥有它或者在具有此表的删除权限(DROP TABLESPACE或者DROP ANY TABLE)。为使用PURGE命令,需要类似的权限。为了查询回收站中的对象,必须具有SELECT权限和FLASHBACK权限。
 
 
闪回数据库
闪回数据库的条件
1、
  数据库日志系统必须在归档模式下。
2、
  如果丢失了一个数据文件,或者由于某种原因不能使用特定的数据文件,则不能使用闪回数据库进行恢复。
3、
  如果已经在想闪回的时间范围内复原或重建了一个控制文件,则不能使用闪回数据库特性。
4、
  不能闪回一个数据库到RESETLOGS操作之前。
5、
  不能闪回在被闪回表操作覆盖的时间范围内缩短或删除的数据文件。
 
在Oracle10g中,闪回数据库功能恢复数据文件但不需要备份的数据文件,他只能使用部分归档重做日志信息。闪回数据库操作将数据库的所有数据文件倒退到以前的某个特定的时间点。
 
可以在下述情况下使用闪回操作:
1、
  找回某个删除的模式
2、
  在某个用户错误影响到整个数据库时
3、
  在错误的截断一个表时
4、
  在一个批作业只执行了部分更改时
 
 
 

转载地址:http://oavdi.baihongyu.com/

你可能感兴趣的文章
hadoop、hbase、hive、spark分布式系统架构详细搭建过程
查看>>
Hadoop与Hbase各版本对应关系
查看>>
impdp时ORA-39126: Worker unexpected fatal error in KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS]
查看>>
OracleMTSRecoveryService 启动失败
查看>>
oracle job如何定时执行带参数的存储过程
查看>>
oracle12c存在pdb情况下的data guard 详细搭建
查看>>
oracle 查询自动补全日期以及相应的数据
查看>>
Centos7.4 zabbix3.4.8源码安装详细过程
查看>>
python 自动抓取网页新闻以及图片并存储到数据库中
查看>>
python监控系统(flask+python+html)
查看>>
oracle从备份集中恢复归档日志方法
查看>>
Oracle跨版本与跨平台执行传输表空间(XTTS)
查看>>
fatal: unable to access 'https://github.com/danfengcao/binlog2sql.git/': SSL connect error
查看>>
Mysql误操作后使用binlog2sql快速回滚
查看>>
sql loader导出数据和导入数据(sqlldr)
查看>>
RedoLog Checkpoint 和 SCN关系
查看>>
Oracle 实例恢复时 前滚(roll forward) 后滚(roll back)
查看>>
Oracle redo log 机制
查看>>
全面解析9i以后Oracle Latch闩锁原理
查看>>
Oracle Enqueue lock队列锁机制
查看>>