環境:RHEL 6.4 + Oracle 11.2.0.4
背景:備份恢復的測試庫在一次不徹底恢復後,沒有來及作有效的全備,又一次數據庫故障致使數據庫沒法正常open。
只能離線部分數據文件打開數據庫,其中包含undo表空間數據文件。
適用場景:無有效備份,能夠丟失數據,刪除回滾段狀態爲NEEDS RECOVERY的undo表空間。數據庫
1、數據庫當前狀況oracle
2、刪除損壞數據文件所在表空間測試
open resetlogs 打開數據庫報錯ORA-01152,ORA-01110,將報錯的數據文件offline,先打開數據庫。this
SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01152: file 3 was not restored from a sufficiently old backup ORA-01110: data file 3: '/u02/oracle/JINGYU/datafile/o1_mf_undotbs1_bwp19o3n_.dbf' SQL> alter database datafile 3 offline; Database altered. SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01152: file 4 was not restored from a sufficiently old backup ORA-01110: data file 4: '/u02/oracle/JINGYU/datafile/o1_mf_users_bwp1b12d_.dbf' SQL> alter database datafile 4 offline; Database altered. SQL> alter database open resetlogs; Database altered.
數據文件3,4OFFLINE。其中數據文件3是undo表空間的數據文件。spa
SQL> set linesize 150 SQL> col file_name for a56 SQL> select FILE_ID, FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 "MB", MAXBYTES/1024/1024/1024 "GB", AUTOEXTENSIBLE, STATUS, ONLINE_STATUS from dba_data_files; FILE_ID FILE_NAME TABLESPACE_NAME MB GB AUT STATUS ONLINE_ ---------- -------------------------------------------------------- ------------------------------ ---------- ---------- --- --------- ------- 1 /u02/oracle/JINGYU/datafile/o1_mf_system_bwp198r7_.dbf SYSTEM 700 31.9999847 YES AVAILABLE SYSTEM 2 /u02/oracle/JINGYU/datafile/o1_mf_sysaux_bwp19hl8_.dbf SYSAUX 600 31.9999847 YES AVAILABLE ONLINE 3 /u02/oracle/JINGYU/datafile/o1_mf_undotbs1_bwp19o3n_.dbf UNDOTBS1 AVAILABLE OFFLINE 4 /u02/oracle/JINGYU/datafile/o1_mf_users_bwp1b12d_.dbf USERS AVAILABLE OFFLINE 5 /u02/oracle/JINGYU/datafile/o1_mf_dbs_d_ji_bwp4r7cm_.dbf DBS_D_JINGYU 100 31.9999847 YES AVAILABLE ONLINE
SQL> alter database datafile 3 online; alter database datafile 3 online * ERROR at line 1: ORA-01190: control file or data file 3 is from before the last RESETLOGS ORA-01110: data file 3: '/u02/oracle/JINGYU/datafile/o1_mf_undotbs1_bwp19o3n_.dbf' SQL> alter database datafile 4 online; alter database datafile 4 online * ERROR at line 1: ORA-01190: control file or data file 4 is from before the last RESETLOGS ORA-01110: data file 4: '/u02/oracle/JINGYU/datafile/o1_mf_users_bwp1b12d_.dbf'
SQL> drop tablespace users including contents and datafiles; drop tablespace users including contents and datafiles * ERROR at line 1: ORA-12919: Can not drop the default permanent tablespace SQL> alter database default tablespace DBS_D_JINGYU; Database altered. SQL> drop tablespace users including contents and datafiles; Tablespace dropped. SQL> select FILE_ID, FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 "MB", MAXBYTES/1024/1024/1024 "GB", AUTOEXTENSIBLE, STATUS, ONLINE_STATUS from dba_data_files; FILE_ID FILE_NAME TABLESPACE_NAME MB GB AUT STATUS ONLINE_ ---------- -------------------------------------------------------- ------------------------------ ---------- ---------- --- --------- ------- 1 /u02/oracle/JINGYU/datafile/o1_mf_system_bwp198r7_.dbf SYSTEM 700 31.9999847 YES AVAILABLE SYSTEM 2 /u02/oracle/JINGYU/datafile/o1_mf_sysaux_bwp19hl8_.dbf SYSAUX 600 31.9999847 YES AVAILABLE ONLINE 3 /u02/oracle/JINGYU/datafile/o1_mf_undotbs1_bwp19o3n_.dbf UNDOTBS1 AVAILABLE OFFLINE 5 /u02/oracle/JINGYU/datafile/o1_mf_dbs_d_ji_bwp4r7cm_.dbf DBS_D_JINGYU 100 31.9999847 YES AVAILABLE ONLINE
嘗試刪除直接報錯ORA-01548.同時沒法正常關閉數據庫,沒法刪除活動的回滾段。具體以下:rest
SQL> create undo tablespace undotbs2; Tablespace created. SQL> show parameter undo NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS1 SQL> alter system set undo_tablespace='undotbs2'; System altered. SQL> show parameter undo NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string undotbs2
SQL> drop tablespace undotbs1 including contents and datafiles; drop tablespace undotbs1 including contents and datafiles * ERROR at line 1: ORA-01548: active rollback segment '_SYSSMU1_1401565358$' found, terminate dropping tablespace
SQL> select segment_id, segment_name,status,tablespace_name from dba_rollback_segs where status not in ('ONLINE','OFFLINE'); SEGMENT_ID SEGMENT_NAME STATUS TABLESPACE_NAME ---------- ------------------------------ ---------------- ------------------------------ 1 _SYSSMU1_1401565358$ NEEDS RECOVERY UNDOTBS1 2 _SYSSMU2_3125365238$ NEEDS RECOVERY UNDOTBS1 3 _SYSSMU3_1538315859$ NEEDS RECOVERY UNDOTBS1 4 _SYSSMU4_1640924022$ NEEDS RECOVERY UNDOTBS1 5 _SYSSMU5_2892967416$ NEEDS RECOVERY UNDOTBS1 6 _SYSSMU6_3276341082$ NEEDS RECOVERY UNDOTBS1 7 _SYSSMU7_387283697$ NEEDS RECOVERY UNDOTBS1 8 _SYSSMU8_2299136685$ NEEDS RECOVERY UNDOTBS1 9 _SYSSMU9_909303715$ NEEDS RECOVERY UNDOTBS1 10 _SYSSMU10_1695440836$ NEEDS RECOVERY UNDOTBS1 10 rows selected.
SQL> select file#,status from v$datafile; FILE# STATUS ---------- ------- 1 SYSTEM 2 ONLINE 3 OFFLINE 4 ONLINE 5 ONLINE SQL> shutdown immediate; ORA-00376: file 3 cannot be read at this time ORA-01110: data file 3: '/u02/oracle/JINGYU/datafile/o1_mf_undotbs1_bwp19o3n_.dbf'
目前數據庫無有效備份,須要把這些NEEDS RECOVERY的undo rollback segs刪除code
SQL> drop rollback segment "_SYSSMU10_1695440836$"; drop rollback segment "_SYSSMU10_1695440836$" * ERROR at line 1: ORA-30025: DROP segment '_SYSSMU10_1695440836$' (in undo tablespace) not allowed
其中_offline_rollback_segments
參數中的回滾段的名字在上面查到過。ci
*.undo_management='MANUAL' *._offline_rollback_segments=(_SYSSMU1_1401565358$,_SYSSMU2_3125365238$,_SYSSMU3_1538315859$,_SYSSMU4_1640924022$,_SYSSMU5_2892967416$,_SYSSMU6_3276341082$,_SYSSMU7_387283697$,_SYSSMU8_2299136685$,_SYSSMU9_909303715$,_SYSSMU10_1695440836$) #*.undo_tablespace='undotbs2'
SQL> startup pfile='/tmp/pfile.ora'; ORACLE instance started. Total System Global Area 1620115456 bytes Fixed Size 2253704 bytes Variable Size 989858936 bytes Database Buffers 620756992 bytes Redo Buffers 7245824 bytes Database mounted. Database opened.
SQL> drop rollback segment "_SYSSMU10_1695440836$"; Rollback segment dropped.
SQL> drop tablespace undotbs1 including contents and datafiles; Tablespace dropped.
SQL> select segment_id, segment_name,status,tablespace_name from dba_rollback_segs where status not in ('ONLINE','OFFLINE') 2 ; no rows selected SQL> select FILE_ID, FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 "MB", MAXBYTES/1024/1024/1024 "GB", AUTOEXTENSIBLE, STATUS, ONLINE_STATUS from dba_data_files; FILE_ID FILE_NAME TABLESPACE_NAME MB GB AUT STATUS ONLINE_ ---------- -------------------------------------------------------- ------------------------------ ---------- ---------- --- --------- ------- 1 /u02/oracle/JINGYU/datafile/o1_mf_system_bwp198r7_.dbf SYSTEM 700 31.9999847 YES AVAILABLE SYSTEM 2 /u02/oracle/JINGYU/datafile/o1_mf_sysaux_bwp19hl8_.dbf SYSAUX 600 31.9999847 YES AVAILABLE ONLINE 4 /u02/oracle/JINGYU/datafile/o1_mf_undotbs2_bwqxbnxo_.dbf UNDOTBS2 100 31.9999847 YES AVAILABLE ONLINE 5 /u02/oracle/JINGYU/datafile/o1_mf_dbs_d_ji_bwp4r7cm_.dbf DBS_D_JINGYU 100 31.9999847 YES AVAILABLE ONLINE 發現此時一切數據文件正常,此時已經能夠正常關庫 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down.
SQL> startup ORACLE instance started. Total System Global Area 1620115456 bytes Fixed Size 2253704 bytes Variable Size 989858936 bytes Database Buffers 620756992 bytes Redo Buffers 7245824 bytes Database mounted. Database opened. SQL> show parameter undo NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string undotbs2 SQL> set linesize 150 SQL> col file_name for a56 SQL> select FILE_ID, FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 "MB", MAXBYTES/1024/1024/1024 "GB", AUTOEXTENSIBLE, STATUS, ONLINE_STATUS from dba_data_files; FILE_ID FILE_NAME TABLESPACE_NAME MB GB AUT STATUS ONLINE_ ---------- -------------------------------------------------------- ------------------------------ ---------- ---------- --- --------- ------- 1 /u02/oracle/JINGYU/datafile/o1_mf_system_bwp198r7_.dbf SYSTEM 700 31.9999847 YES AVAILABLE SYSTEM 2 /u02/oracle/JINGYU/datafile/o1_mf_sysaux_bwp19hl8_.dbf SYSAUX 600 31.9999847 YES AVAILABLE ONLINE 4 /u02/oracle/JINGYU/datafile/o1_mf_undotbs2_bwqxbnxo_.dbf UNDOTBS2 100 31.9999847 YES AVAILABLE ONLINE 5 /u02/oracle/JINGYU/datafile/o1_mf_dbs_d_ji_bwp4r7cm_.dbf DBS_D_JINGYU 100 31.9999847 YES AVAILABLE ONLINE
最後,當即對當前恢復好的數據庫作一個全備吧。string