利用BBED恢复非归档模式下OFFLINE数据文件(一)

2015-07-24 11:04:46 · 作者: · 浏览: 20
今天来模拟一个非归档模式下恢复OFFLINE数据文件的场景,主要有2种情况:

一种是在线日志没有被覆盖,另一种是在线日志被覆盖。

第一种情况比较简单,数据库自身就能处理,而第二种情况稍显复杂,但也并不难,下面开始整个实验过程:

一、在线日志没有被覆盖的场景

--切换数据库到非归档模式
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 6
Next log sequence to archive 8
Current log sequence 8
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 125830736 bytes
Database Buffers 155189248 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> alter database noarchivelog;

Database altered.

SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 6
Current log sequence 8
SQL>

--创建测试环境(创建表空间,创建用户,创建测试表,插入数据)
SQL> create tablespace zlm_test datafile '/u01/app/oracle/oradata/ora10g/zlm_test01.dbf' size 50M;

Tablespace created.

SQL> create user zlm1 identified by oracle;

User created.

SQL> grant connect,resource to zlm1;

Grant succeeded.

SQL> alter user zlm1 default tablespace zlm_test;

User altered.

SQL> conn zlm1/oracle
Connected.
SQL> create table offline_test(id int,name varchar2(10));

Table created.

SQL> insert into offline_test values(1,'aaron8219');


1 row created.


SQL> commit;


Commit complete.


--查看数据文件检查点SCN
SQL> set line 130
SQL> col name for a45
SQL> select file#,name,status,checkpoint_change# from v$datafile order by 1;


FILE# NAME STATUS CHECKPOINT_CHANGE#
---------- --------------------------------------------- ------- ------------------
1 /u01/app/oracle/oradata/ora10g/system01.dbfSYSTEM 551520
2 /u01/app/oracle/oradata/ora10g/undotbs01.dbf ONLINE 551520
3 /u01/app/oracle/oradata/ora10g/sysaux01.dbfONLINE 551520
4 /u01/app/oracle/oradata/ora10g/users01.dbfONLINE 551520
5 /u01/app/oracle/oradata/ora10g/example01.dbf ONLINE 551520
6 /u01/app/oracle/oradata/ora10g/zlm01.dbfONLINE 551520
7 /u01/app/oracle/oradata/ora10g/zlm02.dbfONLINE 551520
8 /u01/app/oracle/oradata/ora10g/zlm_test01.dbfONLINE 551753
?

此时8号数据文件的checkpoint SCN是551753,比其他文件都biger,或者说newer

尽管刚才插入一行数据后已经commit过了,但db buffer cache并不一定会立即刷到磁盘文件,需要手动执行检查点

SQL> alter system checkpoint;


System altered.


SQL> select file#,name,status,checkpoint_change# from v$datafile order by 1;


FILE# NAME STATUS CHECKPOINT_CHANGE#
---------- --------------------------------------------- ------- ------------------
1 /u01/app/oracle/oradata/ora10g/system01.dbfSYSTEM 552134
2 /u01/app/oracle/oradata/ora10g/undotbs01.dbf ONLINE 552134
3 /u01/app/oracle/oradata/ora10g/sysaux01.dbfONLINE 552134
4 /u01/app/oracle/oradata/ora10g/users01.dbfONLINE 552134
5 /u01/app/oracle/oradata/ora10g/example01.dbf ONLINE 552134
6 /u01/app/oracle/oradata/ora10g/zlm01.dbfONLINE 552134
7 /u01/app/oracle/oradata/ora10g/zlm02.dbfONLINE 552134
8 /u01/app/oracle/oradata/ora10g/zlm_test01.dbf ONLINE 552134
--查看数据文件头的检查点SCN
SQL> select file#,name,status,checkpoint_change# from v$datafile_header order by 1;


FILE# NAME STATUS CHECKPOINT_CHANGE#
---------- --------------------------------------------- ------- ------------------
1 /u01/app/oracle/oradata/ora10g/system01.dbfONLINE 5521