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:\Users\XIFENFEI>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, 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
经由常规路径由 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)
|