加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

利用flashback database实现部分对象回滚

发布时间:2020-12-15 18:12:02 所属栏目:百科 来源:网络整理
导读:flashback database功能在生产库中,很少被直接使用,因为没有多少业务可以承受整个数据库级别的回滚.但是如果发生一些让人意想不到的误操作时候,想回滚该操作,我们不得不使用历史的备份来进行不完全恢复.如果没有历史备份,那简直是人生一个悲剧的发生.这里通

flashback database功能在生产库中,很少被直接使用,因为没有多少业务可以承受整个数据库级别的回滚.但是如果发生一些让人意想不到的误操作时候,想回滚该操作,我们不得不使用历史的备份来进行不完全恢复.如果没有历史备份,那简直是人生一个悲剧的发生.这里通过使用结合flashback database,实现flashback table级别不能完成的恢复,而且确保整个数据库的其他数据还是最新.这些操作比如:修改表结构,删除数据库用户等操作.这里通过修改表列的处理思路来展示该功能的使用方法,其他处理方法类此
1.确定启用flashback database功能

SQL> select flashback_on from v$database;
??
FLASHBACK_ON
------------------
YES
??
SQL>? show parameter flash
??
NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ------------------------------
db_flash_cache_file????????????????? string
db_flash_cache_size????????????????? big integer 0
db_flashback_retention_target??????? integer???? 1440

2.模拟表结构被修改

SQL> create table t_xifenfei
??2? as
??3? select object_id,object_name from dba_objects;
??
表已创建。
??
SQL> alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS';
??
会话已更改。
??
SQL>? select sysdate from dual;
??
SYSDATE
-------------------------
17-6月 -2012 15:25:24
??
SQL> ALTER TABLE t_xifenfei drop column object_name;
??
表已更改。

3.尝试flashback query功能

SQL> SELECT * FROM t_xifenfei as of timestamp to_timestamp('2012-06-17 15:25:24','yyyy-mm-dd hh24:mi:ss');
SELECT * FROM t_xifenfei as of timestamp to_timestamp('2012-06-17 15:25:24','yyyy-mm-dd hh24:mi:ss')
??????????????*
第 1 行出现错误:
ORA-01466: 无法读取数据 - 表定义已更改
--这个证明因为ddl操作发生在表上,无法使用flashback table/query等操作

4.尝试flashback database

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP MOUNT;
ORACLE 例程已经启动。
??
Total System Global Area? 535662592 bytes
Fixed Size????????????????? 1385840 bytes
Variable Size???????????? 390072976 bytes
Database Buffers????????? 138412032 bytes
Redo Buffers??????????????? 5791744 bytes
数据库装载完毕。
SQL>? flashback database to timestamp to_date('2012-06-17 15:25:24','yyyy-mm-ddhh24:mi:ss');
??
闪回完成。
??
SQL> alter database open read only;
??
数据库已更改。
??
SQL> DESC CHF.T_XIFENFEI
?名称????????????????????????????????????? 是否为空? 类型
?----------------------------------------- -------- ----------------------------
??
?OBJECT_ID????????????????????????????????????????? NUMBER
?OBJECT_NAME??????????????????????????????????????? VARCHAR2(128)

5.导出需要回滚对象

C:UsersXIFENFEI>EXP chf/xifenfei tables=t_xifenfei file=d:t_xifenfei.dmp
>log=d:t_xifenfei.log
??
Export: Release 11.2.0.3.0 - Production on 星期日 6月 17 15:40:37 2012
??
Copyright (c) 1982,2011,Oracle and/or its affiliates.? All rights reserved.
??
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning,Oracle Label Security,OLAP,Data Mining,
Oracle Database Vault and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
??
即将导出指定的表通过常规路径...
. . 正在导出表????????????????????? T_XIFENFEI导出了?????? 75270 行
成功终止导出,没有出现警告。

6.恢复数据库至最新状态

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>? startup mount
ORACLE 例程已经启动。
??
Total System Global Area? 535662592 bytes
Fixed Size????????????????? 1385840 bytes
Variable Size???????????? 390072976 bytes
Database Buffers????????? 138412032 bytes
Redo Buffers??????????????? 5791744 bytes
数据库装载完毕。
SQL> recover database;
完成介质恢复。
SQL> alter database open;
??
数据库已更改。
??
SQL> desc chf.t_xifenfei
?名称????????????????????????????????????? 是否为空? 类型
?----------------------------------------- -------- ----------------------------
??
?OBJECT_ID????????????????????????????????????????? NUMBER

7.导入正确数据

SQL> drop table chf.t_xifenfei purge;
??
表已删除。
??
SQL> host imp chf/xifenfei tables=t_xifenfei file=d:t_xifenfei.dmp
>log=d:t_xifenfei.log
??
Import: Release 11.2.0.3.0 - Production on 星期日 6月 17 15:45:53 2012
??
Copyright (c) 1982,Oracle and/or its affiliates.? All rights reserved.
??
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning,
Oracle Database Vault and Real Application Testing options
??
经由常规路径由 EXPORT:V11.02.00 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 CHF 的对象导入到 CHF
. 正在将 CHF 的对象导入到 CHF
. . 正在导入表??????????????????? "T_XIFENFEI"导入了?????? 75270 行
成功终止导入,没有出现警告。
??
SQL> desc chf.t_xifenfei
?名称????????????????????????????????????? 是否为空? 类型
?----------------------------------------- -------- ----------------------------
??
?OBJECT_ID????????????????????????????????????????? NUMBER
?OBJECT_NAME??????????????????????????????????????? VARCHAR2(128)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读