管理表空間和數據文件
前言:管理表空間和數據文件
在 Oracle數據庫中,表空間中的數據存在於磁盤的數據文件中,所以對表空間的管理操作與對數據文件的管理操作密切相關。通過使用表空間,可以有效的部署不同類型的數據,加強數據管理,從而提高數據庫的運行性能。
通過閱讀本章節內容,可以:
- 理解表空間和數據文件的關系
- 掌握如何創建表空間
- 掌握如何維護表空間和數據文件
- 了解如何管理撤銷表空間
- 掌握如何管理臨時表空間
一:表空間與數據文件的關系
在Oracle 數據庫中,表空間與數據文件之間的關系非常密切,這二者 相互依存。也就是說,創建表空間時必須創建數據文件,增加數據文件時也必須指定表空間。
Oracle磁盤空間管理中的最高邏輯層是表空間(tablespace),它的下一層是段(segment),並且一個段只能駐留在一個表空間中。段的下一層是盤區。一個或者多個盤區 (extent)可以組成一個段,並且每個盤區只能駐留在一個數據文件中。如果一個段跨越多個數據文件,它就只能由多個駐留在不同數據文件中的盤區構成。盤區的下一層就是數據塊,它也是磁盤空間管理中邏輯劃分的最底層,一組連續的數據塊可以組成一個盤區。
示例1:在sysetm 模式下:從 dba_data_files 數據字典中查詢表空間及其包含的數據文件
1 SYS@orcl> col tablespace_name for a10; 2 SYS@orcl> col file_name for a50; 3 SYS@orcl> col bytes for 999,999,999 4 SYS@orcl> select tablespace_name ,file_name,bytes from dba_data_files order by tablespace_name; 5 6 TABLESPACE FILE_NAME BYTES 7---------- -------------------------------------------------- ------------ 8 EXAMPLE /u01/app/oracle/oradata/orcl/example01.dbf 362,414,080 9 SYSAUX /u01/app/oracle/oradata/orcl/sysaux01.dbf 786,432,000 10 SYSTEM /u01/app/oracle/oradata/orcl/system01.dbf 765,460,480 11 UNDOTBS1 /u01/app/oracle/oradata/orcl/undotbs01.dbf 256,901,120 12USERS /u01/app/oracle/oradata/orcl/users01.dbf 5,242,880 13 14 SYS@orcl>
從查詢所列的結果來看,一個數據庫包括多個表空間,比如system 表空間、users表空間。而每一個表空間又包含一個或者多個數據文件,比如:
users 表包括一個數據文件 users01.dbf ;表空間可以看成是oracle 數據庫的邏輯結構,而數據文件可以看成是 Oracle數據庫的物理結構。
二:oracle 11g 默認的表空間
默認表空間是指在創建Oracle數據庫時,系統自動創建的表空間,這些表空間通常用於存放Oracle系統內部數據和提供樣列所需的邏輯空間。
oracle默認的表空間及其聲明如表:
1: system 表空間
Oracle 數據庫的每個版本都使用system 表空間存放內部數據和數據字典。system表空間主要存放sys用戶的各個對象和其他用戶的少量對象。用戶可以從DBA_SEGMENTS 數據字典中查詢到某個表空間所存放的數據對象及其類型(如:索引、表、簇等)和擁有者。
1: 例如: 查詢 users 表空間內存放的數據對象及其類型和擁有者。
1 SYS@orcl> col owner for a10; 2 SYS@orcl> col segment_name for a30; 3 SYS@orcl> col segment_type for a20; 4 SYS@orcl> select segment_type,segment_name,owner from dba_segments where tablespace_name =‘USERS‘; 5 6 SEGMENT_TYPE SEGMENT_NAME OWNER 7 -------------------- ------------------------------ ---------- 8 TABLE DDL_OPER_LOG SCOTT 9 TABLE DEPT SCOTT 10 TABLE DEPT_LOG SCOTT 11 TABLE EMP SCOTT 12 TABLE GOODS SCOTT 13 INDEX PK_DEPT SCOTT 14 INDEX PK_EMP SCOTT 15 TABLE SALGRADE SCOTT 16 INDEX SYS_C0011673 SCOTT 17 TABLE JOBS_TEMP HR 18 INDEX SYS_C0011441 HR 19 20 SEGMENT_TYPE SEGMENT_NAME OWNER 21 -------------------- ------------------------------ ---------- 22 NESTED TABLE ACTION_TABLE OE 23 INDEX ACTION_TABLE_MEMBERS OE 24 TABLE CATEGORIES_TAB OE 25 LOBSEGMENT EXTRADATA886_L OE 26 NESTED TABLE LINEITEM_TABLE OE 27 INDEX LINEITEM_TABLE_MEMBERS OE 28 LOBSEGMENT NAMESPACES887_L OE 29 NESTED TABLE PRODUCT_REF_LIST_NESTEDTAB OE 30 TABLE PURCHASEORDER OE 31 NESTED TABLE SUBCATEGORY_REF_LIST_NESTEDTAB OE 32 INDEX SYS_C0011250 OE 33 34 SEGMENT_TYPE SEGMENT_NAME OWNER 35 -------------------- ------------------------------ ---------- 36 INDEX SYS_C0011251 OE 37 INDEX SYS_C0011254 OE 38 INDEX SYS_C0011255 OE 39 INDEX SYS_C0011256 OE 40 INDEX SYS_C0011257 OE 41 INDEX SYS_C0011258 OE 42 INDEX SYS_FK0000076744N00007$ OE 43 INDEX SYS_FK0000076744N00009$ OE 44 LOBINDEX SYS_IL0000076694C00004$$ OE 45 LOBINDEX SYS_IL0000076694C00005$$ OE 46 LOBINDEX SYS_IL0000076694C00008$$ OE 47 48 SEGMENT_TYPE SEGMENT_NAME OWNER 49 -------------------- ------------------------------ ---------- 50 LOBINDEX SYS_IL0000076694C00012$$ OE 51 LOBINDEX SYS_IL0000076694C00017$$ OE 52 LOBINDEX SYS_IL0000076694C00026$$ OE 53 LOBINDEX SYS_IL0000076694C00033$$ OE 54 LOBINDEX SYS_IL0000076695C00004$$ OE 55 LOBINDEX SYS_IL0000076699C00005$$ OE 56 LOBINDEX SYS_IL0000076699C00010$$ OE 57 LOBSEGMENT SYS_LOB0000076695C00004$$ OE 58 LOBSEGMENT SYS_LOB0000076699C00005$$ OE 59 LOBSEGMENT SYS_LOB0000076699C00010$$ OE 60 LOBSEGMENT SYS_XDBPD$881_L OE 61 62 SEGMENT_TYPE SEGMENT_NAME OWNER 63 -------------------- ------------------------------ ---------- 64 LOBSEGMENT SYS_XDBPD$882_L OE 65 LOBSEGMENT SYS_XDBPD$883_L OE 66 LOBSEGMENT SYS_XDBPD$884_L OE 67 LOBSEGMENT SYS_XDBPD$885_L OE 68 69 48 rows selected. 70 71 SYS@orcl>
從運行結果可以看出,users表空間存放了scott用戶的表和索引,以及OE 用戶的大對象索引、索引等數據對象。
2: sysaux 表空間
system 表空間主要用於存放Oracle系統內部的數據字典,而sysaux表空間充當system的輔助表空間,主要用於儲存數據字典以外的其他數據對象,它在一定程度上降低 了 system表空間的負荷。
示例1:下面通過dba_segments 數據字典來查詢sysaux 表空間的相關信息
1 SYS@orcl> select owner as "用戶",count(segment_name) as "對象數量" from dba_segments where tablespace_name=‘SYSAUX‘ GROUP BY OWNER; 2 3 用戶 對象數量 4 ------------------------------ ---------- 5 MDSYS 572 6 CTXSYS 59 7 OLAPSYS 141 8 SYSTEM 153 9 EXFSYS 58 10 APEX_030200 467 11 DBSNMP 12 12 ORDSYS 7 13 SYSMAN 746 14 XDB 1372 15 ORDDATA 160 16 17 ???? ???????? 18 ------------------------------ ---------- 19 SYS 1169 20 WMSYS 56 21 22 13 rows selected. 23 24 SYS@orcl> 25
三:創建表空間
為了簡化表空間的管理並提供系統性能,Oracle建議將不同類型的數據對象存放到不同的表空間中。因此,在創建數據庫後,數據庫管理員還應該根據具體應用的情況,建立不同類型的表空間。例如:建立專門用於存放表數據的表空間、建立專門用於存放索引或簇數的表空間等,因此創建表空間的工作就顯示十分重要,在創建表空間時必須考慮以下幾點:
- 是創建小文件表空間,還是大文件表空間(默認為:小文件表空間)
- 是使用局部盤區管理方式,還是使用傳統的目錄盤區管理方式(默認為局部盤區管理)
- 是手動管理段空間,還是自動管理段空間(默認為自動)
- 是否用於臨時段或撤銷段的特殊表空間
1:創建表空間的語法
創建表空間的語法如下:
1 CREATE[SMALLFILE/BIGFILE] TABLESPACE tablespace_name 2 DATAFILE ‘/path/filename‘ SIZE num[k/m] REUSE 3 [,‘/path/filename‘ SIZE num[k/m] REUSE] 4 [...] 5 [AUTOEXTEN [ON/OFF] NEXT NUM[K/M] ] 6 [MAXSIZE num[K/M] | UNLIMITED ] 7 [MININUM EXTENT num[K/M] ] 8 [DEFAULT STORAGE storage ] 9 [ONLINE | OFFLINE ] 10 [LOGGING | NOLOGGING ] 11 [PERMANENT | TEMPORARY ] 12 [ EXTENT MANAGEMENT DICTIONARY | LOCAL [ AUTOALLOCATE | UNIFORM SIZE num [ K/M ] ] ] 13語法中關鍵字
- SMALLFILE | BIGFILE : 表示創建的是小文件表空間 還是 大文件表空間
- REUSE: 表示 若該文件存在,則清除該文件再重新建立該文件,若該文件不存在,則創建該文件。
- AUTOEXEND[ ON | OFF ]: 表示數據文件為自動擴展(ON) 或者 非自動擴展(OFF),如果是自動擴展,則需要設置 next 的值。
- MAXSIZE: 表示當數據文件自動擴展時,允許數據文件擴展的最大長度字節數,如果指定 UNLIMITED 關鍵字,則不需要指定字節長度。
- MINIMUN EXTENT: 指定最小的長度,由操作系統和數據庫的塊決定
- ONLINE | OFFLINE: 創建表空間時可以指定為在線或者離線
- PERMANENT | TEMPORARY : 指定創建的表空間是 永久表空間或臨時表空間,默認為永久性表空間。
- LOGGING | NOLOGGING : 指定該表空間內的表在加載數據時是否產生日誌,默認為產生日誌(LOGGING)。即使設置為NOLOGGING,但在進行 INSERT、UPDATE 和 DELETE 操作時,Oracle 仍會將操作信息記錄到Redo Log Buffer 中。
- EXTENT MANAGEMENT DICTIONARY | LOCAL:指定表空間的擴展方式是使用數據字典管理還是本地化管理,默認為本地化管理。Oracle不推薦使用數據字典表空間。
- AUTOALLOCATE | UNIFORM SIZE : 如果采用本地化管理表空間,在表空間擴展時,指定每次盤區擴展的大小是由系統自動指定還是按照等同大小進行。若是按照等同大小進行,則默認每次擴展的大小為1MB.
- DEFAULT STORAGE: 指定以後要創建的表、索引及簇的儲存參數值,這些參數將影響以後表等的儲存參數值。
語法中的參數
tablespace_name:該參數表示要創建的表空間的名稱
‘/path/filename’:該參數表述數據文件的路徑與名字
———————————————————————————————————————————————————————————————————————————————————
管理表空間和數據文件