Oracle undo 表空間資料檔案丟失強制啟動資料庫(沒有未提交的事務)

東北胖子發表於2019-01-13

環境:RHEL 6.5   Oracle 11.2.0.3


如果有RMAN備份的話,如果恢復資料檔案就可以完成,本次我們測試在沒有備份的情況下如何拉起資料庫


  • 重新命名UNDO表空間的資料檔案

[oracle@test-db orcl]$ mv undotbs02.dbf undotbs02.dbf_bak
  • 啟動資料庫

SYS@orcl> startup
ORACLE instance started.
Total System Global Area  784998400 bytes
Fixed Size                  2232472 bytes
Variable Size             591400808 bytes
Database Buffers          188743680 bytes
Redo Buffers                2621440 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oracle/oradata/orcl_data/orcl/undotbs02.dbf'


  • 根據提示資訊資料 7  有問題,檢視alert.log檔案


ALTER DATABASE OPEN
Errors in file /u01/app/oracle/diag/rdbms/primary_orcl/orcl/trace/orcl_dbw0_2532.trc:
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oracle/oradata/orcl_data/orcl/undotbs02.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Block change tracking file is current.
Errors in file /u01/app/oracle/diag/rdbms/primary_orcl/orcl/trace/orcl_ora_2621.trc:
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oracle/oradata/orcl_data/orcl/undotbs02.dbf'
ORA-1157 signalled during: ALTER DATABASE OPEN...
Sun Jan 13 15:32:08 2019
Checker run found 1 new persistent data failures


  • 日誌檔案中也顯示 7號資料檔案找不到了


###########################################################################

開始強制拉起資料庫


  • 啟動資料庫至MOUNT狀態

SYS@orcl> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SYS@orcl> startup mount;
ORACLE instance started.
Total System Global Area  784998400 bytes
Fixed Size                  2232472 bytes
Variable Size             591400808 bytes
Database Buffers          188743680 bytes
Redo Buffers                2621440 bytes
Database mounted.


  • 將 檔案號為 7 的資料庫檔案offline 並 開啟資料庫

SYS@orcl> alter database datafile 7 offline drop;
Database altered.
SYS@orcl> alter database open;
Database altered.


  • 建立新的UNDO表空間,並設定為資料庫預設表空間

SYS@orcl> create undo tablespace undotbs1 datafile '/u01/app/oracle/oradata/orcl_data/orcl/undotbs1.dbf' size 500m ;
Tablespace created.
SYS@orcl> show parameter undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS2
SYS@orcl> alter system set undo_tablespace='UNDOTBS1' scope=spfile;
System altered.


  • 重啟資料庫


SYS@orcl> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@orcl> startup
ORACLE instance started.
Total System Global Area  784998400 bytes
Fixed Size                  2232472 bytes
Variable Size             591400808 bytes
Database Buffers          188743680 bytes
Redo Buffers                2621440 bytes
Database mounted.
Database opened.
SYS@orcl> show parameter undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1
SYS@orcl>


總結:

這是最簡單的一種情況下恢復undo表空間丟失的情況,也是很容易的。

 直接  offile 相關資料檔案,開啟資料庫重新建立UNDO表空間並預設為資料庫預設表空間

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

相關文章