oracle實驗記錄 (恢復read only tablespace(1))

fufuh2o發表於2009-09-07

實驗記錄下幾種readonly tablespace恢復情況 及與controlfile情況

實驗環境

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

SQL> col  tablespace_name format a20
SQL> col  file_name format a50
SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE_NAME      FILE_NAME
-------------------- --------------------------------------------------
TEST                 D:\TEST.DBF
EXAMPLE              E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
                     F

USERS                E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX               E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1             E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
                     F

SYSTEM               E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
TESTTB               D:\TESTTB.DBF

已選擇7行。

 

情況一:備份時候表空間為 read only 恢復時候為read only
SQL> alter tablespace testtb read only;

表空間已更改。

SQL> alter database begin backup;

資料庫已更改。

SQL> @d:\backup\backupscript.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> alter database end backup;

資料庫已更改。

SQL> alter database end backup;

資料庫已更改。

SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> host del d:\testtb.dbf~~~~~~~~~~~模擬錯誤刪除

SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             327158660 bytes
Database Buffers          276824064 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
ORA-01157: 無法標識/鎖定資料檔案 7 - 請參閱 DBWR 跟蹤檔案
ORA-01110: 資料檔案 7: 'D:\TESTTB.DBF'


SQL> select file#,online_status from v$recover_file;

     FILE# ONLINE_
---------- -------
         7 ONLINE

 

SQL> host copy d:\backup\testtb.dbf d:\testtb.dbf
已複製         1 個檔案。
SQL> alter database open;

資料庫已更改。
~~~~~~~~~~~~~~~~~~~~這種情況直接 restore回備份就可以


第2種情況 備份時候 read only ,恢復時候已經變成read write

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 CURRENT
         3 INACTIVE

SQL> alter system switch logfile;

系統已更改。

SQL> alter system checkpoint;

系統已更改。

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 INACTIVE
         3 INACTIVE
SQL> select tablespace_name ,status from dba_tablespaces;

TABLESPACE_NAME      STATUS
-------------------- ---------
SYSTEM               ONLINE
UNDOTBS1             ONLINE
SYSAUX               ONLINE
TEMP                 ONLINE
USERS                ONLINE
EXAMPLE              ONLINE
TEST                 ONLINE
TESTTB               READ ONLY

已選擇8行。


SQL> alter tablespace testtb read write;

表空間已更改。

SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> host del d:\testtb.dbf

SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             331352964 bytes
Database Buffers          272629760 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
ORA-01157: 無法標識/鎖定資料檔案 7 - 請參閱 DBWR 跟蹤檔案
ORA-01110: 資料檔案 7: 'D:\TESTTB.DBF'


SQL> select file#,online_status from v$recover_file;

     FILE# ONLINE_
---------- -------
         7 ONLINE


第 1 行出現錯誤:
ORA-01157: 無法標識/鎖定資料檔案 7 - 請參閱 DBWR 跟蹤檔案
ORA-01110: 資料檔案 7: 'D:\TESTTB.DBF'


SQL> host copy d:\backup\testtb.dbf d:\testtb.dbf
已複製         1 個檔案。

SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-01113: 檔案 7 需要介質恢復~~~~~~~~~~~~~~~~~需要應用read only 到read write期間的redo
ORA-01110: 資料檔案 7: 'D:\TESTTB.DBF'


SQL> recover datafile 7;~~~~完全恢復資料檔案7
完成介質恢復。

SQL> alter database open;

資料庫已更改。

SQL> select tablespace_name ,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
UNDOTBS1                       ONLINE
SYSAUX                         ONLINE
TEMP                           ONLINE
USERS                          ONLINE
EXAMPLE                        ONLINE
TEST                           ONLINE
TESTTB                         ONLINE

已選擇8行。


第3種情況 備份時候是read write,但 recover時 是 read only


SQL> col file_name format a50
SQL> select file_id,file_name from dba_data_files;

   FILE_ID FILE_NAME
---------- --------------------------------------------------
         6 D:\TEST.DBF
         5 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
           F

         4 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
         3 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
         2 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
           F

         1 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
         7 D:\TESTTB.DBF

已選擇7行。

SQL> alter database begin backup~~~~~~~~~~~會產生incremental checkpoint
  2  ;

資料庫已更改。
SQL> @d:\backup\backupscript.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。~~~~~~~~~~~~~~~~~~~~~~備份時候 是read only

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> alter database end backup;

資料庫已更改。
SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1242366

SQL> alter tablespace testtb read only;

表空間已更改。

SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> host del d:\testtb.dbf

SQL> host copy d:\backup\testtb.dbf d:\testtb.dbf
已複製         1 個檔案。

SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             335547268 bytes
Database Buffers          268435456 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
ORA-01113: 檔案 7 需要介質恢復
ORA-01110: 資料檔案 7: 'D:\TESTTB.DBF'

SQL> recover datafile 7;~~~~~~~~~~~~~還是應用 redo 來恢復下就可以(備份後的所有redo應用,應用

到了readonly 時候)
完成介質恢復。
SQL> alter database open;

資料庫已更改。
SQL> select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
UNDOTBS1                       ONLINE
SYSAUX                         ONLINE
TEMP                           ONLINE
USERS                          ONLINE
EXAMPLE                        ONLINE
TEST                           ONLINE
TESTTB                         READ ONLY

已選擇8行。

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

相關文章