2 表空間
Oracle磁盤管理中的最高邏輯層是表空間,Oracle11g中必須創建的4個表空間是SYSTEM, SYSAUX,TEMP, UNDOTBS1。
2 SYSTEM:存儲數據字典等,pl/sql代碼等。
2 SYSAUX:存儲與數據庫選項相關的數據
2 TEMP:用於大的排序操作
2 UNDUTBS1:為讀一致性和恢復的目的,存儲事務信息。
表空間的下一層是段,一個段只能駐留在一個表空間中;一個或多個區可以組成一個段,每個區只能駐留在一個數據文件中;一組連續的數據塊可以組成一個區。如果要查詢表空間與對應的數據文件的相關信息,可以從dba_data_files數據字典中查詢表空間及其包含的數據文件,舉例如下:
SQL> col tablespace_name for a10;
SQL> col file_name for a50;
SQL> col bytes for 999,999,999;
SQL>Select tablespace_name,file_name, bytes fromdba_data_files order by tablespace_name;
1、 SYSTEM表空間
SYSTEM表空間存放內部數據和數據字典,主要存放SYS用戶的各個對象和其他用戶的少量對象。例如:查詢USERS表空間中存放的數據對象及其類型和擁有者。
SQL>col owner for a10;
SQL>col segment_name for a30;
SQL>col segment_type for a20;
SQL>select segment_type,segment_name,owner fromdba_segments where tablespace_name='USERS';
2、 SYSAUX表空間
SYSAUX表空間充當SYSTEM表空間的輔助表空間,主要用於存儲除數據字典以外的其他數據對象。例如,查詢SYSAUX表空間所存放的用戶及其所擁有的對象數量:
Select owner as 用戶, count(segment_name) as 對象數量 fromdba_segments where tablespace_name='SYSAUX' group by owner;
3、 創建表空間
創建表空間的語法如下:
Create [smallfile | bigfile] tablespace tablespace_name
Datafile '/path/filename' size num[k|m] reuse
['/path/filename' size num[k|m]reuse]
[, …]
[autoextend [on|off] next ] num[k|m]
[maxsize [unlimited | num[k|m]]]
[mininum extent num[k|m]]
[default storage storage]
[online | offline]
[logging | nologging]
[permanent | temporary]
[extent management dictionary | local [autoallocate |uniform size num[k|m]]];
說明:
? smallfile | bigfile:表示創建的是小文件表空間還是大文件表空間
? autoextend [on|off] next:表示數據文件為自動擴展或非自動擴展,如為自動擴展則需要設置next的值。
? maxsize:表示數據文件自動擴展時,允許數據文件擴展的最大長度字節數,如果指定unlimited關鍵字,則不需要指定字節長度。
? minimum extent:指出在表空間的extent的最小值,這個參數可以減少空間碎片,保證在表空間的extent是這個數值的整數倍。
? online | offline:創建表空間時可以指定為在線或離線。
? permanent | temporary:指定創建表空間是永久表空間或臨時表空間。默認為永久表空間。
? logging | nologging:指定該表空間內的表在加載數據時是否產生日志,默認為產生日志,即使設定為nologging,但在進行insert,update,delete操作時,oracle仍會將信息記錄到redo log buffer中。
? extent management dictionary | local:指定表空間的擴展方式是使用數據字典管理還是本地化管理。默認為本地化管理。
? autoallocate | uniform size:如果采用本地化管理,在表空間擴展時,指定每次區的擴展大小是系統自動指定還是按照同等大小進行。如果設定uniform關鍵字,默認擴展大小為1MB。
? reuse:表示如果該文件存在,則清除該文件再重建該文件;若文件不存在,則創建該文件。
? default storage:設定以後要創建的表、索引、簇的存儲參數值。
4、 刪除表空間
? 刪除空的表空間,但是不包含物理文件
drop tablespacetablespace_name;
? 刪除非空表空間,但是不包含物理文件
drop tablespacetablespace_name including contents;
? 刪除空表空間,包含物理文件
drop tablespace tablespace_nameincluding datafiles;
? 刪除非空表空間,包含物理文件
drop tablespacetablespace_name including contents and datafiles;
? 如果其他表空間中的表有外鍵等約束關聯到了本表空間中的表的字段,就要加上CASCADECONSTRAINTS
drop tablespacetablespace_name including contents and datafiles CASCADE CONSTRAINTS;
5、 案例
? 創建表空間,然後刪除該表空間。
Createtablespace exampletb
Datafile 'E:\ examp01.dbf' size 5M autoextend on next 128k maxsize 1000m,
'E:\ examp02.dbf' size 5Mautoextend on next 128k maxsize 1000m;
說明:以上例子創建的表空間由examp01.dbf和examp02.dbf兩個文件組成。創建完成後,可以發現在相應路徑下增加了2個文件。
drop tablespaceexampletb;
? 創建表空間和表,然後刪除該表空間。
Createtablespace exampletb Datafile 'E:\ examp01.dbf'size 5M autoextendon next 128k maxsize 1000m reuse,
'E:\examp02.dbf' size 5Mautoextend on next 128k maxsize 1000m reuse;
create tablescott.student
(
id number,
name VARCHAR2(10)
)tablespaceexampletb;
說明:向student表插入數據時,數據將存儲在表空間exampletb中,而exampletb表空間擁有一個或多個數據文件,所以student數據最終存儲到examp01和examp02的數據文件中。
drop tablespaceexampletb including contents;
? 創建表空間,然後刪除該表空間及數據文件。
Create tablespaceexampletb
Datafile 'E:\ examp01.dbf' size 5M autoextend on next 128k maxsize 1000mreuse,
'E:\examp02.dbf' size 5Mautoextend on next 128k maxsize 1000m reuse;
drop tablespaceexampletb including datafiles;
? 創建表空間和表,然後刪除該表空間及數據文件。
Createtablespace exampletb
Datafile 'E:\ examp01.dbf' size 5M autoextend on next 128k maxsize 1000m,
'E:\examp02.dbf' size 5Mautoextend on next 128k maxsize 1000m;
create tablescott.student
(
id number,
name VARCHAR2(10)
)tablespaceexampletb;
drop tablespaceexampletb including contents and datafiles;
說明:如果drop tablespace語句中含有datafiles,那datafiles之前必須有contents關鍵字,不然會提示錯誤。
? 創建兩個表空間,分別在其中創建主碼表和外碼表,然後刪除包含主碼表的表空間及數據文件。
Createtablespace exampletb1
Datafile 'E:\ examp03.dbf' size 5M autoextend on next 128k maxsize 1000m;
Createtablespace exampletb2
Datafile 'E:\ examp02.dbf' size 5M autoextend on next 128k maxsize 1000m;
create tabletest1(mobile number(13) primary key)tablespace exampletb1;
create table test2(mobile number(13) references test1(mobile)) tablespace exampletb2;
drop tablespace exampletb1 including contents and datafiles cascade constraints;