DB2表空間管理
DB2表空間應(yīng)該如何管理呢?這是很多人都提到過的問題,在解決這個問題之前,先讓我們了解一下什么是DB2表空間:
DB2表空間
數(shù)據(jù)庫中的所有數(shù)據(jù)都存儲在許多表空間中??梢哉J為表空間是孩子而數(shù)據(jù)庫是其父母,其中表空間(孩子)不能有多個數(shù)據(jù)庫(父母)。由于表空間有不同用途,因此根據(jù)它們的用途和管理方式將它們分類。根據(jù)用途有五種不同的表空間:
目錄表空間
每個數(shù)據(jù)庫只有一個目錄表空間,它是在發(fā)出 CREATE DATABASE 命令時創(chuàng)建的。目錄表空間被 DB2 命名為 SYSCATSPACE,它保存了系統(tǒng)目錄表。每當創(chuàng)建數(shù)據(jù)庫時,都會創(chuàng)建這個表空間。
常規(guī)表空間
常規(guī)表空間保存所有***的數(shù)據(jù),包括常規(guī)的表和索引。它還可以保存諸如 LOB(Large Object)之類的長數(shù)據(jù),除非這些數(shù)據(jù)顯式地存儲在長表空間中。如果某些表空間是用于非分區(qū)表的數(shù)據(jù)庫管理的空間(Database Managed Space,DMS)或者用于分區(qū)表的系統(tǒng)管理的空間,則可以將表及其索引分別放到單獨的常規(guī)表空間中。我們將在 表空間管理 小節(jié)描述 DMS 和 SMS。目錄表空間是常規(guī)表空間的一個例子。缺省情況下,目錄表空間是數(shù)據(jù)庫創(chuàng)建期間所創(chuàng)建的***一個常規(guī)表空間。
長表空間
長表空間像常規(guī)表空間一樣存儲***數(shù)據(jù),包括 LOB。這種表空間必須是 DMS,這也是默認類型。長表空間中創(chuàng)建的表比常規(guī)表空間中的表大。大型表可支持每個數(shù)據(jù)頁超過 255 行,從而提高數(shù)據(jù)頁上的空間利用率。當創(chuàng)建數(shù)據(jù)庫時,DB2 創(chuàng)建一個名為 USERSPACE1 的長表空間。
系統(tǒng)臨時表空間
系統(tǒng)臨時表空間用于存儲 SQL 操作(比如排序、重組表、創(chuàng)建索引和連接表)期間所需的內(nèi)部臨時數(shù)據(jù)。每個數(shù)據(jù)庫必須至少有一個系統(tǒng)臨時表空間。隨數(shù)據(jù)庫創(chuàng)建的缺省系統(tǒng)臨時表空間名為 TEMPSPACE1。
用戶臨時表空間
用戶臨時表空間存儲已聲明的全局臨時表。創(chuàng)建數(shù)據(jù)庫時不存在用戶臨時表空間。至少應(yīng)當創(chuàng)建一個用戶臨時表空間,以允許定義已聲明的臨時表。用戶臨時表空間是可選的,缺省情況下不創(chuàng)建。
DB2表空間管理
可以用兩種不同的方式管理DB2表空間:
系統(tǒng)管理的空間(SMS)
操作系統(tǒng)管理 SMS 表空間。容器被定義成常規(guī)操作系統(tǒng)文件,并且是通過操作系統(tǒng)調(diào)用訪問的。這意味著以下任務(wù)全部由常規(guī)操作系統(tǒng)功能來處理:
I/O 緩沖
根據(jù)操作系統(tǒng)慣例分配空間
必要時自動擴展表空間
但是,不能從 SMS 表空間刪除容器,并且僅限于將新的容器添加到分區(qū)的數(shù)據(jù)庫。前一節(jié)中所說明的那三個缺省表空間都是 SMS。
數(shù)據(jù)庫管理的空間(DMS)
DMS 表空間是由 DB2 管理的??梢詫⑷萜鞫x成文件(在創(chuàng)建表空間時將把給定的大小全部分配給它們)或設(shè)備。分配方法和操作系統(tǒng)允許多少 I/O,DB2 就可以管理多少 I/O??梢酝ㄟ^使用 ALTER TABLESPACE 命令來擴展容器。還可以釋放未使用的那部分 DMS 容器(從 V8 開始)。
【編輯推薦】