1. 程式人生 > >管理表空間和數據文件

管理表空間和數據文件

允許 ace max 手動 文件中 rom 增加 加強 use


前言:管理表空間和數據文件

在 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 12
USERS /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’:該參數表述數據文件的路徑與名字






























———————————————————————————————————————————————————————————————————————————————————

管理表空間和數據文件