在自動儲存體表空間啟用自動重新調整大小的情況下,資料庫管理器會通過添加容器的新分割集來自動處理檔案系統變滿的情況。

資料庫系統中可以存在兩種類型的表空間:系統管理的空間(SMS)和資料庫管理的空間(DMS)。與 SMS 表空間相關聯的容器是檔案系統目錄,而這些目錄中的檔會隨著表空間中物件的增多而增大。檔會逐漸增大,直到達到其中一個容器的檔案系統限制或者達到資料庫的表空間大小限制(請參閱 SQL 和 XML 限制)。

DMS 表空間由檔容器或原始設備容器組成,它們的大小是在將容器指定給表空間時設置的。當容器中的所有空間都已被使用時,那麼認為表空間將滿。但是,與 SMS 表空間不同,您可以使用 ALTER TABLESPACE 語句來添加或擴展容器,從而允許將更多的存儲空間提供給表空間。DMS 表空間還有一項稱為自動調整大小的功能:當可以自動調整大小的 DMS 表空間中的空間被消耗時,資料庫系統可能會對該表空間擴展一個或多個檔容器。SMS 表空間具有類似于自動增長的功能,但術語「自動調整大小」專門用於 DMS。

自動重新調整表空間的大小具有下列含義:

啟用了自動調整大小的表空間具有版本 8.2.1 或更早發行版本不能識別的相關中繼資料。對這些版本嘗試使用啟用了自動調整大小的表空間的資料庫會產生故障(很有可能會返回 SQL0980C 或 SQL0902C 錯誤)。如果您嘗試連接至資料庫或者嘗試復原資料庫,那麼可能會發送錯誤。如果啟用了表空間自動重新調整大小,那麼對這些表空間禁用自動調整大小功能就會除去中繼資料,從而允許對版本 8.2.1 或更早發行版本使用該資料庫。

如果禁用自動調整大小功能,後來又啟用此功能,那麼與 INCREASESIZE 和 MAXSIZE 相關聯的值會丟失。
不能對使用原始設備容器的表空間使用此功能,也不能將原始設備容器添加至可以自動調整大小的表空間。嘗試執行這些操作會產生錯誤(SQL0109N)。如果需要添加原始設備容器,那麼必須首先禁用此功能。
重定向復原操作不能更改容器定義以包括原始設備容器。嘗試執行這種操作會產生錯誤(SQL0109N)。
由於最大大小限制了資料庫管理器自動增大表空間的方式,所以最大大小也限制了您可增大表空間的方式。也就是說,當執行向表空間添加空間的操作時,生成的大小必須小於或等於最大大小。可以使用 ALTER TABLESPACE 語句的 ADD、EXTEND、RESIZE 或 BEGIN NEW STRIPE SET 子句來添加空間。
啟用和禁用自動調整大小功能

 

缺省情況下,不會對 DMS 表空間啟用自動調整大小功能。以下語句將創建不啟用自動調整大小功能的 DMS 表空間:

 

CREATE TABLESPACE DMS1 MANAGED BY DATABASE USING (FILE '/db2files/DMS1' 10 M)要啟用自動調整大小功能,對 CREATE TABLESPACE 語句指定 AUTORESIZE YES 子句:

 

CREATE TABLESPACE DMS1 MANAGED BY DATABASE USING (FILE '/db2files/DMS1' 10 M) AUTORESIZE YES在創建 DMS 表空間之後,還可以使用帶有 AUTORESIZE 子句的 ALTER TABLESPACE 語句來啟用或禁用自動調整大小功能:

 

ALTER TABLESPACE DMS1 AUTORESIZE YES ALTER TABLESPACE DMS1 AUTORESIZE NO有另外兩個屬性 MAXSIZE 和 INCREASESIZE 與自動調整大小的表空間相關聯:

 

最大大小(MAXSIZE)

 

CREATE TABLESPACE 語句的 MAXSIZE 子句定義表空間的最大大小。例如,以下語句創建可增長至 100 百萬位元組(如果資料庫有多個資料庫分區,那麼是每個資料庫分區的大小)的表空間:

 

CREATE TABLESPACE DMS1 MANAGED BY DATABASE USING (FILE '/db2files/DMS1' 10 M) AUTORESIZE YES MAXSIZE 100 MMAXSIZE NONE 子句指定表空間沒有最大限制。表空間會逐漸增大,直到達到檔案系統限制或表空間限制(請參閱 SQL 和 XML 限制)。如果您不指定 MAXSIZE 子句,那麼在啟用了自動調整大小功能的情況下沒有最大值限制。

 

使用 ALTER TABLESPACE 語句來更改已經啟用了自動調整大小功能的表空間的 MAXSIZE 值,如下列示例中所示:

 

ALTER TABLESPACE DMS1 MAXSIZE 1 G ALTER TABLESPACE DMS1 MAXSIZE NONE如果指定了最大大小,那麼資料庫管理器強制使用的實際值可能會比指定的值略小,這是因為資料庫管理器會嘗試使容器的增長保持一致。

 

增大大小(INCREASESIZE)

 

當表空間中沒有可用擴展資料塊但是請求了一個或多個擴展資料塊時,CREATE TABLESPACE 語句的 INCREASESIZE 子句將定義用來增大表空間的空間量。可以將值指定為顯式大小或者指定為百分比,如下列示例中所示:

 

CREATE TABLESPACE DMS1 MANAGED BY DATABASE USING (FILE '/db2files/DMS1' 10 M) AUTORESIZE YES INCREASESIZE 5 M CREATE TABLESPACE DMS1 MANAGED BY DATABASE USING (FILE '/db2files/DMS1' 10 M) AUTORESIZE YES INCREASESIZE 50 PERCENT百分比值意味著每當需要增大表空間時都要計算增大大小(由 INCREASESIZE 值指定),並且增大量基於增大時表空間大小所占的百分比。例如,如果表空間大小是 20 MB 而 INCREASESIZE 值是 50%,那麼表空間第一次將增大 10 MB(增大到 30 MB),下一次將增大 15 MB。

 

如果在啟用自動調整大小功能時未指定 INCREASESIZE 子句,那麼資料庫管理器將確定要使用的適當值,該值在表空間的存留期內可能會發生變化。與 AUTORESIZE 和 MAXSIZE 一樣,可以使用 ALTER TABLESPACE 語句更改 INCREASESIZE 的值。

 

如果指定了增大大小,那麼資料庫管理器將使用的實際值可能會與您提供的值稍微有所不同。對所用值進行這種調整是為了使表空間中各容器的增大保持一致。


 

如何擴展表空間

 

對於可以自動調整大小的表空間,當所有現有空間都已被使用並請求了更多空間時,資料庫管理器會嘗試增大該表空間的大小。資料庫管理器確定可以擴展表空間中的哪些容器以便不需要進行重新平衡。資料庫管理器只擴展位於表空間圖(該圖描述表空間的儲存體佈局)的最後範圍內的那些容器,並且對它們擴展相同的數量。

 

例如,考慮如下語句:

 

CREATE TABLESPACE TS1 MANAGED BY DATABASE USING (FILE 'C:\TS1CONT' 1000, FILE 'D:\TS1CONT' 1000, FILE 'E:\TS1CONT' 2000, FILE 'F:\TS1CONT' 2000) EXTENTSIZE 4 AUTORESIZE YES請記住,資料庫管理器將每個容器的一小部分(一個擴展資料塊)用於中繼資料,以下是根據 CREATE TABLESPACE 語句為表空間創建的表空間圖。(表空間圖是表空間快照輸出的一部分。

 

表空間圖: 範圍 分割 分割區 最大 最大 起始 結束 調節 容器 編號 集 偏移 擴展資料塊 頁 分割區 分割區 [ 0] [ 0] 0 995 3983 0 248 0 4 (0,1,2,3) [ 1] [ 0] 0 1495 5983 249 498 0 2 (2,3)表空間圖表明標識為 2 或 3 的容器(E:\TS1CONT 和 F:\TS1CONT)是僅有的在圖最後面範圍內的容器。因此,當資料庫管理器自動擴展此表空間中的容器時,它只擴展這兩個容器。


 

注: 如果創建表空間時讓所有容器的大小都相同,那麼圖中只有一個範圍。在這種情況下,資料庫管理器擴展每一個容器。要防止限制為只擴展一小部分容器,創建表空間時使各容器大小相等。
如先前所討論的那樣,可以指定對表空間最大大小的限制,也可以指定值 NONE 以便不限制表空間的增大。如果指定了 NONE 或者無限制,那麼上限由檔案系統限制或表空間限制定義;資料庫管理器不會嘗試讓表空間大小增大到超過上限。但是,在達到上限之前,嘗試增大容器可能會因為檔案系統已滿而失敗。在這種情況下,資料庫管理器不會再增大表空間大小,但是會向應用程式返回「空間不足」情況。解決此情況有兩種方法:
增大已滿檔案系統上可用的空間量。
對表空間執行一些容器操作,以使這些容器不再位於表空間圖的最後。完成此任務的最簡易方法是將新的分割集添加至具有一組新容器的表空間,最佳實踐是確保所有容器的大小相同。可以使用帶有 BEGIN NEW STRIPE SET 子句的 ALTER TABLESPACE 語句來添加新的分割集。通過添加新的分割集,就會將新的範圍添加至表空間圖。借助新的範圍,資料庫管理器自動嘗試擴展的容器就會處於此新的分割集中,而舊的容器保持不變。
注: 當暫掛使用者啟動的容器操作或者正在執行後續生新平衡時,會禁用自動調整大小功能,直到落實了操作或重新平衡完成為止。

 

例如,對於 DMS 表空間,假定一個表空間具有三個大小相同的容器,並且每個容器都位於它自己的檔案系統上。當對表空間執行一些操作時,資料庫管理器就會自動擴展這三個容器。最後,其中一個檔案系統變滿了,對應的容器就不能再增大了。如果該檔案系統上不能再提供更多可用空間,那麼必須對表空間執行容器操作,使得存在問題的容器不再處於表空間圖的最後範圍內。在這種情況下,您可以添加新的分割集並指定兩個兩個容器(仍然具有空間的每個檔案系統上一個),也可以指定更多或更少容器(再次確保要添加的每個視窗大小一樣並且要使用的每個檔案系統上有足夠的空間)。當資料庫管理器嘗試增大表空間的大小時,它現在將嘗試擴展此新分割集中的容器而不會嘗試擴展舊容器。


 

監視

 

有關對 DMS 表空間自動調整大小的資訊是作為表空間監視器快照輸出的一部分顯示的。增大大小和最大大小值也包括在輸出中,如以下樣本中所示:
啟用自動調整大小 = Yes 或 No 當前表空間大小(位元組) = ### 最大表空間大小(位元組) = ### 或 NONE 增加大小(位元組) = ### 增加大小(百分比) = ### 上一次成功調整大小的時間 = YYYY?MM?DD HH:MM:SS.SSSSSS 上一次調整大小嘗試失敗 = Yes 或 No
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()