ITPub博客

首页 > 应用开发 > IT综合 > 10G FLASHBACK

10G FLASHBACK

原创 IT综合 作者:OmarChina 时间:2007-10-18 23:47:09 0 删除 编辑
9I中可以实现行级恢复。在10G中增加了flashback table 和flashback database
要使用这个必须设置undo_management为auto 而且要合理设置undo_retention[@more@]

9I中可以实现行级恢复。在10G中增加了flashback table 和flashback database
要使用这个必须设置undo_management为auto 而且要合理设置undo_retention

一,实现行级恢复
指定as of timestamp或as of scn子句
u_omar@OMAR> select count(*) from t1 as of timestamp to_timestamp('2007-09-10 23:33:10','y
yyy-mm-dd hh24:mi:ss');

COUNT(*)
----------
10000

u_omar@OMAR> select count(*) from t1;

COUNT(*)
----------
9000
10G中可以支持SCN和时间点之间的互相转化。函数忘记了


二,使用flashback table恢复表到先前状态
u_omar@OMAR> flashback table t1 to timestamp to_timestamp('2007-09-10 23:33:10','yyyy-mm-d
d hh24:mi:ss');
flashback table t1 to timestamp to_timestamp('2007-09-10 23:33:10','yyyy-mm-dd hh24:mi:ss'
)
*
第 1 行出现错误:
ORA-08189: 因为未启用行移动功能, 不能闪回表

要具备以下的条件才可以闪会表
1,用户具备flashback any table系统权限或flashback 对象权限
2,对对象具有INSERT DELETE SELECT 和ALTER权限
3,设置了合理的UNDO_RETENTION,确保留足够的信息
4,还要激活行移动特性:
alter table emp enable row movement

23:45:47 u_omar@OMAR> alter table t1 enable row movement;

表已更改。

23:46:14 u_omar@OMAR> flashback table t1 to timestamp to_timestamp('2007-09-10 23:43:41','
yyyy-mm-dd hh24;mi:ss');

闪回完成。

23:46:20 u_omar@OMAR> select count(*) from t1;

COUNT(*)
----------
9000

23:46:29 u_omar@OMAR> delete from t1 where rownum<=1000;

已删除1000行。

23:46:51 u_omar@OMAR> commit;

提交完成。

23:46:53 u_omar@OMAR> select count(*) from t1;

COUNT(*)
----------
8000

23:46:59 u_omar@OMAR> flashback table t1 to timestamp to_timestamp('2007-09-10 23:43:41','
yyyy-mm-dd hh24;mi:ss');

闪回完成。

23:47:07 u_omar@OMAR> select count(*) from t1;

COUNT(*)
----------
9000

三,使用flashback table 恢复被删除的表
回车站的限制:
1,只使用非SYSTEM的局部管理表空间
2,ORACLE没有为回车站分配固定预留空间,不能保证时间保留。
当被删除对象所在表空间没有足够空间时候。ORACLE实施先进先出
3,用select语句可以查询回车站,但不能执行DML和DDL在回车站
23:47:15 u_omar@OMAR> drop table emp purge;

表已删除。
23:47:15 u_omar@OMAR> drop table emp purge;

表已删除。

23:56:01 u_omar@OMAR> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP BIN$EOgLIu3BSCysD4eTnNFa7Q==$0 TABLE 2007-09-10:21:55:37
23:56:38 u_omar@OMAR> select object_name,original_name from recyclebin;

OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$EOgLIu3BSCysD4eTnNFa7Q==$0 EMP

23:57:31 u_omar@OMAR> purge table emp;

表已清除。

23:58:23 u_omar@OMAR> show recyclebin
23:58:27 u_omar@OMAR>
PURGE TABLE,PURGE INDEX ,PURGE TABLESPACE,
PURGE TABLESPACE USERS USER SCOTT;
PURGE RECYCLEBIN;
PURGE DBA——RECYCLEBIN;


00:00:07 u_omar@OMAR> CREATE TABLE EMP AS SELECT * FROM SCOTT.EMP;

表已创建。

00:00:19 u_omar@OMAR> DROP TABLE EMP;

表已删除。

00:00:25 u_omar@OMAR> FLASHBACK TABLE EMP TO BEFORE DROP;

闪回完成。

00:00:36 u_omar@OMAR> SELECT COUNT(*) FROM EMP;

COUNT(*)
----------
14

00:00:42 u_omar@OMAR> SHOW RECYCLEBIN
00:01:04 u_omar@OMAR> DROP TABLE EMP;

表已删除。

00:01:25 u_omar@OMAR> SHOW RECYCLEBIN
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP BIN$LfH14J34S9OFBgWtdgam/A==$0 TABLE 2007-09-11:00:01:25
00:01:55 u_omar@OMAR> FLASHBACK TABLE "BIN$LfH14J34S9OFBgWtdgam/A==$0"
00:02:06 2 TO BEFORE DROP RENAME TO OLD_EMP;

闪回完成。

00:02:08 u_omar@OMAR> SELECT COUNT(*) FROM OLD_EMP;

COUNT(*)
----------
14
闪回了表还可以重命名

四,FLASHBACK DATABASE 恢复数据库到先前状态
FLASHBACK DATABASE的限制:
1,必须是ARCHIVELOG模式
2,必须激活数据库的FLASHBACK特性;
3,必须合理的设置db_flashback_retention_target


sys@OMAR> select flashback_on from v$database;

FLASHBACK_ON
------------------
NO

sys@OMAR> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
sys@OMAR> startup mount
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
sys@OMAR> alter database flashback on
2 ;

数据库已更改。

sys@OMAR> alter system set db_flashback_retention_target=3600;

系统已更改。

sys@OMAR> alter database open;

数据库已更改。

sys@OMAR> select current_scn from v$database;

CURRENT_SCN
-----------
9535749

sys@OMAR> drop table scott.t1;
drop table scott.t1
*
第 1 行出现错误:
ORA-00942: 表或视图不存在


sys@OMAR> drop table u_omar.t1;

表已删除。

sys@OMAR> select oldest_flashback_scn,oldest_flashback_time
2 from v$flashback_database_log;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBA
-------------------- --------------
9535612 11-9月 -07

sys@OMAR> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
sys@OMAR> startup mount
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
sys@OMAR> flashback database to scn 9535749;

闪回完成。

sys@OMAR> alter database open resetlogs;

数据库已更改。

sys@OMAR> select count(*) from u_omar.t1;

COUNT(*)
----------
9000

利用RMAN可是可以实行FLASHBACK DATABASE的
例:
C:Documents and SettingsAdministrator>set nls_data_format=yyyy-mm-dd hh24:mi:ss

C:Documents and SettingsAdministrator>rman nocatalog target /

恢复管理器: Release 10.2.0.1.0 - Production on 星期二 9月 11 00:12:27 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到目标数据库: OMAR (DBID=1160758635)
使用目标数据库控制文件替代恢复目录

RMAN> shutdown immediate

数据库已关闭
数据库已卸载
Oracle 实例已关闭

RMAN> startup mount

已连接到目标数据库 (未启动)
Oracle 实例已启动
数据库已装载

系统全局区域总计 167772160 字节

Fixed Size 1247900 字节
Variable Size 71304548 字节
Database Buffers 92274688 字节
Redo Buffers 2945024 字节

RMAN> flashback database to scn 9535749;

启动 flashback 于 11-9月 -07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=45 devtype=DISK


正在开始介质的恢复

存档日志线程 1 序列 1 已作为文件 D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAOMARARCHIVE
LOG2007_09_11O1_MF_1_1_3GBV3WTC_.ARC 存在于磁盘上
介质恢复完成, 用时: 00:00:03
完成 flashback 于 11-9月 -07

RMAN> alter database open resetlogs;

数据库已打开

RMAN> run{
2> set newname for datafile 1 to 'E:dupdbsystem01.dbf';
3> set newname for datafile 2 to 'E:dupdbundotbs01.dbf';
4> set newname for datafile 3 to 'E:dupdbsysaux01.dbf';
5> set newname for datafile 4 to 'E:dupdbusers01.dbf';
6> set newname for datafile 5 to 'E:dupdbexample01.dbf';
7> set newname for datafile 6 to 'E:dupdbtest01.dbf';
8> set newname for tempfile 1 to 'E:dupdbtemp01.dbf';
9> duplicate target database to dupdb logfile
10> 'e:dupdbredo01.log' size 10m,
11> 'e:dupdbredo02.log' size 10m,
12> 'e:dupdbredo03.log' size 10m;
13> }

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

启动 Duplicate Db 于 11-9月 -07
使用通道 ORA_AUX_DISK_1

内存脚本的内容:
{
set until scn 9559089;
set newname for datafile 1 to
"E:DUPDBSYSTEM01.DBF";
set newname for datafile 2 to
"E:DUPDBUNDOTBS01.DBF";
set newname for datafile 3 to
"E:DUPDBSYSAUX01.DBF";
set newname for datafile 4 to
"E:DUPDBUSERS01.DBF";
set newname for datafile 5 to
"E:DUPDBEXAMPLE01.DBF";
set newname for datafile 6 to
"E:DUPDBTEST01.DBF";
restore
check readonly
clone database
;
}
正在执行内存脚本

正在执行命令: SET until clause

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

启动 restore 于 11-9月 -07
使用通道 ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到E:DUPDBSYSTEM01.DBF
正将数据文件00002恢复到E:DUPDBUNDOTBS01.DBF
正将数据文件00003恢复到E:DUPDBSYSAUX01.DBF
正将数据文件00004恢复到E:DUPDBUSERS01.DBF
正将数据文件00005恢复到E:DUPDBEXAMPLE01.DBF
正将数据文件00006恢复到E:DUPDBTEST01.DBF
通道 ORA_AUX_DISK_1: 正在读取备份段 F:TIRMR0F_1_1.BAK
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = F:TIRMR0F_1_1.BAK 标记 = TAG20070911T202447
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:01:56
完成 restore 于 11-9月 -07
sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "DUPDB" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1000
MAXINSTANCES 8
MAXLOGHISTORY 2920
LOGFILE
GROUP 1 'e:dupdbredo01.log' SIZE 10 M ,
GROUP 2 'e:dupdbredo02.log' SIZE 10 M ,
GROUP 3 'e:dupdbredo03.log' SIZE 10 M
DATAFILE
'E:DUPDBSYSTEM01.DBF'
CHARACTER SET ZHS16GBK


内存脚本的内容:
{
switch clone datafile all;
}
正在执行内存脚本

释放的通道: ORA_AUX_DISK_1
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=1 stamp=633042186 文件名=E:DUPDBUNDOTBS01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=2 stamp=633042186 文件名=E:DUPDBSYSAUX01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=3 stamp=633042186 文件名=E:DUPDBUSERS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 recid=4 stamp=633042186 文件名=E:DUPDBEXAMPLE01.DBF
数据文件 6 已转换成数据文件副本
输入数据文件副本 recid=5 stamp=633042186 文件名=E:DUPDBTEST01.DBF

内存脚本的内容:
{
set until scn 9559089;
recover
clone database
delete archivelog
;
}
正在执行内存脚本

正在执行命令: SET until clause

启动 recover 于 11-9月 -07
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=49 devtype=DISK

正在开始介质的恢复

存档日志线程 1 序列 5 已作为文件 D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAOMARARCH
LOG2007_09_11O1_MF_1_5_3GF2CLX9_.ARC 存在于磁盘上
存档日志文件名 =D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAOMARARCHIVELOG2007_09_11
_MF_1_5_3GF2CLX9_.ARC 线程 =1 序列 =5
介质恢复完成, 用时: 00:00:01
完成 recover 于 11-9月 -07

内存脚本的内容:
{
shutdown clone;
startup clone nomount ;
}
正在执行内存脚本

数据库已卸载
Oracle 实例已关闭

已连接到辅助数据库 (未启动)
Oracle 实例已启动

系统全局区域总计 167772160 字节

Fixed Size 1247900 字节
Variable Size 71304548 字节
Database Buffers 92274688 字节
Redo Buffers 2945024 字节
sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "DUPDB" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1000
MAXINSTANCES 8
MAXLOGHISTORY 2920
LOGFILE
GROUP 1 'e:dupdbredo01.log' SIZE 10 M ,
GROUP 2 'e:dupdbredo02.log' SIZE 10 M ,
GROUP 3 'e:dupdbredo03.log' SIZE 10 M
DATAFILE
'E:DUPDBSYSTEM01.DBF'
CHARACTER SET ZHS16GBK


内存脚本的内容:
{
set newname for tempfile 1 to
"E:dupdbtemp01.dbf";
switch clone tempfile all;
catalog clone datafilecopy "E:DUPDBUNDOTBS01.DBF";
catalog clone datafilecopy "E:DUPDBSYSAUX01.DBF";
catalog clone datafilecopy "E:DUPDBUSERS01.DBF";
catalog clone datafilecopy "E:DUPDBEXAMPLE01.DBF";
catalog clone datafilecopy "E:DUPDBTEST01.DBF";
switch clone datafile all;
}
正在执行内存脚本

正在执行命令: SET NEWNAME

临时文件 1 在控制文件中已重命名为 E:dupdbtemp01.dbf

已将数据文件副本列入目录
数据文件副本 filename=E:DUPDBUNDOTBS01.DBF recid=1 stamp=633042198

已将数据文件副本列入目录
数据文件副本 filename=E:DUPDBSYSAUX01.DBF recid=2 stamp=633042198

已将数据文件副本列入目录
数据文件副本 filename=E:DUPDBUSERS01.DBF recid=3 stamp=633042199

已将数据文件副本列入目录
数据文件副本 filename=E:DUPDBEXAMPLE01.DBF recid=4 stamp=633042199

已将数据文件副本列入目录
数据文件副本 filename=E:DUPDBTEST01.DBF recid=5 stamp=633042200

数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=1 stamp=633042198 文件名=E:DUPDBUNDOTBS01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=2 stamp=633042198 文件名=E:DUPDBSYSAUX01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=3 stamp=633042199 文件名=E:DUPDBUSERS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 recid=4 stamp=633042199 文件名=E:DUPDBEXAMPLE01.DBF
数据文件 6 已转换成数据文件副本
输入数据文件副本 recid=5 stamp=633042200 文件名=E:DUPDBTEST01.DBF

内存脚本的内容:
{
Alter clone database open resetlogs;
}
正在执行内存脚本

数据库已打开
完成 Duplicate Db 于 11-9月 -07

RMAN> exit


恢复管理器完成。

C:Documents and SettingsAdministrator>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 9月 11 21:04:54 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

idle> conn / as sysdba
已连接。
sys@DUPDB>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9925929/viewspace-977515/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 归档相关参数
请登录后发表评论 登录
全部评论
  • 博文量
    68
  • 访问量
    997211