閃回資料庫測試之一 :關閉閃回的表空間是否可以開啟

趙宇發表於2008-04-22


用TEST表空間的EMP2表進行測試:

SQL>select table_name,tablespace_name from user_tables;

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
DEPT                           USERS
BONUS                          USERS
SALGRADE                       USERS
SYS_TEMP_FBT
EMP2                           TEST
EMP                            USERS

已選擇6行。

SQL> select count(*) from scott.emp2;

  COUNT(*)
----------
    458753

SQL> delete from scott.emp2 where rownum<20000;

已刪除19999行。

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     863079

SQL> commit;

提交完成。

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     863085

SQL>

SQL> select count(*) from scott.emp2;

  COUNT(*)
----------
    438754

SQL> insert into scott.emp2 select * from scott.emp;

已建立15行。

SQL> commit;

提交完成。


SQL> select * from v$tablespace;

       TS# NAME                 INC BIG FLA ENC
---------- -------------------- --- --- --- ---
         0 SYSTEM               YES NO  YES
         1 UNDOTBS1             YES NO  YES
         2 SYSAUX               YES NO  YES
         4 USERS                YES NO  YES
         3 TEMP                 NO  NO  YES
         6 EXAMPLE              YES NO  YES
         7 TEST                 YES NO  YES

已選擇7行。

SQL> alter tablespace test flashback off;

表空間已更改。

關閉這個表空間的閃回功能,在資料庫閃回時不做閃回.

SQL>  select * from v$tablespace;

       TS# NAME                 INC BIG FLA ENC
---------- -------------------- --- --- --- ---
         0 SYSTEM               YES NO  YES
         1 UNDOTBS1             YES NO  YES
         2 SYSAUX               YES NO  YES
         4 USERS                YES NO  YES
         3 TEMP                 NO  NO  YES
         6 EXAMPLE              YES NO  YES
         7 TEST                 YES NO  NO

已選擇7行。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL>
SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1298184 bytes
Variable Size             209715448 bytes
Database Buffers          398458880 bytes
Redo Buffers                2895872 bytes
資料庫裝載完畢。
SQL> select flashback_on from v$database;

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

SQL> flashback database to scn 863085;
flashback database to scn 863085
*
第 1 行出現錯誤:
ORA-38753: 無法閃回資料檔案 6; 沒有閃回日誌資料。
ORA-01110: 資料檔案 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DEVDB\TEST.DBF'

因為已經關閉了表空間的閃回功能,而不能對這個資料檔案進行閃回.

SQL> alter tablespace test offline;
alter tablespace test offline
*
第 1 行出現錯誤:
ORA-01109: 資料庫未開啟


SQL> alter database open;

資料庫已更改。

SQL> alter tablespace test offline;

表空間已更改。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。

SQL> flashback database to scn 863085;
flashback database to scn 863085
*
第 1 行出現錯誤:
ORA-38795: 警告: FLASHBACK 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01245: RESETLOGS 完成時離線檔案 6 將丟失
ORA-01110: 資料檔案 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DEVDB\TEST.DBF'

閃回資料庫已經完成,但資料庫開啟以後這個 datafile將丟失.

SQL> alter database open read only;
alter database open read only
*
第 1 行出現錯誤:
ORA-16004: 備份資料庫需要恢復
ORA-01245: RESETLOGS 完成時離線檔案 6 將丟失
ORA-01110: 資料檔案 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DEVDB\TEST.DBF'

SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項


SQL> recover datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DEVDB\TEST.DBF';
ORA-00283: 恢復會話因錯誤而取消
ORA-38798: 無法執行部分資料庫恢復
ORA-38797: 在閃回資料庫後, 需要執行完全資料庫恢復


SQL> recover database;
完成介質恢復。

實際這步相當於取消了閃回資料庫的操作,是否可以讓一個datafile保持當前資料,而其他的datafile回到以前的呢?

SQL> alter database open;

資料庫已更改。

SQL> select * from v$tablespace;

       TS# NAME                 INC BIG FLA ENC
---------- -------------------- --- --- --- ---
         0 SYSTEM               YES NO  YES
         1 UNDOTBS1             YES NO  YES
         2 SYSAUX               YES NO  YES
         4 USERS                YES NO  YES
         3 TEMP                 NO  NO  YES
         6 EXAMPLE              YES NO  YES
         7 TEST                 YES NO  NO

已選擇7行。

SQL> select count(*) from scott.emp2;
select count(*) from scott.emp2
                           *
第 1 行出現錯誤:
ORA-00376: 此時無法讀取檔案 6
ORA-01110: 資料檔案 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DEVDB\TEST.DBF'


SQL> alter tablespace test online;

表空間已更改。

SQL> select count(*) from scott.emp2;

  COUNT(*)
----------
    438769

可以看出,閃回以後,可以繼續做介質恢復以達到需要恢復的點,但是沒有辦法準確檢視資料,除非可以正常的read only,
如果我們不關閉那個datafile 的閃回是不是就可以看資料的狀態呢?

SQL> alter tablespace test flashback on;
alter tablespace test flashback on
*
第 1 行出現錯誤:
ORA-01126: 資料庫必須已裝載到此例項並且不在任何例項中開啟


SQL>
SQL> select * from v$tablespace;

       TS# NAME                 INC BIG FLA ENC
---------- -------------------- --- --- --- ---
         0 SYSTEM               YES NO  YES
         1 UNDOTBS1             YES NO  YES
         2 SYSAUX               YES NO  YES
         4 USERS                YES NO  YES
         3 TEMP                 NO  NO  YES
         6 EXAMPLE              YES NO  YES
         7 TEST                 YES NO  NO

已選擇7行。

SQL> select * from v$tablespace;

       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
         1 UNDOTBS1                       YES NO  YES
         2 SYSAUX                         YES NO  YES
         4 USERS                          YES NO  YES
         3 TEMP                           NO  NO  YES
         6 EXAMPLE                        YES NO  YES
         7 TEST                           YES NO  NO

已選擇7行。

SQL> alter tablespace users flashback off;

表空間已更改。

SQL> alter tablespace users flashback on;
alter tablespace users flashback on
*
第 1 行出現錯誤:
ORA-01126: 資料庫必須已裝載到此例項並且不在任何例項中開啟

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1298184 bytes
Variable Size             209715448 bytes
Database Buffers          398458880 bytes
Redo Buffers                2895872 bytes
資料庫裝載完畢。
SQL> select * from v$tablespace;

       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
         1 UNDOTBS1                       YES NO  YES
         2 SYSAUX                         YES NO  YES
         4 USERS                          YES NO  NO
         3 TEMP                           NO  NO  YES
         6 EXAMPLE                        YES NO  YES
         7 TEST                           YES NO  NO

已選擇7行。

SQL> alter database flashback off;

資料庫已更改。

這時刪除了之前所有的閃回日誌.

SQL> select * from v$tablespace;

       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
         1 UNDOTBS1                       YES NO  YES
         2 SYSAUX                         YES NO  YES
         4 USERS                          YES NO  NO
         3 TEMP                           NO  NO  YES
         6 EXAMPLE                        YES NO  YES
         7 TEST                           YES NO  NO

已選擇7行。


SQL> alter database flashback on;

資料庫已更改。

SQL> select * from v$tablespace;

       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
         1 UNDOTBS1                       YES NO  YES
         2 SYSAUX                         YES NO  YES
         4 USERS                          YES NO  NO
         3 TEMP                           NO  NO  YES
         6 EXAMPLE                        YES NO  YES
         7 TEST                           YES NO  NO

已選擇7行。

SQL> alter tablespace test flashback on;

表空間已更改。

SQL> alter tablespace users flashback on;

表空間已更改。

SQL>

 

SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1298184 bytes
Variable Size             209715448 bytes
Database Buffers          398458880 bytes
Redo Buffers                2895872 bytes
資料庫裝載完畢。
SQL>
SQL>
SQL>  flashback database to scn 863085;
 flashback database to scn 863085
*
第 1 行出現錯誤:
ORA-38753: 無法閃回資料檔案 4; 沒有閃回日誌資料。
ORA-01110: 資料檔案 4: '+DISK_GROUP1/devdb/datafile/users.259.651578003'

因為中間修改過閃回屬性,閃回日誌已經刪除,已經不能閃回到之前.

總結:從測試看,關閉閃回的表空間,在整個資料庫閃回以後,不能進行開啟,只能恢復整個資料庫才能開啟,那之前已經閃回的資料又恢復到當前.而且閃回之後,如果有資料檔案需要恢復,是不能read only的

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/175005/viewspace-246428/,如需轉載,請註明出處,否則將追究法律責任。

相關文章