TableSpace的概念及創建
?
??? Tablespace是在Oracle中相當關鍵的一個部分。關于Oracle對Tablespace的設置是相當復雜的,如果要仔細研究下去,需要花很大的精力。在這里就先簡單得了解一下基本的屬性和操作方法。因為對于Tablespace的操作,應該是每個DBA必須要首先掌握的知識之一。
?
一、TableSpace管理準則
?
1、使用多個TableSpace
?
??? * 用戶數據與數據字典數據分離,減少競爭
??? * 應用程序之間的數據分離,防止某個TableSpace脫機后對多個程序造成影響
??? * 不同磁盤驅動器上存儲數據,減少I/O競爭
??? * 回滾段數據與用戶數據分離,防止單磁盤故障造成數據永久丟失
??? * 可以控制單個TableSpace脫機,提供更高的整體可用性
??? * 為特定類型數據庫使用保留TableSpace,可優化TableSpace的使用
??? * 可以備份單獨的TableSpace
?
2、指定表空間默認的存儲參數
?
??? 為TableSpace設置合適的參數,下文中詳細介紹。
?
3、為用戶指定表空間限額
?
??? 可以有效控制TableSpace的大小,限制用戶權限防止發生意外。
?
?
二、創建TableSpace
?
1、創建本地管理TableSpace
?
??? Oracle創建的TableSpace默認均是本地管理的,明確的表述應該是:
??? 在CREATE TABLESPACE 語句中 EXTENT MANAGEMENT 子句中指定 LOCAL
?
??? 然后可以用 AUTOALLOCATE 選項(默認)來使Oracle自動管理盤區
??? CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
??? EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
?
??? 也可以使用一個指定大小(UNIFORM SIZE)的同意盤區來管理該TableSpace
??? CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
??? EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
?
??? 如果未指定盤區大小,則默認為1M,說明數據文件至少要大于1MB
?
??? 注:如果TableSpace被期望用于包含需要不同盤區大小和擁有很多盤區的大小變動的對象,那選擇AUTOALLOCATE是最好的選擇。AUTOALLOCATE是一種管理TableSpace的簡便方法,只是有可能會對一些空間造成浪費。如果需要準確控制未用空間,并能夠精確預計為一個或多個對象要非配的空間和盤區大小,那就可以使用UNIFORM。
?
2、在本地管理TableSpace中指定段空間管理
?
??? 可使用 SEGMENT SPACE MANAGEMENT子句來設置端控件的管理模式,有以下幾種模式:
?
??? MANUAL(默認):使用段中管理空閑空間的空閑列表。
??? AUTO:使用位圖來管理段中的空閑空間。又稱為自動段空間管理。
?
??? AUTO立功了一種更加簡單、有效的管理方法,完全消除了為表空間中創建的段指定和調整PCTUSED、FREELISTS、FREELISTS GROUPS屬性的任何必要。
?
??? CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
??? EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
?
??? 注:LOB類型不能指定自動段空間管理。
?
3、修改本地管理TableSpace
?
??? * 不能講本地管理TableSpace改為本地管理的temp TableSpace
??? * 不能改變TableSpace的段空間管理辦法
??? * 本地管理TableSpace沒有必要合并空閑盤區
?
??? * 可以添加數據文件
??? * 可以改變TableSpace狀態(ONLINE/OFFLINE)
??? * 修改TableSpace為只讀or只寫
??? * rename數據文件
??? * 啟用/禁用該TableSpace數據文件的自動盤區大小
?
4、創建字典管理的TableSpace
?
??? CREATE TABLESPACE tbsb
??? DATAFILE '/u02/oracle/data/tbsb01.dbf' SIZE 50M
??? EXTENT MANAGEMENT DICTIONARY
??? DEFAULT STORAGE (
??? INITIAL 50K
??? NEXT 50K
??? MINEXTENTS 2
??? MAXEXTENTS 50
??? PCTINCREASE 0);
?
??? 使用ALTER TABLESPACE語句可以進行以下操作:
?
??? * 添加一個新的文件
??? * 改變默認的存儲參數
??? * 合并TableSpace的空閑空間
??? * 可以改變TableSpace狀態(ONLINE/OFFLINE)
??? * 修改TableSpace為只讀or只寫
??? * rename數據文件
??? * 啟用/禁用該TableSpace數據文件的自動盤區大小
?
5、臨時表空間
?
??? 臨時表空間主要用于提高多個排序操作的并發能力、減小開銷,或避免Oracle空間管理操作在一起進行。臨時表空間創建之后,可以被多個用戶共享。
??? 一個給定實例和表空間的所有排序操作共享一個單一的排序段。即排序段為一個給定表空間的每個執行排序操作的實例而存在。
??? 排序段由使用臨時表空間用于排序的第一個語句創建,并在關閉時釋放,一個盤區不能被多個事務共享。
?
??? 可以使用V$SORT_SEGMENT視圖來查看臨時表空間排序段的空間分配和回收情況
??? 用V$SORT_USAGE視圖查看這些段的當前排序用戶
?
??? 注:臨時表空間中不能創建明確對象。
?
6、創建本地管理的臨時表空間
?
??? CREATE TEMPORARY TABLESPACE lmtemp TEMPFILE '/u02/oracle/data/lmtemp01.dbf' SIZE 20M REUSE
??? EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;
?
??? 注1:臨時數據文件信息查詢與數據文件不同,需要查詢V$TEMPFILE和DBA_TEMP_FILES,但結構與V$DATAFILE和DBA_DATA_FILES類似。
??? 注2:臨時表空間在初次使用時才分配空間,可以更快創建和修改大小,但要注意磁盤大小。
?
7、本地管理臨時表空間的修改
?
??? * 添加臨時文件
??? ALTER TABLESPACE lmtemp ADD TEMPFILE '/u02/oracle/data/lmtemp02.dbf' SIZE 20M REUSE;
?
??? * 改變臨時文件狀態
??? ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' ONLINE|OFFLINE;
?
??? * 更改臨時文件大小
??? ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' RESIZE 4M;
?
??? * 取消臨時文件并刪除相應操作系統文件
??? ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' DROP
??? INCLUDING DATAFILES;
?
8、創建字典管理的臨時表空間
?
??? CREATE TABLESPACE sort
??? DATAFILE '/u02/oracle/data/sort01.dbf' SIZE 50M
??? DEFAULT STORAGE (
??? INITIAL 2M
??? NEXT 2M
??? MINEXTENTS 1
??? PCTINCREASE 0)
??? EXTENT MANAGEMENT DICTIONARY
??? TEMPORARY;
?
??? 注1:不能以這種方式創建EXTENT MANAGEMENT LOCAL的臨時表空間。
??? 注2:可以使用ALTER TABLESPACE tbsa TEMPORARY;語句將一個現有的字典管理永久表空間改為臨時表空間。
?
?
?