概念 | 表空間和數據文件 管理表空間 ? ●表空間的空間管理是Oracle描述表空間中空間分配狀況的方法,從Oracle8i開始,空間管理方法有以下兩種:數據字典管理表空間: ? ? ? ? ?數據字典和本地管理表空間 ? 移植一個DMT表空間 | ||||||||||||
表空間的狀態 | ●正常的表空間運行在Online狀態下,Offline狀?態的表空間是不可訪問的,意味著表空間上所有的數據都不能被訪問●表空間在Offline的時候會帶來檢查點事件 ●大多數表空間是可以Ofline的,?但是也有些表空間不能被離線: 一系統表空間 :?-存在激活的回滾段的表空間-默認的臨時表空間●Offline表空間的語句: ALTER?TABLESPACE?users?OFFLINE;●Online表空間的語句: ALTER?TABLESPACE?users?ONLINE; | ||||||||||||
? |
| ||||||||||||
調整表空間 ? ? ? ? ? ? ? ? | ? 增加文件大小 重置數據文件的大小 刪除數據文件 數據文件自動擴展 ? ? | ||||||||||||
移動數據文件 | 將表空間離線 SQL> alter tablespace users offline; 在操作系統下將數據文件移到另一位置 SQL> host mv /u01/app/oracle/oradata/ocp/users01.dbf /u02/ ? SQL> host ls /u02/ 修改控制文件的記錄指針? SQL> alter database rename file ?? '/u01/app/oracle/oradata/ocp/users01.dbf' to '/u02/users01.dbf'; ? 或者 SQL> alter tablespace users rename datafile ? '/u01/app/oracle/oradata/ocp/users01.dbf' to '/u02/users01.dbf'; ? 注:執行此項時,目標文件(TO后面的那一段)一定要存在。 ?? 5、將表空間在線 ? SQL> alter tablespace users online; 對于那些不能offline的表空間,只能關閉數據,在mount狀態下修改,修改后再OPEN | ||||||||||||
表空間脫機 | 表空間的ONLINE和OFFLINE狀態 1. 只要數據庫處于OPEN狀態,除了SYSTEM表空間外的其他表空間,都可以將其置為online或offline狀態。SYSTEM表空間之所以不能置為offline,是因為其中保存的數據字典需要一直使用。將表空間置為offline,可能的原因包括維護、備份以及恢復等目的。 3. 如果表空間處于offline狀態,那么Oracle不會允許任何對該表空間中對象的SQL執行。表空間置為offline時仍處于活動狀態的語句在交易級別并不會受影響。Oracle會保存這些尚未完成語句相關的回滾數據到SYSTEM表空間。當表空間置為online時,如果有必要,那么Oracle會應用這些回滾數據。 3. 除了Oracle外,沒有任何應用能夠讀取或編輯offline的表空間。因此,offline的表空間更不能導到其他數據庫。 4. Oracle在一些場景下會自動切換表空間狀態從online到offline。例如,當數據庫寫進程DBWn,嘗試幾次仍不能寫入表空間的數據文件中。用戶訪問offline表空間時會收到一個報錯。如果造成這種磁盤IO失敗的問題是介質錯誤,解決這問題之后需要恢復表空間。 5. 將表空間置為offline可能包含如下原因: (1) 需要禁止訪問一部分數據庫的場景。 (2) 執行一次offline表空間備份(盡管表空間可以在online和使用情況下備份)。 (3) 當更新或維護應用時,需要讓應用和對應的表臨時不能訪問。 (4) 重命名或重分配表空間中的數據文件。 當表空間置為offline,數據庫會將關聯的所有數據文件都置為offline狀態。但是如下表空間不能置為offline: > SYSTEM > UNDO表空間 > 臨時表空間 6. 將表空間置為offline之前,若有用戶設置該表空間為其默認表空間,需要考慮是否需要改變其默認表空間。之所以這樣做,是因為這些用戶將不能訪問offline表空間中的對象。 7. 使用ALTER TABLESPACE ... OFFLINE語句可以添加如下參數: NORMAL:如果表空間的任何數據文件沒有出現錯誤,表空間能夠正常地置為offline。如果出現寫錯誤,那么表空間中的數據文件不會被置為offline。當明確使用OFFLINE NORMAL,數據庫會對所有數據文件進行一次checkpoint檢查點事件,NORMAL是默認設置。 TEMPORARY:表空間能夠臨時置為offline狀態,即使一個或多個文件出現錯誤。當使用OFFLINE TEMPORARY,數據庫會將還沒有置為offline的數據文件進行置位操作,并執行檢查點事件。 如果沒有文件是offline,但使用了temporary語句,那么當將表空間置為online時不需要介質恢復。然而,如果表空間的一個或多個文件由于寫入錯誤因此導致offline狀態,能夠臨時將表空間置為offline狀態,恢復online之前需要對表空間進行恢復操作。 IMMEDIATE:表空間能夠立即設置為offline狀態,數據庫不會進行任何數據文件的檢查點事件。當使用OFFLINE IMMEDIATE,那表空間置為online之前需要對表空間進行介質恢復操作。但是如果數據庫處于NOARCHIVELOG模式,表空間就不能立即置為offline狀態。 8. 如果必須設置表空間為offline狀態,建議首先使用默認的NORMAL語句。他會確保當表空間置為online前不需要執行恢復操作,盡管在不完全恢復之后,使用LATER DATABASE OPEN RESTLOGS語句重置了redo日志sequence。 僅僅當不能使用NORMAL方式將表空間置為offline時,可以使用TEMPORARY。使用TEMPORARY后,在表空間置為online前,僅需要恢復那些出錯的offline文件。 如果NORMAL和TEMPORARY都失敗時,才可以選擇使用IMMEDIATE選項。 9. 如果表空間沒有“干凈地”置為offline(也就是沒有使用NORMAL語句執行的offline操作),那么置為online前需要首先對該表空間執行介質恢復操作。否則數據庫會報錯,表空間仍處于offline狀態。
置脫機狀態,可以使用下面4個參數來控制脫機方式 NORMAL 該參數表示將表空間以正常方式切換到脫機狀態,在進入脫機狀態過程中,ORACLE會執行一次檢查點, 將SGA區中與該表空間相關的臟緩存塊寫入數據文件中,然后再關閉表空間的所有數據文件。如果在這過程中沒有發生任何錯誤,則可以使用NORMAL參數,這也是默認的方式。 TEMPORARY 該參數將表空間以臨時方式切換到脫機狀態。這時ORACLE在執行檢查點時并不會檢查各個數據文件的狀態,即使某些數據文件處于不可用狀態,ORACLE也會忽略這些錯誤。這樣將表空間設置為聯機狀態時,可能需要進行數據恢復。 IMMEDIATE 該參數將表空間以立即方式切換到脫機狀態,這時ORACLE不會執行檢查點,也不會檢查數據文件是否可用。而是直接將屬于表空間的數據文件設置為脫機狀態。下一次將表空間恢復為聯機狀態時必須進行數據庫恢復。 FOR RECOVER 該參數將表空間以用于恢復方式切換到脫機狀態,如果要對表空間進行基于時間的恢復,可以使用這個參數將表空間切換到脫機狀態。 如果數據庫運行在非歸檔模式下(NOARCHIVELOG),由于無法保留恢復表空間所需要的重做數據,所以不能將表空間以立即方式切換到脫機狀態。如果表空間脫機了,則查詢表空間下的表,會報錯誤:ORA-00376 此時無法讀取文件 以及 ORA-01110:數據文件x...... ? 注意:脫機(offline)一般用于數據庫的聯機備份,數據恢復等維護操作。有些表空間不能OFFLINE,如:SYTEM,UNDO等 1. SYTEM 不能offline,也不能read only 2. 當前的UNDO表空空間,不能offline,也不能read only 3. 當前的臨時表空間不能offline,也不能read only 4. SYSAUX可以offline 不能read only SQL> ALTER TABLESPACE SYSTEM OFFLINE; ALTER TABLESPACE SYSTEM OFFLINE ORA-01541: system tablespace cannot be brought offline; shut down if necessary SQL> ALTER TABLESPACE SYSTEM OFFLINE; ALTER TABLESPACE SYSTEM OFFLINE ORA-01541: system tablespace cannot be brought offline; shut down if necessary ?
? | ||||||||||||
? 查看表空間容量 | select tablespace_name,sum(bytes) from dba_free_space group by tablespace_name; TABLESPACE_NAME ???????????SUM(BYTES) | ||||||||||||
查看表空間剩余總量 | SELECT dbf.tablespace_name, | ||||||||||||
縮表空間語句 | select 'alter database datafile ''' || a.file_name || ''' resize ' || | ||||||||||||
? | ? | ||||||||||||
? | ??????select?segment_?name,?blocks,?extents,?bytes,?segment_?type,?tablespace_?name?fromdba_?segments?where?segment_?name='?T2?; analyze?table?tablename??compute?statlstlcs?; ? ? | ||||||||||||
? | ??SELECT?NUM?ROWS,?-表中的記錄數BLOCKS,一表中數據所占的數據塊數EMPTY_?BLOCKS,?--表中的空塊數 ? 列的統計信息 ? ? | ||||||||||||
? | ? | ||||||||||||
? | ? | ||||||||||||
? | ? | ||||||||||||
? | ? | ||||||||||||
? | ? | ||||||||||||
? | ? | ||||||||||||
? | ? | ||||||||||||
? | ? | ||||||||||||
? | ? | ||||||||||||
? | ? | ||||||||||||
? | ? | ||||||||||||
? | ? | ||||||||||||
? | ? |
?
?
?
?