2006年08月18日

沒有備份但遺失了非system的datafile補救方法(noarchive mode)

os:win2000
oracle:10.0.2

1、測試前的環境檢查
SQL> archive log list;
資料庫日誌模式             無儲存模式
可自動儲存            關閉
儲存目的地           D:\oracle\product\10.2.0\db_1\RDBMS
最早的線上日誌順序     1
目前日誌順序          2
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- -------------------
         1          1          2   52428800          1 NO  CURRENT
       543297 2006-08-18 10:53:59

         2          1          0   52428800          1 YES UNUSED
            0

         3          1          1   52428800          1 NO  INACTIVE
       534907 2006-08-18 10:53:02


SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\BINHU\SYSTEM01.DBF
D:\ORACLE\PRODUCT\10.2.0\BINHU\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\BINHU\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\BINHU\USERS01.DBF


2、建立測試的tablespace和增加資料進去,最後關畢db
SQL> create tablespace test datafile 'd:/oracle\product\10.2.0\binhu\test.dbf' size 10M;

已建立表格空間.

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\BINHU\SYSTEM01.DBF
D:\ORACLE\PRODUCT\10.2.0\BINHU\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\BINHU\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\BINHU\USERS01.DBF
D:\ORACLE\PRODUCT\10.2.0\BINHU\TEST.DBF

SQL> create table test (id int) tablespace test;

已建立表格.

SQL> insert into test values (1);

已建立 1 個資料列.

SQL> commit;

確認完成.

SQL> shutdown immediate;
資料庫關閉.
資料庫已卸載.
已關閉 ORACLE 執行處理.

3、刪除剛才建立的datafile,然後開起db
SQL> startup
ORACLE 執行處理已啟動.

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              71304548 bytes
Database Buffers           92274688 bytes
Redo Buffers                2945024 bytes
資料庫已掛載.
ORA-01157: 無法識別/鎖定資料檔 5 - 請參閱 DBWR 追蹤檔
ORA-01110: 資料檔 5: 'D:\ORACLE\PRODUCT\10.2.0\BINHU\TEST.DBF'


SQL> select status from v$instance;

STATUS
------------
MOUNTED


4、查看相關的訊習
SQL> select file#,error from v$recover_file;

     FILE#    ERROR    
----------   -----------
     5              FILE NOT FOUND                                                             0

5、建立刪除的datafile
SQL> alter database create datafile 'd:/oracle/product/10.2.0/binhu/test.dbf';
已更改資料庫.

6、再次查看訊習 (檔案已存在了)
SQL> select file#,error  from v$recover_file;

     FILE#   ERROR  
----------   ------------------
       5 

7、進行recover了
SQL> recover datafile 5;
媒體恢復執行完成.
SQL> alter database open;

已更改資料庫.

8、查看是否真的ok了
SQL> select * from test;

        ID
----------
         1

以上是redo log file都沒有switch過,不過當redo log file被switch一圈後的情況,將會無法進行還原了,所以要求資料不遺失的話最好是在archive mode情況下才行。然而現在因為無法開database了,所以要先把有問題的datafile offline,才能開的起,這部份就如有人實做有問題的話,我們再來討論吧~~^o^

附上如何drop datafile的說明 link

Posted by my_work at 樂多Roodo! │14:14 │回應(0)引用(0)DB
樂多分類:網路/3C 共同主題:Oracle 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/2034660