oracle 10g flashback database

oracle 10g flashback database[@more@]


flashback database是10g推出的一个重大改进,它可以让我们不用做不完全恢复的情况下把数据库

"回滚"到过去的某一个时间点。
你可以在创建数据库时设定flashback database,如果当时没有设置,可以按下面的步骤进行设置

1、设置flashback
--首先要把数据库置于归档模式

在pfile中增加以下参数,重启数据库
log_archive_max_processes=3
log_archive_dest_1='location=D:oracleproduct10.2.0oradataorclarchived'
log_archive_format="%T%S%r.ARC"

SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup mount pfile='D:oracleproduct10.2.0adminorclpfileinit.ora';
ORACLE 例程已经启动。

Total System Global Area 612368384 bytes
Fixed Size 1292036 bytes
Variable Size 171968764 bytes
Database Buffers 432013312 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。

--打开归档
SQL> alter database archivelog;

数据库已更改。

--打开数据库的闪回功能

SQL> alter database flashback on;

数据库已更改。

SQL> alter database open;

数据库已更改。

--重建SPFILE
SQL> create spfile from pfile='D:oracleproduct10.2.0adminorclpfileinit.ora';

文件已创建。

SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 D:oracleproduct10.2.0oradataorclarchived
最早的联机日志序列 28
下一个存档日志序列 30
当前日志序列 30

--设置闪回区大小
SQL> alter system set db_recovery_file_dest_size=2g;

系统已更改。

--最后验证
SQL> select FLASHBACK_ON from v$database;

FLASHBACK_ON
------------------
YES

2、测试flashback

--首先做一些破坏性工作

SQL> drop user scott cascade;

用户已删除。

--通过V$FLASHBACK_DATABASE_LOG得到我们可以闪回的最早时间和最小scn


SQL> alter session set nls_date_format='MM-DD-YYYY HH24:MI:SS';

会话已更改。

SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
1634603 01-07-2008 12:04:10

--重启数据库到mount
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area 612368384 bytes
Fixed Size 1292036 bytes
Variable Size 180357372 bytes
Database Buffers 423624704 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。


--根据scn闪回数据库
SQL> flashback database to scn 1634603;

闪回完成。

--对数据库执行闪回操作后必须用resetlogs方式打开
SQL> alter database open resetlogs;

数据库已更改。

--检验数据
SQL> select username from dba_users where username='SCOTT';

USERNAME
------------------------------
SCOTT


--再次查看可以闪回的最早时间和最小scn

SQL> alter session set nls_date_format='MM-DD-YYYY HH24:MI:SS';

会话已更改。

SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
1634603 01-07-2008 12:04:10

发现结果与open resetlogs是一样的,说明可以闪回到什么时间点与open resetlogs无关,实际上

,它是由db_flashback_retention_target参数决定的。

请使用浏览器的分享功能分享到微信等