普通資料表空間
建立資料表空間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值。