oracle 復原段資料檔案損壞修複__oracle

來源:互聯網
上載者:User

以下內容轉自:http://lovexueer.itpub.net/post/5072/49241

12月26日(星期一)

 

測試環境:

OS :XP

DB:9201

 

本測試測試了如下情況:

a.正常關閉資料庫,資料庫(未)歸檔,復原段資料表空間丟失,成功恢複

b.非正常關閉資料庫,資料庫非歸檔,有活動事務,復原段資料表空間丟失,成功恢複

c.非正常關閉資料庫,資料庫歸檔,有活動事務,復原段資料表空間丟失,恢複失敗,目前不知原因

a.正常關閉資料庫, 資料庫()歸檔

如shutdown normal,shutdown immediate

1.正常關閉資料庫,類比復原段資料表空間丟失

 

SQL> conn sys/test@jumper as sysdba

已串連。

SQL> shutdown immediate;

資料庫已經關閉。

已經卸載資料庫。

ORACLE 常式已經關閉。

SQL> host del D:oracleoradatajumperUNDOTBS01.DBF

 

SQL> startup

ORACLE 常式已經啟動。

 

Total System Global Area 126950220 bytes

Fixed Size 453452 bytes

Variable Size 109051904 bytes

Database Buffers 16777216 bytes

Redo Buffers 667648 bytes

資料庫裝載完畢。

ORA-01157: 無法標識/鎖定資料檔案 2 - 請參閱 DBWR 追蹤檔案

ORA-01110: 資料檔案 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'

2.確認復原段資料表空間丟失

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

 

FILE# ONLINE_ status error

---------- -------

2 ONLINE FILE NOT FOUND

SQL> select name from v$datafile where file#=2;

 

NAME

----------------------------------------------------

 

D:ORACLEORADATAJUMPERUNDOTBS01.DBF

3.開啟資料庫

 

SQL> alter database datafile 'D:ORACLEORADATAJUMPERUNDOTBS01.dbf' offline drop;

 

資料庫已更改。

 

SQL> alter database open;

 

資料庫已更改。

 

4.建立新的復原段資料表空間

SQL> select segment_name ,tablespace_name,status from dba_rollback_segs;

 

SEGMENT_NAME TABLESPACE_NAME STATUS

------------------------------ ------------------------------ ----------------

SYSTEM SYSTEM ONLINE

_SYSSMU1$ UNDOTBS1 OFFLINE

_SYSSMU2$ UNDOTBS1 OFFLINE

_SYSSMU3$ UNDOTBS1 OFFLINE

_SYSSMU4$ UNDOTBS1 OFFLINE

_SYSSMU5$ UNDOTBS1 OFFLINE

_SYSSMU6$ UNDOTBS1 OFFLINE

_SYSSMU7$ UNDOTBS1 OFFLINE

_SYSSMU8$ UNDOTBS1 OFFLINE

_SYSSMU9$ UNDOTBS1 OFFLINE

_SYSSMU10$ UNDOTBS1 OFFLINE

 

已選擇11行。

 

SQL> create undo tablespace undots datafile 'undotbs02.dbf' size 100m autoextend on next 10m maxsize 200m

2 ;

 

資料表空間已建立。

 

SQL> alter system set undo_tablespace=undots;

 

系統已更改。

SQL> drop tablespace UNDOTBS1 including contents and datafiles;

 

資料表空間已丟棄。

 

SQL> select segment_name ,tablespace_name,status from dba_rollback_segs;

 

SEGMENT_NAME TABLESPACE_NAME STATUS

------------------------------ ------------------------------ ---------------

SYSTEM SYSTEM ONLINE

_SYSSMU11$ UNDOTS ONLINE

_SYSSMU12$ UNDOTS ONLINE

_SYSSMU13$ UNDOTS ONLINE

_SYSSMU14$ UNDOTS ONLINE

_SYSSMU15$ UNDOTS ONLINE

_SYSSMU16$ UNDOTS ONLINE

_SYSSMU17$ UNDOTS ONLINE

_SYSSMU18$ UNDOTS ONLINE

_SYSSMU19$ UNDOTS ONLINE

_SYSSMU20$ UNDOTS ONLINE

 

已選擇11行。

 

5.重新啟動

SQL> startup force;

ORACLE 常式已經啟動。

 

Total System Global Area 126950220 bytes

Fixed Size 453452 bytes

Variable Size 109051904 bytes

Database Buffers 16777216 bytes

Redo Buffers 667648 bytes

資料庫裝載完畢。

資料庫已經開啟。

SQL> select segment_name ,tablespace_name,status from dba_rollback_segs;

 

SEGMENT_NAME TABLESPACE_NAME STATUS

------------------------------ ------------------------------ ----------------

SYSTEM SYSTEM ONLINE

_SYSSMU11$ UNDOTS ONLINE

_SYSSMU12$ UNDOTS ONLINE

_SYSSMU13$ UNDOTS ONLINE

_SYSSMU14$ UNDOTS ONLINE

_SYSSMU15$ UNDOTS ONLINE

_SYSSMU16$ UNDOTS ONLINE

_SYSSMU17$ UNDOTS ONLINE

_SYSSMU18$ UNDOTS ONLINE

_SYSSMU19$ UNDOTS ONLINE

_SYSSMU20$ UNDOTS ONLINE

 

已選擇11行。

 

SQL> show parameter undo

 

NAME TYPE VALUE

------------------------------------ ----------- -----------------------------

undo_management string AUTO

undo_retention integer 10800

undo_suppress_errors boolean FALSE

undo_tablespace string UNDOTS

 

 

 

通過上述方法,(未)歸檔都可以正常開啟資料庫

 

 

b.非正常關閉資料庫(資料庫未歸檔)

shutdown abortcrash

 

1.產生測試資料

SQL> conn test/test@jumper

已串連。

SQL> truncate table test;

 

表已截掉。

 

SQL> insert into test values(1);

 

已建立 1 行。

 

2.非正常關閉資料庫,刪除復原段資料表空間

 

再開啟一視窗

SQL> shutdown abort

ORACLE 常式已經關閉。

SQL> host del D:oracleoradatajumperUNDOTBS01.DBF

3.建立啟動參數檔案

SQL> startup

ORACLE 常式已經啟動。

 

Total System Global Area 135338868 bytes

Fixed Size 453492 bytes

Variable Size 109051904 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

資料庫裝載完畢。

ORA-01157: 無法標識/鎖定資料檔案 2 - 請參閱 DBWR 追蹤檔案

ORA-01110: 資料檔案 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'

SQL> create pfile from spfile;

 

檔案已建立。

 

SQL> shutdown immediate

ORA-01109: 資料庫未開啟

 

 

已經卸載資料庫。

ORACLE 常式已經關閉。

4.修改啟動參數檔案D:oracleora92databaseinitjumper.oramoun資料庫

原來參數:

undo_management='AUTO'

undo_tablespace='UNDOTBS1'

修改為:

undo_management='manual'

undo_tablespace='system'

_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

 

5.SQL> startup mount pfile=D:oracleora92databaseinitjumper.ora

ORACLE 常式已經啟動。

 

Total System Global Area 135338868 bytes

Fixed Size 453492 bytes

Variable Size 109051904 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

資料庫裝載完畢。

5.確認undo資料表空間丟失

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

 

FILE# ERROR

---------- ---------------------------------------

2 FILE NOT FOUND

SQL> select name from v$datafile where file#=2;

 

NAME

------------------------------------------------------------

 

D:ORACLEORADATAJUMPERUNDOTBS01.DBF

6.開啟資料庫

SQL> alter database datafile 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF' offline drop;

 

資料庫已更改。

 

SQL> recover database;

完成介質恢複。

 

SQL> alter database open;

資料庫已更改。

SQL> conn test/test@jumper;

已串連。

SQL> select *from test;

 

ID

----------

1

7.建立新的ROLLBACK 資料表空間

SQL> select * from v$rollname;

 

USN NAME

---------- ------------------------------

0 SYSTEM

 

SQL> select segment_name,tablespace_name,status from dba_rollback_segs;

 

SEGMENT_NAME TABLESPACE_NAME STATUS

------------------------------ ------------------------------ ----------------

SYSTEM SYSTEM ONLINE

_SYSSMU1$ UNDOTBS1 NEEDS RECOVERY

_SYSSMU2$ UNDOTBS1 NEEDS RECOVERY

_SYSSMU3$ UNDOTBS1 NEEDS RECOVERY

_SYSSMU4$ UNDOTBS1 NEEDS RECOVERY

_SYSSMU5$ UNDOTBS1 NEEDS RECOVERY

_SYSSMU6$ UNDOTBS1 NEEDS RECOVERY

_SYSSMU7$ UNDOTBS1 NEEDS RECOVERY

_SYSSMU8$ UNDOTBS1 NEEDS RECOVERY

_SYSSMU9$ UNDOTBS1 NEEDS RECOVERY

_SYSSMU10$ UNDOTBS1 NEEDS RECOVERY

 

已選擇11行。

 

SQL> drop rollback segment "_SYSSMU1$";

 

回退段已刪除。

 

SQL> drop rollback segment "_SYSSMU2$";

 

回退段已刪除。

 

SQL> drop rollback segment "_SYSSMU3$";

 

回退段已刪除。

 

SQL> drop rollback segment "_SYSSMU4$";

 

回退段已刪除。

 

SQL> drop rollback segment "_SYSSMU5$";

 

回退段已刪除。

 

SQL> drop rollback segment "_SYSSMU6$";

 

回退段已刪除。

 

SQL> drop rollback segment "_SYSSMU7$";

 

回退段已刪除。

 

SQL> drop rollback segment "_SYSSMU8$";

 

回退段已刪除。

 

SQL> drop rollback segment "_SYSSMU9$";

 

回退段已刪除。

 

SQL> drop rollback segment "_SYSSMU10$";

 

回退段已刪除。

 

SQL> drop tablespace UNDOTBS1 including contents and datafiles;

 

資料表空間已丟棄。

 

SQL> select segment_name,tablespace_name ,status from dba_rollback_segs;

 

SEGMENT_NAME TABLESPACE_NAME STATUS

------------------------------ ------------------------------ -------------

SYSTEM SYSTEM ONLINE

 

SQL> create undo tablespace undots datafile 'D:oracleoradatajumperundotbs02.dbf' size 10m ;

 

資料表空間已建立。

 

SQL> select segment_name,tablespace_name ,status from dba_rollback_segs;

 

SEGMENT_NAME TABLESPACE_NAME S

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.