OFFLINE和DROP資料檔案的理解

lusklusklusk發表於2016-05-06

Offline僅是離線操作,並不涉及刪除,就算是offline for drop\offline drop也僅僅是離線,和alter database datafile ‘XX’ offline一起

表空間離線語法是alter tablespace XX offline

 

Drop才是刪除操作,和alter tablespace XX drop datafile ‘XX’一起

表空間刪除語法是drop tableapce XX INCLUDING CONTENTS AND DATAFILES

 

 

 

將表空間置為offline,可能的原因包括維護、備份以及恢復等目的

表空間處於offline狀態,那麼Oracle不會允許任何對該表空間中物件的SQL執行。

表空間置為offline時仍處於活動狀態的語句在交易級別並不會受影響。

 

Offline後檔案的scn會停止,這樣就會導致offline檔案的scn慢慢的越來越小於dbscn,這樣導致只要在offline檔案scndbscn期間的歸檔日誌備份包永遠不會顯示obsolete

offline的資料檔案在openrecover/backup的時候不會被check

但是obsolete的時候要被check,誰知道哪天你是不是要online這個datafile

 

 

 

 

一些實驗現象

1.表空間有一個資料檔案,表建立到表空間上,再drop刪除資料檔案,看錶還存在嗎(情況是表空間有一個資料檔案已經滿了,新建一個資料檔案XX,再往新資料檔案XX上建表,再drop資料檔案XX則表不存在了),當然如果一個表的資料釋出到多個資料檔案上則某個資料檔案被刪除了,則select表的某行剛好在這個資料檔案上會報錯,如果不在這個資料檔案上則不會報錯

不存在了,提示ORA-00376: 此時無法讀取檔案 17

 

2.表空間有一個資料檔案,表建立到表空間上,資料檔案offline,看錶還存在嗎

不存在了,提示ORA-00376: 此時無法讀取檔案 17

 

3.表空間有一個資料檔案,表建立到表空間上,表空間offline,看錶還存在嗎

不存在了,提示ORA-00376: 此時無法讀取檔案 17

 

 

A.表空間有一個資料檔案,drop刪除資料檔案,表建立到表空間上,看錶能建立嗎(情況是表空間有一個資料檔案已經滿了,新建一個資料檔案XX,再往新資料檔案上建表並插入資料使它非空,再drop資料檔案XX,再建表,如果第一個資料檔案自動增長方式則這樣的實驗下表能建立)

不能,提示ORA-01658: 無法為表空間 TE123 中的段建立 INITIAL

 

B.表空間有一個資料檔案,資料檔案offline,表建立到表空間上,看錶能建立嗎

不能,提示ORA-01658: 無法為表空間 TE123 中的段建立 INITIAL

 

C.表空間有一個資料檔案,表空間offline,表建立到表空間上,看錶能建立嗎

不能,提示ORA-01542: 表空間 'TE123' 離線, 無法在其中分配空間

 

 

 

一.DB正常執行的過程中alter database datafile ‘XX’ offlinedba_data_files. ONLINE_STATUS對應的資料檔案顯示為RECOVERv$datafile_header.STATUS顯示為offline,如果再把資料檔案在OS上移動、改名、刪除則v$datafile_header.ERROR顯示為FILE NOT FOUND重啟後依舊

 

二.DB正常執行的過程中alter tablespace offlinedba_data_files. ONLINE_STATUS表空間對應的資料檔案顯示為offlinev$datafile_header.STATUS顯示為offline,如果再把資料檔案在OS上移動、改名、刪除則v$datafile_header.ERROR顯示為FILE NOT FOUND,重啟後依舊

 

三.DB正常執行的過程把資料檔案在OS上移動、改名、刪除短期內正常各種檢視顯示也正常如(v$datafile_header. ERROR)再shutdown abortshutdown immediate會報錯),再startup會報錯自動到mount狀態,此時dba_data_files檢視不可用,v$datafile_header.STATUS顯示為online, v$datafile_header. ERROR顯示為FILE NOT FOUND, alter database datafile ‘XX’ offline後再alter database open,發現dba_data_files.ONLINE_STATUS表空間對應的資料檔案顯示為RECOVERv$datafile_header.STATUS顯示為offlinev$datafile_header.ERROR顯示為FILE NOT FOUND,重啟後依舊

 

綜合上面的實驗情況可以瞭解到http://www.itpub.net/thread-2057910-1-1.html32號檔案dba_data_files.ONLINE_STATUS顯示為offline肯定是直接把SOE表空間offline的結果。

 

 

 

 

 

1. 手工誤刪除資料檔案,看能透過offlineopen
可以的,直接
startup會報錯只能到mount狀態,這是可以透過alter database datafile ‘XX’ offlinealter database open

 

2.  DB正常執行過程中對資料檔案進行offline後再OS上進行刪除,重啟能正常open
可以的

 

3. Offlineoffline drop區別(offline drop offline for drop的簡寫)
歸檔模式下,
offline offline drop選項的作用相同。

非歸檔模式下,不允許直接 offline 資料檔案,必須增加drop選項。

 

     4. 資料檔案不能被刪除(此處刪除是代表檔案從磁碟上並資料字典中刪除)的三種情況(實驗過在read only表空間的情況可以刪除)
  採用的方式是:
alter tablesapce XX drop datafile 'XX'
alter
database  datafile 'XX'  offline drop以下三種情況都可以執行離線。
offline
的資料檔案是不允許被刪除的
所屬表空間的第一個
file是不允許被刪除的
非空檔案是不允許被刪除的


      5.
alter tablesapce tablespace_name drop datafile 'datafile_name'
該語句會刪除控制檔案和磁碟上的檔案,刪除之後的原資料檔案序列號可以重用。
dba_data_files檢視中沒有該檔案資訊了

     6.  alter database datafile 'file_name' offline drop

該語句不會刪除資料檔案,只是將資料檔案的狀態更改為recover offline drop命令相當於把一個資料檔案至於離線狀態,並且需要恢復,並非刪除資料檔案。 資料檔案的相關資訊還會存在資料字典dba_data_files和控制檔案中












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

相關文章