1. 程式人生 > >DB2表空間內容整理

DB2表空間內容整理

DB2 的表空間按管理方式分為兩種:系統管理空間(System Management  

Space,SMS)和資料庫管理空間(Database Management Space,DMS)。 
    
   按型別分為:規則表空間、長整數表空間、系統臨時表空間、使用者臨時表空間 

。其中長整數表空間只能是DMS的。 

   規則表空間中包含使用者資料的表。預設使用者表空間名為USERSPACE1,索引也存 

儲在規則表空間中,另外系統目錄表也放在規則表空間中。 

   預設的系統目錄表空間名為SYSCATSPACE。 

   臨時表空間分為系統臨時表空間和使用者臨時表空間。系統臨時表空間用來儲存 

各種資料操作(排序、重組表、建立索引、連線表)中所需的內部臨時資料,雖 

然可以建立任意多個系統臨時表空間,但建議使用者只使用大多數表所使用的頁大 

小建立一個,預設系統臨時表空間名為TEMPSPACE1。使用者臨時表空間用來儲存已 

說明全域性臨時表(已說明全域性臨時表儲存的是應用程式臨時資料)。使用者臨時表 

空間不是在資料庫建立時預設建立的。 

   SMS每個容器是作業系統的檔案空間中的一個目錄;DMS每個容器是一個固定的 

、預分配的檔案,或是物理裝置。 

   SMS的管理比較簡單,由作業系統自動管理,空間的大小隨資料量的變化系統 

自動調整。 

   DMS是由資料庫管理的,空間大小在建立時確定,空間不夠時要手工新增或刪 

除部分資料以釋放空間。 

   大多數情況下,DMS的效能比SMS好。 

   用命令列方式建立SMS表空間的簡單語法: 
CREATE TABLESPACE <NAME> MANAGED BY SYSTEM USING ('<path>;') 

   用命令列方式建立DMS表空間的簡單語法: 
CREATE TABLESPACE <NAME>  MANAGED BY DATABASE USING (FILE '<path>;'  

<size>;) 

例一:在OS/2或Windows NT上建立一個SMS表空間: 
CREATE TABLESPACE RESOURCE MANAGED BY SYSTEM 
  USING ('d:/acc_tbsp','e:/acc_tbsp','f:/acc_tbsp') 

例二:在OS/2上建立一個DMS表空間,使用各自有5000頁的兩個檔案容器: 
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE 
  USING (FILE 'd:/db2data/acc_tbsp' 5000, 
         FILE 'e:/db2data/acc_tbsp' 5000) 

例三:在UNIX上建立一個DMS表空間,使用各有10000頁的3個邏輯卷: 
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE 
  USING (DEVICE '/dev/rdblv6' 10000, 
         DEVICE '/dev/rdblv7' 10000, 
         DEVICE '/dev/rdblv8' 10000) 
  OVERHEAD 24.1 
  TRANSFERRATE 0.9 
上面語句中提到的UNIX裝置必須已經存在,且例項擁有者和SYSADM組必須能夠寫 

入它們。 

例四:在UNIX分割槽資料庫中稱為ODDNODEGROUP的節點組上建立一個DMS表空間: 
CREATE TABLESPACE PLANS MANAGED BY DATABASE 
  USING (DEVICE '/dev/HDISK0' 10000, DEVICE '/dev/n1hd01' 40000) ON  

NODE 1 
        (DEVICE '/dev/HDISK0' 10000, DEVICE '/dev/n3hd03' 40000) ON  

NODE 3 
        (DEVICE '/dev/HDISK0' 10000, DEVICE '/dev/n5hd05' 40000) ON  

NODE 5 
在此例中,ODDNODEGROUP節點組由編號為1、3、5的資料庫分割槽組成,在所有資料 

庫分割槽上,都使用具有10000個4KB頁的 /dev/hdisk0 裝置,另外,還為每個資料 

庫分割槽說明了一個包含40000個4KB大小的頁的裝置。 

例五:在UNIX系統上,建立一個具有8KB頁大小的SMS表空間: 
CREATE TABLESPACE SMS8K PAGESIZE 8192 
  MANAGED BY SYSTEM 
  USING ('FSMS_8K_1') 
  BUFFERPOOL BUFFPOOL8K 
相關的緩衝池也必須具有相同的8KB頁大小。另外,建立的表空間只有在所引用的 

緩衝池被啟用後才能使用。 

例六:建立系統臨時表空間: 
  系統臨時表只能儲存在系統臨時表空間中,所以資料庫必須始終至少有一個系 

統臨時表空間。 
CREATE SYSTEM TEMPORARY TABLESPACE tmp_tbsp 
  MANAGED BY SYSTEM 
  USING ('d:/tmp_tbsp','e:/tmp_tbsp') 
建立系統臨時表空間時,只能指定IBMTEMPGROUP節點組。 

例七:建立使用者臨時表空間: 
  使用者臨時表空間用來儲存已說明的臨時表。 
CREATE USER TEMPORARY TABLESPACE usr_tbsp 
  MANAGED BY DATABASE 
  USING (FILE 'd:/db2data/user_tbsp' 5000, 
         FILE 'e:/db2data/user_tbsp' 5000) 
與常規表空間一樣,使用者臨時表空間可以在除IBMTEMPGROUP之外的任何節點組中 

建立。建立使用者臨時表空間使用的預設節點組是IBMDEFAULTGROUP。DECLARE  

GLOBAL TEMPORARY TABLE 語句定義提供在使用者臨時表空間中使用的已說明臨時表 

。 

例八:將兩個新裝置容器新增到UNIX上的一個表空間中: 
ALTER TABLESPACE RESOURCE 
  ADD (DEVICE '/dev/rhd9' 10000, 
       DEVICE '/dev/rhd10' 10000) 

例九:把UNIX上的表空間中的兩個裝置容器改變大小(由1000頁改為2000頁) 
ALTER TABLESPACE HISTORY 
  RESIZE (DEVICE '/dev/rhd7' 2000, 
          DEVICE '/dev/rhd8' 2000) 

例十:在UNIX表空間中,擴充兩個裝置容器(原本各含1000頁) 
ALTER TABLESPACE HISTORY 
  EXTEND (DEVICE '/dev/rhd11' 1000, 
          DEVICE '/dev/rhd12' 1000) 
操作後兩個裝置的大小都從1000頁擴充至2000頁。不能縮小容器的大小。 

可以給現存表空間重新命名,而無須關心該表空間中的個別物件。重命名錶空間時 

,將更改所有引用該表空間的目錄記錄。不能重新命名SYSCATSPACE表空間;不能重 

命名處於前滾暫掛或正在前滾狀態的表空間。 

刪除表空間時,也會刪除該表空間中的所有資料,釋放容器,去除目錄項,並導 

致該表空間中定義的所有物件都被刪除或標記為無效。可以通過刪除表空間來重 

新使用該表空間中的容器,但是在試圖重新使用這些容器之前,必須COMMIT該 

DROP TABLESPACE命令。

問題20、SMS與DMS的對比

        特性                                SMS        DMS
能夠在表空間中動態增加容器的數目嗎                N        Y

能夠把索引資料存放到不同表空間的表中嗎                N        Y
能夠把大物件資料存放到不同表空間的表中嗎        N        Y
表可以分散存放到多個表空間中嗎                        N        Y
僅在需要時才分配空間嗎                        Y        N
表空間可以被放在不同的磁碟中嗎                        Y        N
建立之後,區段大小能夠改變嗎                        N        N

問題1、表空間、臨時表空間頁面大小的問題

解決方案:新建一個緩衝區、刪除表空間、新建空間、新建臨時表空間

CREATE BUFFERPOOL pf16_2
  
IMMEDIATE
  ALL DBPARTITIONNUMS
  
SIZE 100000
  
NUMBLOCKPAGES 0
  
PAGESIZE 16 K;

 

Drop tablesapce EDWADM

 

CREATE LARGE TABLESPACE EDWADM
  
IN DATABASE PARTITION GROUP IBMDEFAULTGROUP
  
PAGESIZE 16K
  
MANAGED BY DATABASE 
  USING
   (Device '/dev/redwadm' 900000
   
)
  
EXTENTSIZE 32
  
PREFETCHSIZE 32
  
BUFFERPOOL BP16
  
OVERHEAD 24.10
  
TRANSFERRATE 0.90
  
DROPPED TABLE RECOVERY OFF;

 

CREATE TEMPORARY TABLESPACE MYSYSTEMP1
  
IN DATABASE PARTITION GROUP IBMTEMPGROUP
  
PAGESIZE 16K
  
MANAGED BY SYSTEM 
  USING
   ('/dw/edwdata/mysystemp'
   
)
  
EXTENTSIZE 32
  
PREFETCHSIZE 32
  
BUFFERPOOL BP16
  
OVERHEAD 24.10
  
TRANSFERRATE 0.90
  
DROPPED TABLE RECOVERY OFF;

 

問題3、重建使用者預設表空間的問題

Drop TABLESPACE USERSPACE1;

 

CREATE TABLESPACE USERSPACE1
  
IN DATABASE PARTITION GROUP IBMDEFAULTGROUP
  
PAGESIZE 16K
  
MANAGED BY SYSTEM 
  USING
   ('/dw/edwdata/userspace1'
   
)
  
EXTENTSIZE 32
  
PREFETCHSIZE 32
  
BUFFERPOOL BP16
  
OVERHEAD 24.10
  
TRANSFERRATE 0.90
  
DROPPED TABLE RECOVERY OFF;

問題4、表空間維護常用操作

--更改表空間大小

ALTER TABLESPACE edwadm RESIZE (device '/dev/redwadm' 900000);

ALTER TABLESPACE TS1 RESIZE (FILE '/conts/cont0' 2000, DEVICE '/dev/rcont1' 2000, FILE 'cont2' 2000);

ALTER TABLESPACE TS1 RESIZE (ALL 2000);

db2 " ALTER TABLESPACE PAYROLL ADD (DEVICE '/dev/rhdisk9' 10000) ";

---重命名錶空間

RENAME TABLESPACE RESOURCE TO RES1