一、TableSpace的存儲參數
?
1、本地管理TableSpace的存儲參數
?
??? 需要注意:本地管理TableSpace不能指定默認存儲參數,也不能指定MINIMUM_EXTENT
?
??? AUTOALLOCATE使用最小盤區為64K的系統管理。
??? UNIFORM SIZE則為指定SIZE的統一大小盤區,默認值為1M
?
2、字典管理TableSpace的存儲參數
?
??? INITIAL????? 定義該段中第一個盤區以字節計(KorM)的大小
??? NEXT???????? 定義第二個盤區以字節計的大小(KorM)
??? PCTINCREASE? 指定第二個(NEXT)盤區以后的每個盤區增長百分比
??? MINEXTENTS?? 指定在表空間中第一次創建一個段時所分配的盤區數
??? MAXEXTENTS?? 確定一個段可以擁有的最大盤區數(可以是UNLIMITED)
?
??? 修改語句如下:
??? ALTER TABLESPACE users
??? DEFAULT STORAGE (
??? NEXT 100K
??? MAXEXTENTS 20
??? PCTINCREASE 0);
?
??? 注1:不能在一條ALTER語句中同時指定INITIAL、MINEXTENTS的值
??? 注2:表空間默認存儲參數修改之后只影響未來數據,對已有不做變更
?
3、合并字典管理TableSpace的空閑空間
?
??? 當Oracle的TableSpace中的段被取消時,會重新將盤區標記為空閑,但是任何相鄰的空閑盤區并不能重組為更大的空閑盤區,這樣就形成了碎片,從而使得分配更大的空閑盤區更加困難。
?
??? 有一下幾種方法進行合并:
?
??? 1. 當為一個段分配新盤區時Oracle無法找到足夠大的空閑盤區時,會自動合并相鄰空閑盤區并再次查找;
??? 2. 表空間的PCTINCREASE值不為0時,SMON后臺進程定期合并相鄰空閑盤區;
??? 3. 一個PCTINCREASE值不為0的段被取消或截斷時,會執行限制形式的合并,即使包含該段的TableSpace的PCTINCREASE=0
??? 4. 使用ALTER TABLESPACE ... COALESCE語句手動合并相鄰空閑盤區
?
??? 注:本地管理的TableSpace會由位圖自動跟蹤相鄰空閑空間,因而不必考慮合并。
?
4、監控空閑空間
?
??? SQL> select block_id,bytes,blocks
??? 2? from dba_free_space
??? 3? where tablespace_name = 'WXQ_TBS'
??? 4? order by block_id;
?
????? BLOCK_ID????? BYTES???? BLOCKS
??? ---------- ---------- ----------
???????????? 9????? 65536????????? 8
??????????? 17????? 65536????????? 8
??????????? 25????? 65536????????? 8
??????????? 33????? 65536????????? 8
??? ....
?
??? 上面的查詢說明最先幾個就是未合并的空閑空間
??? 在執行 ALTER TABLESPACE wxq_tbs COALESCE; 后,再執行以上查詢則
?
????? BLOCK_ID????? BYTES???? BLOCKS
??? ---------- ---------- ----------
???????????? 9????? 65536?????????32
??? ....
?
?
?
二、修改表空間可用性
?
1、表空間脫機
?
??? 使表空間脫機主要是用于以下幾種情況:
??? * 使數據庫一部分不可用,而同時允許正常訪問數據庫的剩余部分
??? * 執行一次脫機表空間的備份
??? * 更新、維護一個應用時,使得該應用和它的表組不可用
?
??? ALTER 語句中的可選項:
?
??? NORMAL(default):正常脫機,若有寫錯誤的結果時,該表空間中沒有數據文件可以被當前脫機。Oracle會設置檢查點;
??? TEMPORARY:暫時脫機,即使表空間中有文件錯誤狀態也依然脫機,同時設置檢查點。聯機時無需介質恢復;
??? IMMEDIATE:立即脫機,不設置檢查點。重新聯機時需要介質恢復。NOARCHIVELOG模式中不可使用;
??? FOR RECOVER:使在恢復中的數據庫表空間為表空間point-in-time恢復設置為脫機
?
??? 注:最好使用NORMAL脫機,這樣重新聯機時無需恢復,即使RESETLOGS也無需恢復。無法正常脫機才使用TEMPORARY選項。
?
??? 在使表空間脫機前需要確認以下幾點:
?
??? * 表空間沒有活動的回滾段,否則無法脫機
??? * 脫機前修改表空間的分配,因為脫機后無法訪問其中的對象或排序區域
?
??? 舉例:
??? ALTER TABLESPACE users OFFLINE NORMAL;
?
2、表空間聯機
?
??? ALTER TABLESPACE users ONLINE;
?
??? 可以單獨改變TableSpace中的文件的聯機/脫機狀態:
?
??? ALTER TABLESPACE?... DATAFILE?{ONLINE|OFFLINE};
??? ALTER TABLESPACE?... TEMPFILE?{ONLINE|OFFLINE}; --不用列出具體文件地址
?
??? 當使用該命令時,表空間本身的聯機狀態并沒有改變,只是改變了數據文件的狀態。
?
??? 也可以使用以下語句來改變數據文件的聯機狀態,但是要輸入文件名:
?
??? ALTER DATABASE DATAFILE?... {ONLINE|OFFLINE};
??? ALTER DATABASE TEMPFILE?... {ONLINE|OFFLINE};
?
?
?
三、使用只讀表空間
?
??? 只讀表空間的作用:
?
??? * 消除執行數據庫大量的靜態部分的備份和恢復需要
??? * 提供一種完全保護歷史數據的方法
??? * 防止任何用戶對該空間的所有表進行更新
?
??? 注:可以從只讀表空間中取消項,但是不能創建可修改。
?
1、使表空間只讀
?
??? ALTER TABLESPACE ... READ ONLY;
?
??? 在執行該操作前需要滿足以下條件:
?
??? * 該表空間必須是聯機的
??? * 該表空間必須沒有包含任何活動的回滾段
??? * 不可以對SYSTEM表空間進行該操作
??? * 該表空間當前必須沒有涉及聯機備份
?
??? 注:該操作不必等待事務完成,操作后當前事務仍可以提交或回滾,所有事務完成后成為只讀。
?
2、查找阻止只讀操作的事務
?
??? 若發現表空間停頓很長的時間,需要識別阻止只讀操作的事務
?
??? SELECT SQL_TEXT, SADDR
????? FROM V$SQLAREA, V$SESSION
?????WHERE V$SQLAREA.ADDRESS = V$SESSION.SQL_ADDRESS
?????? AND SQL_TEXT LIKE 'alter tablespace%'; --查找該SQL的會話地址(SADDR)
?
?
??? SELECT SES_ADDR, START_SCNB?
????? FROM V$TRABSACTION?
?????ORDER BY START_SCNB; --找到查找到的SADDR之前SCN的事務,即為阻止事務
?
??? 在完成READ ONLY操作后,立即對其備份。以后就不必再備份了。
?
3、使只讀表空間可寫
?
??? ALTER TABLESPACE ... READ WRITE;
?
??? 需要滿足的條件是表空間以及該表空間的所有數據文件都必須是聯機的。
??? 具體可以在DBA_TABLESPACES和DBA_DATA_FILES中查詢其狀態
?
4、在WORM設備上創建只讀表空間
?
??? ① 在其他設備上創建一個可寫的表空間,并創建對象、插入數據
??? ② 修改該表空間以使它只讀
??? ③ 將該表空間的數據文件復制到WROM設備上
??? ④ 使該表空間脫機
??? ⑤ 用ALTER TABLESPACE ... RENAME DATAFILE重命名數據文件,使其與WORM上的數據文件名稱一致
??? ⑥ 修改控制文件
??? ⑦ 使該表空間重新聯機
?
5、延遲只讀表空間中數據文件的打開
?
??? 設置初始化參數 READ_ONLY_OPEN_DELAYED = TRUE
??? 該設置會在需要讀取存儲在表空間中的數據時,使表空間的數據文件只在第一次被訪問。
?
??? 這個操作會帶來的副作用:
?
??? * 打開時檢測不到缺少的或損壞的只讀文件(訪問時才被發現)
??? * ALTER DATABASE CHECK DATAFILES不檢查只讀文件
??? * ALTER TABLESPACE ONLINE不檢查只讀文件,只在第一次訪問上被檢查
??? * V$RECOVER_FILE、V$BACKUP、V$DATAFILE_HEADER不訪問只讀文件
??? * V$DATAFILE不訪問只讀文件,只讀文件以“0”大小列出
??? * V$RECOVER_LOG不訪問只讀文件,需要的用于恢復的日志沒有被添加到列表中
??? * ALTER DATABASE NOARCHIVELOG不訪問只讀文件,即使有需要恢復的只讀文件也繼續進行
?
??? 注:RECOVER DATABASE和ALTER DATABASE OPEN RESETLOGS會訪問只讀文件而不管參數。
?
?
?
四、取消表空間
?
??? 除SYSTEM外的表空間均可被取消
?
??? 表空間取消后無法恢復,所以最好在撤銷表空間前后都進行一次完全備份。
?
?
??? DROP TABLESPACE users INCLUDING CONTENTS; --包括表空間中的段
?
??? DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES; --包括數據文件
?
?
-The End-