首页 > 应用开发 > IT综合 > 10G FLASHBACK
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博客 ” ,链接:https://blog.itpub.net/9925929/viewspace-977515/ ,如需转载,请注明出处,否则将追究法律责任。