普通表空間
建立表空間test11,資料檔案為/u01/oracle/oradata/primary/primary/test11.dbf
SQL> createtablespace test1 datafile '/u01/oracle/oradata/primary/primary/test1.dbf' size10m;
Undo表空間
建立Undo表空間undotbs2:
SQL〉CREATE UNDO TABLESPACE undotbs2
DATAFILE '/u01/oracle/oradata/primary/primary/undotbs2.dbf' SIZE 200M
REUSE AUTOEXTEND OFF
ONLINE;
SQL〉ALTER SYSTEM SET UNDO_TABLESPACE ='undotbs2' SCOPE= BOTH;
臨時表空間
建立臨時表空間temp2
SQL〉CREATE TEMPORARY TABLESPACE temp2
TEMPFILE '/u01/oracle/oradata/primary/primary/temp2.dbf'SIZE 200M
REUSE AUTOEXTEND OFF
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 1M;
建立規範:
CREATE[UNDO] TABLESPACE tablespace_name
[DATAFILE datefile_spec1 [,datefile_spec2] ......
[ { MININUM EXTENT integer [k|m]
| BLOCKSIZE integer [k]
|logging clause
|FORCE LOGGING
|DEFAULT {data_segment_compression}storage_clause
|[online|offline]
|[PERMANENT|TEMPORARY]
|extent_manager_clause
|segment_manager_clause}]
1、undo 說明系統将建立一個復原表空間。
2、tablespace指出表空間的名稱。
3、datafile datefile_spec1指出表空間包含什麼空間檔案。
datefile_spec1 是形如 ['filename'] [SIZE integer [ K | M ]] [REUSE][autoextend_clause]
4、MININUMEXTENT integer [k|m] 指出在表空間中範圍的最小值。這個參數可以減小空間碎片,保證在表空間的範圍是這個數值的整數倍。
5、BLOCKSIZE integer [k] 這個參數可以設定一個不标準的塊的大小。
6、loggingclause這個子句聲明這個表空間上所有的使用者對象的日志屬性(預設是logging),包括表,索引,分區,物化視圖,物化視圖上的索引,分區。
7、FORCE LOGGING使用這個子句指出表空間進入強制日志模式。
8、DEFAULTstorage_clause聲明預設的存儲子句。
9、online|offline改變表空間的狀态。
10、PERMANENT|TEMPORARY指出表空間的屬性,是永久表空間還是臨時表空間。
11、extent_management_clause說明了表空間如何管理範圍
12、segment_management_clause段空間管理的方式,自動或者手動:
SEGMENT SPACE MANAGEMENT {AUTO|MANUAL}
賦予表空間權限:
alter user EPUFS quota unlimited on XIB_TRANS_DATA ;
重命名表空間:
alter tablespace test1 rename to test11;
将system表空間從dictionary-managed更改為locally managed:
*oracle 10g預設的表空間管理方式是本地管理(locally managed)。
在轉換system表前,你必須把所有的其他表空間轉換為本地管理。否則在将system表空間傳換為locally managed後不能在READ-WRITE模式下使用這些表空間。
EXECUTE dbms_space_admin.tablespace_migrate_to_local("tablespace");
系統表空間從資料字典管理轉換到本地管理的限制條件非常嚴格。必須嚴格遵守以下條件:
1)系統的預設臨時表空間不是系統表空間
2)資料字典管理的表空間中不存在復原段
3)至少一個聯機復原段存在于本地管理表空間中或者使用了自動undo管理,且undo表空間聯機
4)除去undo或復原表空間,其他表空間都置于隻讀模式
5)系統使用restricted模式啟動
6)利用DBMS_SPACE_ADMIN
EXECUTE DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL(‘SYSTEM’);
使用這種方法很好,但是它建立的表空間沒有automatic segment space managerment選項,所有字典管理表空間都是用預設手動段空間管理,而且在轉換為本地管理的表空間是不能進行修改。
還有一個缺點,就是表空間如果存在空間碎片的話,此方法也不能解決碎片問題
是以,要轉換普通表空間,建議使用下面的方法!
普通表空間從dictionary-managed更改為locally managed:
首先你要建立一個本地管理的表空間:
CREATE TEMPORARY TABLESPACE new_tempt
TEMPFILE '/u01/oracle/oradata/primary/primary/new_tempt.dbf'SIZE 200M
REUSE AUTOEXTEND OFF
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 1M;
對于表空間的轉移使用指令:
ALTER TABLE temp MOVE TABLESPACE new_temp;
對于索引你需要重建:
ALTER TABLE index REBUILD TABLESPACEnew_index;
resize表空間大小:
SQL> select a.tablespace_name,total,free,total-free used from (select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files group by tablespace_name) a, (select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name;
TABLESPACE_NAME TOTAL FREE USED
-------------------------------------------------------------------------
TEST1 50 49.875 .125
SQL> alter database datafile '/home/oracle/test/TEST/test.dbf' resize 20M;
Database altered.
SQL> select a.tablespace_name,total,free,total-free used from (select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files group by tablespace_name) a, (select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name;
TABLESPACE_NAME TOTAL FREE USED
-------------------------------------------------------------------------
TEST1 20 19.875 .125
注意:
alter databasedatafile 'filepath' resize <filesize>;
- 此語句隻能用于bigfiletablespaces。
- 對于一個bigfiletablespace來說,可以通過alter database語句來改變大小,但不能給一個bigfile tablespace增加資料檔案。
- 在使用resize縮小表空間時,如果檔案中所包含的資料大小超過了設定的大小,就會報錯。
- high water mark:資料檔案能夠resize的最小檔案大小就是HWM值,即resize後的大小不能低于HWM值。