程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 表空間的管理,表空間管理

表空間的管理,表空間管理

編輯:Oracle教程

表空間的管理,表空間管理


表空間是數據庫的邏輯組織形式,在一個數據庫中可以創建多個表空間。

表空間的主要作用是將不同用途的數據分離開來,以提高數據的安全性,並提高系統的性能。
表空間在數據庫中起著非常重要的作用。

一方面,表空間在邏輯結構上由多個段組成,數據都存儲在表空間的段中,另一方面,表空間在物理結構上對應著多個數據文件,數據庫對象中的數據最終存儲在這些數據文件中。
表空間的類型較多,根據不同的分類標准,將得到不同的分類結果。

根據存儲數據類型的不同,表空間可分為系統表空間、UNDO表空間、臨時表空間和用戶表空間。
根據存儲空間方式的不同,表空間可分為字典管理表空間和本地管理表空間。
根據是否支持大文件來劃分,表空間可分為大文件表空間和小文件表空間。
表空間的管理主要涉及各種類型表空間的創建、刪除、擴展、修改狀態等。

表空間的結構

一個表空間由多個段組成,每個段可能代表一個數據庫對象。

當用戶創建表、索引、簇等數據庫對象時,在表空間中將自動創建一個段,以存儲該對象的數據。
一個段占用一個或多個區,當區的空間被寫滿後,段就會自動擴展。
在創建表空間時就需要指定區的分配方式

區管理方式

區管理方式指的是為一個數據庫對象分配存儲空間的方式,在創建表空間時需要指定區管理方式。
Oracle支持兩種區管理方式,字典管理和本地管理
在創建字典管理的表空間時,需要指定若干存儲參數,以後在這個表空間中創建數據庫對象時,就按照這些存儲參數為數據庫對象分配所需要的區,當這些區被寫滿後,數據庫服務器將按照存儲參數為數據庫對象分配新的區。
表空間的存儲參數記錄在數據字典中。
在創建字典管理的表空間時,可以指定以下幾個存儲參數:
INITIAL(初始) :指定第一個區的大小,即首先要為數據庫對象分配的區的大小。
NEXT :指定下一個區的大小。
MINEXTENTS :為數據庫對象分配的最少區的個數,默認值為1。
MAXEXTENTS : 最多為數據庫對象分配的區個數。
PCTINCREASE :從第三個區開始,每一個區在前一個區的基礎上增長的百分比。
在字典管理表空間中,區的分配和回收都是基於數據字典進行的。

當為數據庫對象分配區時,需要從數據字典中查詢存儲參數,分配結束後,需要把分配的結果寫入數據字典。
這樣要在數據字典上執行很多的查詢操作和DML操作,並且產生重做日志和回滾數據。
另外,由於數據庫對象中的區大小不同,隨著數據庫服務器的運行,在段中將產生越來越的存儲碎片

在本地管理表空間中,區的大小都是相同的。

在創建表空間時,可以通過參數指定統一的區大小,或者由數據庫服務器根據實際情況自動指定區的大小。
與字典管理方式相比,本地管理方式有以下優點:
·區的分配和回收不再基於數據字典,從而避免了對數據字典的遞歸訪問,也不會產生重做日志和回滾數據。
·所有區的大小都相同,這就減少了存儲空間中的存儲碎片。
·不需要合並表空間中的存儲碎片,數據庫服務器自動監視存儲空間的使用情況,並合並相鄰的空閒存儲空間。
Oracle建議大家使用本地管理表空間。

在Oracle 11g的數據庫中創建的表空間默認就是本地管理的,如SYSTEM表空間目前是字典管理的,可以通過下面的方式,調用PL/SQL程序包中的存儲過程,把它轉化為本地管理表空間:

EXECUTE DBMS_SPACE_ADMIN.tablespace_migrate_to_local('SYSTEM');

段管理方式

當用戶向表中寫入數據時,這些數據被寫入表段中的空閒數據塊中,服務器進程查找表中的空閒數據塊,然後將數據寫入數據塊,最後還要修改數據塊的狀態
對於段空間管理,Oracle提供了兩種方式,一種是手工管理,另一種是自動管理
手工管理段空間的方式是這樣實現的:在每個頭部都有一段保留空間,在保留空間中維護一個空閒列表,在這個列表中記錄當前段中所有的空閒塊
當用戶向表中寫數據時,服務器進程在這個空閒列表中查找足夠數量的空閒塊,將數據寫入這些塊。
如果一個塊已經被寫滿了,這個塊就從空閒列表中被刪除
在查找空閒塊的過程中為防止其他服務器進程使用同樣的空閒塊,服務器進程將對空閒列表加鎖,只有空閒列表上的鎖被釋放後,其他服務器進程才可以在空閒列表中查找空閒塊。
如果用戶在某個表上的事務很頻繁,那麼空閒列表將成為延緩事務執行的瓶頸。
自動管理方式是Oracle 11g數據庫默認采用的段管理方式。

這種管理方式是這樣實現的:在每個段的頭部有一個位圖,在位圖中記錄當前段中每個數據塊的狀態用二進制數0和1表示數據塊的狀態,每個數據塊在位圖中只占一位
使用位圖的好處首先是節省空間,其次,當用戶向表中寫入數據時,服務器進程只要掃描位圖就可以查找空閒數據塊,而且不需要對位圖加鎖
在創建表空間時,需要為表空間指定段空間管理方式。

數據文件

表空間中的所有數據都是以數據文件的形式存儲在磁盤上的。

一個表空間包含一個或多個數據文件。
在創建表空間時,至少要為表空間指定一個數據文件。
如果表空間只包含一個數據文件,那麼表空間中的數據將全部存儲在這個數據文件中。

如果表空間中包含多個文件,表空間中的數據將以區為單位分布在各個數據文件中。
假設某個表空間中有三個數據文件,那麼在該表空間中創建一個表時,表中的第一、四、七……個區將位於第一個數據文件,第二、五、八、……個區將位於第二個數據文件中,依此類推。

如果將數據文件存放在不同的磁盤上,那麼用戶在訪問表空間中的數據時,可以同時讀寫多個數據文件,從而減少了磁盤讀寫的沖突次數。
當表空間中的存儲空間被消耗完時,用戶將無法再寫入數據。

數據庫管理員必須擴展表空間,為其分配新的存儲空間。
可以向表空間中增加新的數據文件,也可以手工擴展現有的數據文件,還可以激活數據文件的自動擴展功能,使它能夠自動擴展。

本地管理表空間的管理

本地管理表空間是Oracle 11g 中的默認表空間類型。

對這種表空間的管理主要涉及創建、刪除、修改等操作。

本地管理表空間的創建

創建表空間的任務一般由SYS 用戶完成,普通用戶如果希望執行這樣的操作,需要具有
CREATE TABLESPACE 系統權限。
在創建表空間時,需要指定表空間的區管理方式、段管理方式以及表空間所包含的數據文件。
在Oracle 11g 中,表空間的默認區管理方式是本地管理( LOCAL )。

例如,通過以下語句創建本地管理表空間ts1 :

CREATE TABLESPACE ts1
DATAFILE 'C:\Users\john\Desktop\tbs\ts1_1.dbf' SIZE 1M
EXTENT MANAGEMENT local
SEGMENT SPACE MANAGEMENT auto;

注意:DATAFILE實際SIZE 並不是1M,因為EXTENT的大小是數據塊的整數倍。

在上面的語句中, EXTENT MANAGEMENT LOCAL用於指定表空間的區管理方式為本地管理,這是可以省略的,因為表空間默認的區管理方式就是本地管理。
但是如果在CREATE語句中指定了AUTOALLOCATE或者UNIFORM SIZE ,那麼EXTENT MANAGEMENT LOCAL是不能省略的
AUTOALLOCATE表示這個表空間中的區大小由數據庫服務器根據實際情況自動指定,默認為64KB 。
如果在這個表空間中創建可變大小的數據庫對象,而且這個對象需要大小不同的區,那麼AUTOALLOCATE是一種很好的選擇。
如果希望控制表空間中區的使用,則通過UNIFORM SIZE指定統一的區大小。
SEGMENT SPACE MANAGEMENT用於指定表空間中段空間的管理方式,目前有兩種可選方式,即AUTOMANUAL
AUTO 使用位圖的方式跟蹤段中每個數據塊的狀態,而MANUAL方式是通過空閒列表來記錄每個段中的空閒塊的。
由於AUTO使段空間管理更加高效,所以Oracle建議為表空間指定這種段管理方式,而且這也是默認方式。

DATAFILE用於指定表空間所包含的數據文件及其大小,一個表空間包含一個或多個數據文件。
在UNIX/Linux系統中,為了在某個目錄下創建數據文件,需要保證操作系統中的oracle用戶對該目錄具有寫權限。

下面的語句用於創建表空間TS2 ,表空間中區的統一大小為256KB 。

如果沒有通過SIZE子句指定大小,則采用默認值1MB 。

CREATE TABLESPACE ts2
DATAFILE 'C:\Users\john\Desktop\tbs\ts2_2.dbf' SIZE 1M
EXTENT MANAGEMENT local UNIFORM SIZE 256K
SEGMENT SPACE MANAGEMENT auto;

數據庫中的數據塊大小通過初始化參數DB_BLOCK_SIZE指定,通過這個參數指定的數據塊稱為標准塊。
表空間中的數據塊默認也采用標准塊大小

如果希望在數據庫中定義其他大小的非標准塊,那麼在創建表空間時需要指定它所采用的數據塊大小。
例如,通過下面的語句創建的表空間具有2KB 的數據塊:

CREATE TABLESPACE ts3
DATAFILE 'C:\Users\john\Desktop\tbs\ts3_3.dbf' SIZE 1M,
'C:\Users\john\Desktop\tbs\ts3_4.dbf' SIZE 1M
BLOCKSIZE 2K;

非標准塊中的數據是不能被讀到一般的數據庫高速緩存中的。

為了能夠訪問這種表空間中的數據,在創建表空間之前,需要通過初始化參數DB_nK_CACHE_SIZE在內存中為非標准塊定義相應的數據庫高速緩存,緩存也是由許多緩沖區組成,緩沖區的大小與非標准塊大小相同。
例如:

ALTER SYSTEM SET db_2k_cache_size=48M;

表空間信息的查詢

與表空間有關的相關信息可以從數據字典中獲得,與表空間有關的數據字典視圖有兩個,dba_tablespaces和dba_data_files
從數據字典dba_tablespaces 中可以獲得表空間的基本信息

下面是有關數據字典視圖dba_tablespaces的信息:

DBA_TABLESPACES describes all tablespaces in the database.

Related View

USER_TABLESPACES describes the tablespaces accessible to the current user. This view does not display the PLUGGED_IN column.

ColumnDatatypeNULLDescription

TABLESPACE_NAME

VARCHAR2(30)

NOT NULL

Name of the tablespace

BLOCK_SIZE

NUMBER

NOT NULL

Tablespace block size (in bytes)

INITIAL_EXTENT

NUMBER

 

Default initial extent size (in bytes)

NEXT_EXTENT

NUMBER

 

Default incremental extent size (in bytes)

MIN_EXTENTS

NUMBER

NOT NULL

Default minimum number of extents

MAX_EXTENTS

NUMBER

 

Default maximum number of extents

MAX_SIZE

NUMBER

 

Default maximum size of segments (in Oracle blocks)

PCT_INCREASE

NUMBER

 

Default percent increase for extent size

MIN_EXTLEN

NUMBER

 

Minimum extent size for this tablespace (in bytes)

STATUS

VARCHAR2(9)

 

Tablespace status:

  • ONLINE

  • OFFLINE

  • READ ONLY

CONTENTS

VARCHAR2(9)

 

Tablespace contents:

  • UNDO

  • PERMANENT

  • TEMPORARY

LOGGING

VARCHAR2(9)

 

Default logging attribute:

  • LOGGING

  • NOLOGGING

FORCE_LOGGING

VARCHAR2(3)

 

Indicates whether the tablespace is under force logging mode (YES) or not (NO)

EXTENT_MANAGEMENT

VARCHAR2(10)

 

Indicates whether the extents in the tablespace are dictionary managed (DICTIONARY) or locally managed (LOCAL)

ALLOCATION_TYPE

VARCHAR2(9)

 

Type of extent allocation in effect for the tablespace:

  • SYSTEM

  • UNIFORM

  • USER

PLUGGED_IN

VARCHAR2(3)

 

Indicates whether the tablespace is plugged in (YES) or not (NO)

SEGMENT_SPACE_MANAGEMENT

VARCHAR2(6)

 

Indicates whether the free and used segment space in the tablespace is managed using free lists (MANUAL) or bitmaps (AUTO)

DEF_TAB_COMPRESSION

VARCHAR2(8)

 

Indicates whether default table compression is enabled (ENABLED) or not (DISABLED)

Note: Enabling default table compression indicates that all tables in the tablespace will be created with table compression enabled unless otherwise specified.

RETENTION

VARCHAR2(11)

 

Undo tablespace retention:

  • GUARANTEE - Tablespace is an undo tablespace withRETENTION specified as GUARANTEE

    RETENTION value of GUARANTEE indicates that unexpired undo in all undo segments in the undo tablespace should be retained even if it means that forward going operations that need to generate undo in those segments fail.

  • NOGUARANTEE - Tablespace is an undo tablespace with RETENTION specified as NOGUARANTEE

  • NOT APPLY - Tablespace is not an undo tablespace

BIGFILE

VARCHAR2(3)

 

Indicates whether the tablespace is a bigfile tablespace (YES) or a smallfile tablespace (NO)

PREDICATE_EVALUATION

VARCHAR2(7)

 

Indicates whether predicates are evaluated by host (HOST) or by storage (STORAGE)

ENCRYPTED

VARCHAR2(3)

 

Indicates whether the tablespace is encrypted (YES) or not (NO)

COMPRESS_FOR

VARCHAR2(30)

 

Default compression for what kind of operations:

  • BASIC

  • ADVANCED

  • QUERY LOW

  • QUERY HIGH

  • ARCHIVE LOW1

  • ARCHIVE HIGH1

  • NULL

DEF_INMEMORY

VARCHAR2(8)

 

Indicates whether the In-Memory Column Store (IM column store) is by default enabled (ENABLED) or disabled (DISABLED) for tables in this tablespace

DEF_INMEMORY_PRIORITY2

VARCHAR2(8)

 

Indicates the default priority for In-Memory Column Store (IM column store) population for this tablespace. Possible values:

  • LOW

  • MEDIUM

  • HIGH

  • CRITICAL

  • NONE

  • NULL

DEF_INMEMORY_DISTRIBUTE2

VARCHAR2(15)

 

Indicates how the IM column store is distributed by default for this tablespace in an Oracle Real Application Clusters (Oracle RACE) environment:

  • AUTO

  • BY ROWID RANGE

  • BY PARTITION

  • BY SUBPARTITION

DEF_INMEMORY_COMPRESSION2

VARCHAR2(17)

 

Indicates the default compression level for the IM column store for this tablespace:

  • NO MEMCOMPRESS

  • FOR DML

  • FOR QUERY [ LOW | HIGH ]

  • FOR CAPACITY [ LOW | HIGH ]

  • NULL

DEF_INMEMORY_DUPLICATE2

VARCHAR2(13)

 

Indicates the duplicate setting for the IM column store in an Oracle RAC environment:

  • NO DUPLICATE

  • DUPLICATE

  • DUPLICATE ALL

例如,通過下面的SELECT語句可以獲得表空間的名稱、區管理方式、段管理方式、內容類型、狀態等信息:

SELECT tablespace_name, extent_management, segment_space_management, contents, status FROM dba_tablespaces;

數據字典dba_data_fies可以獲得表空間中數據文件的信息,如文件名稱、大小(以MB 為單位)、狀態等信息。

下面是有關數據字典dba_data_fies的信息:

DBA_DATA_FILES describes database files.

ColumnDatatypeNULLDescription

FILE_NAME

VARCHAR2(513)

 

Name of the database file

FILE_ID

NUMBER

 

File identifier number of the database file

TABLESPACE_NAME

VARCHAR2(30)

 

Name of the tablespace to which the file belongs

BYTES

NUMBER

 

Size of the file in bytes

BLOCKS

NUMBER

 

Size of the file in Oracle blocks

STATUS

VARCHAR2(9)

 

File status: AVAILABLE or INVALID (INVALID means that the file number is not in use, for example, a file in a tablespace that was dropped)

RELATIVE_FNO

NUMBER

 

Relative(相對的) file number

AUTOEXTENSIBLE

VARCHAR2(3)

 

Autoextensible indicator(指示符)

MAXBYTES

NUMBER

 

Maximum file size in bytes

MAXBLOCKS

NUMBER

 

Maximum file size in blocks

INCREMENT_BY

NUMBER

 

Number of Oracle blocks used as autoextension increment

USER_BYTES

NUMBER

 

The size of the file available for user data. The actual size of the file minus the USER_BYTES value is used to store file related metadata.

USER_BLOCKS

NUMBER

 

Number of blocks which can be used by the data

ONLINE_STATUS

VARCHAR2(7)

 

Online status of the file:

  • SYSOFF

  • SYSTEM

  • OFFLINE

  • ONLINE

  • RECOVER


例如:

SELECT file_name, bytes/1024/1024 MB, status FROM dba_data_files WHERE tablespace_name='TS1';

表空間的刪除

當一個表空間不再需要時,可以將其從數據庫中刪除。

刪除表空間的操作一般由SYS用戶完成,普通用戶如果希望執行這樣的操作,需要具有DROP TABLESPACE系統權限。
刪除表空間的命令格式為:

DROP TABLESPACE 表空間名;

例如,下面的命令用於刪除表空間ts3:

DROP TABLESPACE ts3;

需要注意的是,如果用戶已經在這個表空間中創建了表、索引的數據庫對象,這個表空間是不能被直接刪除的,需要先把表空間中的所有數據庫對象刪除
例如,下面的DROP語句用於刪除表空間以及其中的數據庫對象:

DROP TABLESPACE ts2 INCLUDING CONTENTS;

表空間雖然被刪除了,但是表空間所包含的數據文件並沒有被刪除,還占用磁盤上的存儲空間,這些文件需要通過手工方式刪除
在有些情況下,手工刪除數據文件可能不太容易,如在裸設備中或ASM磁盤組中。
下面的DROP語句用於刪除表空間以及其中的數據庫對象和對應的數據文件:

DROP TABLESPACE ts1 INCLUDING CONTENTS AND DATAFILES;

大文件表空間的管理

大文件( BigFile )表空間是一種特殊類型的表空間,在每個大文件表空間中只包含一個數據文件,但這個數據文件的大小可以達到4GB 個數據塊。
使用大文件表空間的最大好處是可以大大擴展數據庫的容量。

假設數據塊的大小為8KB,那麼一個數據文件的大小就可以達到8KB ( 4GB=32TB。另外,使用大文件表空間可以大大減少數據文件的數目,因為一個表空間只有一個數據文件。
Oracle推出大文件表空間的主要目的是支持自動存儲管理( ASM )和RAID 、條帶狀邏輯卷,這些技術結合起來,為數據庫提供大容量的、對用戶透明的存儲空間。
需要注意的是,大文件表空間的區管理方式只能是本地管理,段管理方式只能是自動管理。
UNDO表空間、臨時表空間和SYSTEM表空間屬於例外情況,如果把它們指定為大文件表空間,它們的區管理方式只能是本地管理,但是段管理方式可以是自動管理或手工管理

大文件表空間的支持

在默認情況下,數據庫中表空間的類型為小文件( SmallFile )表空間,如果要創建大文件表空間,則需要通過關鍵字BIGFILE指定。
在創建數據庫時,可以將默認的表空間類型指定為大文件表空間,這樣以後在數據庫中創建的表主間默認都屬於大文件表空間。
在創建數據庫的CREATE DATABASE命令中,如果使用了SET DEFAULT BIGFILE TABLESPACE子句,那麼表空間的默認類型將為大文件表空間。
如果使用了SET DEFAULT SMALLFILE TABLESPACE子句,或者這兩條子句都沒有使用,那麼表空間的默認類型將為小文件表空間。

例如,以下語句在創建數據庫時指定表空間的默認類型為大文件表空間:
CREATE DATABASE test
SET DEFAULT BIGFILE TABLESPACE
...
在數據庫的運行過程中,數據庫管理員也可以動態修改表空間的默認類型,修改以後的表空間類型對以後創建的所有表空間起作用。
例如:
ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE;
ALTER DATABASE SET DEFAULT SMALLFILE TABLESPACE;
從數據字典視圖database_properties 中可以獲得數據庫的屬性,包括默認的表空間類型。
例如:
SELECT property_value, description FROM database_properties WHERE property_name=UPPER('default_tbs_type');

大文件表空間的刪除方法與普通表空間相同。

大文件表空間的創建

在數據庫的運行過程中,數據庫管理員可以創建一個大文件表空間。

這個表空間的區管理方式為本地管理,段管理方式為自動管理,在創建表空間的語句中可以不指定這些信息。
在創建大文件表空間的語句中,只能指定一個數據文件。
例如:
CREATE BIGFILE TABLESPACE ts1 DATAFILE 'C:\Users\john\Desktop\tbs\ts1.dbf' SIZE 1M;
如果數據庫中表空間的默認類型已經是大文件表空間,那麼在創建大文件表空間的語句中可以省略BIGFILE關鍵字。
但如果要創建一個小文件表空間,則必須在CREATE TABLESPACE語句中使用SMALLFILE關鍵字,反之亦然。

大文件表空間的修改

修改大文件表空間的操作涉及兩個方面的內容:重新指定數據文件的大小以及修改數據文件的自動擴展屬性
由於大文件表空間只有一個數據文件,所以在修改時不需要指定數據文件的信息。
例如,下面的語句用來把數據文件TS1.DBF的大小改為2M:
ALTER TABLESPACE ts1 RESIZE 2M;
下面的語句用於修改數據文件的自動擴展屬性
ALTER TABLESPACE ts1 AUTOEXTEND ON NEXT 1M MAXSIZE 5M;

臨時表空間的管理

臨時表空間用於存儲臨時數據。

當用戶執行排序創建索引這樣的操作時,將產生大量的中間結果,這些臨時數據將首先存儲在PGA的排序區中。
當排序區的大小不足以容納這些數據時,將用到臨時表空間。

如果沒有為用戶指定臨時表空間,那麼用戶在執行排序操作時將把SYSTEM表空間作為臨時表空間,並在SYSTEM表空間中創建臨時段,以存儲臨時數據。
由於用戶的排序操作會在SYSTEM表空間中頻繁地產生臨時段釋放臨時段,這樣在SYSTEM表空間中將產生大量的存儲空間碎片,從而降低數據庫的性能。
Oracle建議在數據庫中創建專門的臨時表空間,並為用戶指定一個臨時表空間
在臨時表空間中只能創建臨時段,而不能創建數據段、索引段等永久性的段。

在數據庫中第一次執行排序操作時,臨時段自動創建,在數據庫關閉時臨時段被刪除
這些臨時段為所有用戶所共享

臨時表空間的創建

就像創建普通表空間一樣,在創建臨時表空間時需要指定區管理方式、段管理方式、區的大小等信息,也可以創建大文件臨時表空間
創建表空間時需要指定關鍵字TEMPORARY
例如,以下語句用來創建本地管理臨時表空間tts1:

CREATE TEMPORARY TABLESPACE tts1
TEMPFILE 'C:\Users\john\Desktop\tbs\tts1_1.dbf' SIZE 1M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 128K;

在創建本地管理臨時表空間時,首先要用關鍵字TEMPORARY指定表空間的類型為臨時性的,其次,要通過TEMPFILE子句指定表空間的數據文件,而不是使用DATAFFILE子句。
另外,只能通過UNIFORM子句為臨時表空間指定的區大小,而不能使用AUTOALLOCATE子句。
在創建臨時表空間時, Oracle建議將臨時表空間的大小設置為排序區的整數倍,以減少存儲空間的碎片,使數據庫獲得最佳性能。
排序區的大小通過初始化參數SORT_AREA_SIZE來確定
臨時表空間的作用僅限於存儲臨時數據,因而與普通表空間相比它有一些特殊的地方。

從數據字典視圖dba_tablespaces 中查詢臨時表空間的信息時,發現LOGGING 列的值為NOLOGGING ,這就意味著對臨時空間中的數據所做的任何修改都不會產生重做日志
用戶執行排序等操作時,臨時文件中的數據是不斷變化的,因而臨時文件的訪問權限不能為只讀方式。
另外,還需要注意的是,臨時表空間中的數據文件的信息是從數據字典視圖dba_temp_files 中獲得的
在創建數據庫時,默認就創建了一個臨時表空間,它就作為數據庫的默認臨時表空間。

如果更改數據庫的臨時表空間,可以執行下面的ALTER語句:

 ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tts1;

臨時表空間組

在數據庫中只有一個默認臨時表空間,所有用戶都是用這個臨時表空間。

如果在數據庫中有大量的排序、創建索引,或者以並發方式向表中寫入大量數據,這時可以創建多個臨時表空間,為每個用戶指定不同的臨時表空間,每個用戶都使用自己的臨時表空間,這樣做的好處是可以將磁盤I/O分布在不同的磁盤上,減少了磁盤I/O的沖突,從總體上可以提高數據庫的性能
例如,下面的ALTER為用戶指定臨時表空間:

ALTER USER scott TEMPORARY TABLESPACE tts1;

由於不同用戶對數據庫的訪問是不同的,因而對這些臨時表空間的使用頻率也是不同的。
如果能使所有用戶平均地使用數據庫中的多個臨時表空間,就能進一步提高數據庫的性能。

臨時表空間組是解決這個問題的最佳途徑。
臨時表空間組是一組臨時表空間的邏輯集合,當為用戶指定臨時表空間組時,用戶可以平均地使用其中的所有臨時表空間。
臨時表空間組不需要創建,只要在創建或修改臨時表空間時為臨時表空間組指定一個名稱即可。
例如:

ALTER TABLESPACE tts1 TABLESPACE GROUP group1;

CREATE TEMPORARY TABLESPACE tts3 TEMPFILE 'C:\Users\john\Desktop\tbs\tts3_1.dbf' SIZE 2M TABLESPACE GROUP group1;

然後將這個臨時表空間組作為數據庫的默認臨時表空間,或者作為某個用戶的默認臨時表空間。
例如:

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE group1;

從臨時表空間組中刪除臨時表空間的操作也很簡單,只要為臨時表空間指定一個空的臨時表空間組即可。
臨時表空間雖然在邏輯上不再屬於任何臨時表空間組,但它在數據庫中依然存在,還可以作為數據庫或者某個用戶的默認臨時表空間。
下面的語句用於將臨時表空間TTS1從臨時表空間組中刪除。

ALTER TABLESPACE tts1 TABLESPACE GROUP '';

臨時表空間組的信息可以從數據字典視圖dba_tablespace_groups 中獲得。

例如,下面的語句用於查詢一個臨時表空間組中所包含的臨時表空間:

SELECT tablespace_name FROM dba_tablespace_groups WHERE group_name='GROUP1';

UNDO表空間的管理

當用戶在數據庫中執行INSERT 、DELETE 、UPDATE等DML操作時,相關的命令集合組成一個事務。
在事務提交之前,用戶還有機會回滾事務。

事務回滾之後對數據庫所作的修改將被取消,就好像沒有發生任何事情一樣。
回滾事務的結果是將被修改的數據還原為原狀,也就是將回滾數據重新寫回原來的地方。
回滾數據也稱為UNDO數據,是事務執行以前的數據,這些數據被存儲在回滾段中。

當用戶提交事務時,回滾數據就失去了存在的意義。
而當用戶回滾事務時,數據庫服務器將回滾數據從回滾段重新寫入數據段,於是數據被恢復為原狀。
回滾數據對於維護數據的一致性有非常重要的意義

例如,某個用戶要在兩個銀行賬號之間轉賬,數據庫先在第一個賬戶上減去轉賬的金額,然後在第二個賬戶上加上相同的金額。
這兩步操作就構成一個事務,作為一整體來執行。
假設在第一步剛執行完時,系統突然斷電,結果會怎樣呢?

兩個賬戶上的金額就對不上了。

Oracle能夠很好地解決這個問題。

當數據服務器重新啟動時,這個未提交的事務將被回滾,數據庫服務器將回滾數據寫入原來的位置,於是這次轉賬以失敗告終,這樣就保證了兩個銀行賬戶之間不會出現收支不平衡的現象。
回滾數據被存儲在數據庫中一段特殊的存儲區域中。

在Oracle 11 g 中,有兩種管理回滾數據的方式,一種是自動方式,這種方式利用專門的UNDO表空間管理UNDO數據。
第二種方法利用回滾段管理UNDO數據,這種方式稱為手工方式。
在一個數據庫中我們只能選擇使用其中一種方式。
手工方式即回滾段方式,是以前的Oracle版本使用的傳統方式,這種方式的管理相當復雜,需要數據管理員做大量的工作,如確定回滾段的數量和大小,指定可用的回滾段等。
如果回滾段的數量太少,或者空間太小,用戶的事務可能被延緩執行,這時管理員需要回滾段進行手工擴展。
自動方式利用專門的UNDO表空間來管理回滾數據。

如果創建了UNDO表空間,數據庫服務器將自動使用UNDO表空間來管理回滾數據,整個過程不需要人工干預,從而大大減輕了管理員的負擔。
如果將UNDO表空間設置為可自動擴展,那麼當用戶的事務太多時,數據庫服務器可以根據需要對UNDO表空間進行擴展。
Oracle建議采用自動管理方式。
實際上自動方式也是利用回滾段來管理回滾數據的,回滾段包含在專門的UNDO表空間中,只不過回滾段不需要數據庫管理員管理,而是由數據庫服務器根據需要自動建立和刪除的。
在創建數據庫時,將自動創建一個UNDO表空間,表空間的名稱為UNDOTBS。

在自動管理方式下,如果沒有建立UNDO表空間,數據庫服務器將利用SYSTEM表空間中的回滾段管理回滾數據。
雖然數據庫服務器也能運行,但這屬於一種異常情況,將產生一條警告信息,而且這種情況將導致在SYSTEM 表空間中產生大量存儲碎片。

因此, Oracle 強烈建議創建一個UNDO表空間。

UNDO表空間的創建

有兩種創建UNDO表空間的方式,一種是在創建數據庫的同時創建UNDO表空間,另一種方式是在數據庫運行過程中,通過CREATE UNDO TABLESPACE命令來創建。
創建數據庫時,在默認情況下,將自動創建UNDO表空間UNDOTBS1。

通過CREATE命令創建UNDO表空間的命令語也與普通表空間類似,主要的區別在於使用了“ UNDOTABLESPACE”子句。
例如,以下語句用來創建大文件UNDO表空間UNDOTBS2:

CREATE UNDO TABLESPACE undotbs2 DATAFILE 'C:\Users\john\Desktop\tbs\tbs2_1.dbf' SIZE 1M REUSE EXTENT MANAGEMENT LOCAL;

UNDO表空間的切換

數據庫服務器可以采用自動方式,也可以采用手工方式管理回滾數據,這取決於初始化參數UNDO_MANAGEMENT 的設置。
如果參數值為AUTO ,則采用自動方式,如果設置為MANUAL ,則采用手工方式。

如果希望從一種方式切換到另一種方式,需要修改初始化參數UNDO_MANAGEMENT的值。

與回滾數據的管理方式有關的初始化參數還有以下幾個:
•UNDO_TABLESPACE 用來指定一個可用的UNDO表空間。

這個表空間必須存在。

如果采用手工方式,這個參數的設置無效。
在數據庫服務器運行的過程中,這個參數的值可以動態修改。
• UNDO_RETENTION(保留) 指定已經無效的UNDO數據在UNDO表空間中可以保留的時間,默認為900秒。
這個參數的值也可以動態修改。
UNDO表空間在創建之後,為了保證用戶能夠使用這個表空間首先必須將數據庫UNDO管理方式設置為自動管理方式,即確保初始化參數UNDO_MANAGENT的值為AUTO 。
另外,還需要將初始化參數UNDO_TABLESPACE的值設置為新創建的UNDO表空間。
例如:
ALTER SYSTEM SET UNDO_MANAGEMENT=auto scope=spfile;
ALTER SYSTEM SET UNDO_TABLESPACE=undotbs3;
初始化參數UNDO_MANAGEMENT的值需要在參數文件中修改,並且只有在數據服務器重新啟動之後才能起作用。
而初始化參數UNDO_TABLESPACE的值可以在參數文件中修改,也可以動態修改。
在切換UNDO表空間時,如果指定的UNDO表空間不存在,或者指定的表空間不是UNDO表空間,或者有另一個實例正在使用這個表空間,切換操作將無法正常進行。
在切換UNDO表空間之後,新的事務將使用切換後的UNDO表空間。

但是原來的UNDO表空間不會馬上失去作用,如果一個事務開始於切換表空間之前,並一直持續到切換之後,那麼它還將繼續使用原來的表空間,這樣原來的UNDO表空間需要一直等待在其中運行的事務都結束後才能失去作用。
UNDO表空間的擴展和刪除方法與普通表空間相同

表空間的擴展

在創建表空間時,需要表空間中的數據文件及其大小,表空間中的數據就寫在這些數據文件中。
如果數據文件的空間被寫滿,新的數據將無法寫入,用戶的事務可能無法順利執行。

在創建表空間或擴展表空間時應該根據以下原則l指定數據文件:
·盡量使用少量的大文件,而不要使用大量的小文件。
·同一個表空間的不同數據文件應該存放在不同的磁盤上。
·應該將數據文件和重做日志文件分別存放在不同的磁盤上。
在數據庫中能夠容納的數據文件數目是有限的,文件數目越多,在打開文件時就需要越多的內存空間。
數據文件的數目受兩個因素的制約,一是在創建數據庫時指定的MAXDATAFILES永久參數,二是初始化參數DB_FILES 。
MAXDATAFILES 永久參數指定了一個最大數據文件數目,這個數目將被記錄在控制文件中
當使用CREATE DATABASE命令創建數據庫,或者執行CREATE CONTROLFILES命令創建控制文件時,都可以通過這個參數指定數據文件的最大數量。
然而如果實際的數據文件數目超過指定的數目時,數據庫服務器將擴展控制文件,以記錄更多的數據文件。

初始化參數DB_FILES指定在數據庫中可以創建的數據文件的最大數目

當實際的數據文件數目達到這個數目時,將無法創建或添加新的數據文件。
但是初始化參數DB_FILES 的值是可以修改的。
在參數文件中為這個參數指定新值,然後重新啟動數據庫服務器,新的參數值將起作用。
DB_FILES 的值並不是越大越好,大的參數值固然允許你創建更多的數據文件,也將消耗更多的內存空間。
將數據文件存放在不同的磁盤上,並將其與重作日志文件分開存放,這種做法的目的是將磁盤的讀寫操作分散在各個磁盤上,從而減少磁盤的I/O 沖突。
擴展表空間的方法有兩種,一種是向表空間中添加新的數據文件,另一種方法是擴展現有的數據文件。
擴展數據文件又可以分為兩種方法,一種是允許數據文件自動擴展,另一種方法是手工擴展數據文件。

如何添加新的數據文件

在向表空間中添加數據文件時,通過ADD子句指定數據文件的路徑和大小。例如:

ALTER TABLESPACE ts2 ADD DATAFILE 'C:\Users\john\Desktop\tbs\ts2_1.dbf' SIZE 1M REUSE;

在添加數據文件時,通過SIZE關鍵字指定文件的大小。

如果在指定的位置已經存在一個同名的數據文件,可通過使用REUSE關鍵字將其覆蓋。
如果要向表空間中添加多個數據文件,由DATAFILE關鍵字引導多個文件,每個文件分別指定路徑和大小。
例如:

ALTER TABLESPACE ts2 ADD DATAFILE 'C:\Users\john\Desktop\tbs\ts2_3.dbf' SIZE 1M REUSE, 'C:\Users\john\Desktop\tbs\ts2_2.dbf' SIZE 1M REUSE;

對於本地管理的臨時表空間,在添加數據文件時需要通過ADD TEMPFILE子句指定新的臨時文件。
例如,以節語句用於向臨時表空間TTSl 中添加臨時文件TTS1_2.DBF:

 

 

 

 

 

 

 

 

 

 

 

 

 

 




 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved