天天看點

[IBM][CLI Driver] SQL0270N 函數不受支援(原因碼:"75")。 SQLSTATE=42997

db2 update dbm cfg  using FEDERATED  yes

自動維護 (AUTO_MAINT) = ON

自動資料庫備份 (AUTO_DB_BACKUP) = OFF

自動表維護 (AUTO_TBL_MAINT) = ON

自動 runstats (AUTO_RUNSTATS) = ON

自動語句統計資訊 (AUTO_STMT_STATS) = ON

自動統計資訊概要分析 (AUTO_STATS_PROF) = ON

自動概要檔案更新 (AUTO_PROF_UPD) = ON

自動重組 (AUTO_REORG) = ON

紅色的有沖突

啟用自動表和索引重組

DB2 V9 可以對表和是以進行自動重組。要進行高效率的資料通路和獲得最佳工作負載性能,具有組織良好的表資料是很關鍵的。在對表資料進行許多更改之後,邏輯上連續的資料可能會位于不連續的實體資料頁上,在許多插入操作建立了溢出記錄時尤其如此。按這種方式組織資料時,資料庫管理器必須執行其他讀操作才能通路順序資料。另外,在删除大量行後,也需要執行其他的讀操作。表重組操作會整理資料碎片來減少浪費的空間,并對行進行重新排序以合并溢出記錄,進而加快資料通路速度并最終提高查詢性能。還可以指定根據特定索引來重新排序資料,以便查詢通過最少次資料讀取操作就可以通路資料。既可重組系統目錄表,也可以重組資料庫表。由 RUNSTATS 收集的統計資訊與其他資訊一起來顯示表中的資料分發情況。特别是,通過分析這些統計資訊可以知道何時需要執行哪種類型的重組。自動重組通過使用 REORGCHK 公式來确定何時需要對表進行重組。它會定期評估已經更新了統計資訊的表,以便了解是否需要重組。如果需要重組,則它會在内部排程對表進行傳統重組。這将要求執行應用程式功能而不對正在重組的表進行寫通路。可以使用 AUTO_REORG、AUTO_TBL_MAINT 和 AUTO_MAINT 資料庫配置參數來啟用或禁用自動重組功能部件。在分區資料庫環境中,确定執行自動重組和啟動自動重組是在目錄分區上完成的。隻需要在目錄分區上啟用資料庫配置參數。将在目标表所在的所有資料庫分區上運作重組。如果您不太确定何時以及如何重組表和索引,則可以将自動重組作為整個資料庫維護方案的一部分。

統計資訊概要檔案是由 RUNSTATS 實用程式提供了一個選項來注冊并使用的,該檔案是一組選項,這些選項指定要對特定表收集的統計資訊,例如,表統計資訊、索引統計資訊或分布統計資訊。此功能部件簡化了統計資訊收集,它允許您存儲在發出 RUNSTATS 指令時指定的一些選項,進而,可以對表反複收集相同的統計資訊而不必重新輸入指令選項。無論實際上是否正在收集統計資訊,都可以注冊或更新統計資訊概要檔案。例如,要同時注冊概要檔案和收集統計資訊,可發出帶有 SET PROFILE 選項的 RUNSTATS 指令。要在實際上并沒有收集統計資訊的情況下隻注冊概要檔案,可發出帶有SET PROFILE ONLY 選項的 RUNSTATS 指令。要使用已經注冊的統計資訊概要檔案來收集統計資訊,發出 RUNSTATS 指令,并且隻指定表名和 USE PROFILE 選項。

統計資訊概要檔案還可以由 DB2 自動統計資訊概要分析自動生成。當啟用了此功能時,會收集有關資料庫活動的資訊,并将這些資訊存儲在查詢回報倉庫中。可根據此資料來生成統計資訊概要檔案。啟用此功能可以緩解統計資訊與特定工作負載相關的不确定性問題,并可以收集最少的統計資訊集來提供最佳的資料庫工作負載性能。可以将此功能與自動收集統計資訊功能配合使用,後一項功能會根據自動生成的統計資訊概要檔案中包含的資訊來自動安排統計資訊維護。要啟用此功能,需要已經通過設定适當的配置參數啟用了表的自動維護。AUTO_STATS_PROF 配置參數将激活查詢回報資料的收集,而 AOTO_PROF_UPD 配置參數将激活生成統計資訊概要檔案以供自動收集統計資訊使用。

需要注意的是,生成統計資訊概要檔案不太适合 OLTP 環境中,比較适合 OLAP(運作使用許多謂詞的大而複雜的查詢、謂詞列的資料中經常具有關聯以及對幾個表進行連接配接和分組)環境中使用。另外,自動生成統計資訊概要檔案隻能以 DB2 串行方式激活,而對于聯合環境、多分區 MPP 環境以及啟用了分區内并行性的環境中的查詢将禁用此功能。

接下來為了示範統計資訊概要檔案不能在聯合環境中使用,我們先把 DBM CFG 中的 FEDERATED 配置參數設定成 ON,打開聯合系統,送出,斷開所有連接配接,重新開機示例,在 DB2CLP 視窗環境中,輸入 UPDATE DBM CFG 等指令,具體如清單 1 所示:

清單 1. 更新 DBM CFG 參數

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

C:> db2 update dbm cfg  using FEDERATED  yes

DB20000I  UPDATE DATABASE MANAGER CONFIGURATION指令成功完成。

SQL1362W  為立即修改而送出的一個或多個參數未動态更改。直到下次啟動應用程式或發出

TERMINATE 指令之後,客戶機更改才會生效。直到下一條 DB2START指令之後,伺服器更改才會生效。 

C:> db2 terminate

DB20000I  TERMINATE指令成功完成。

C:> db2 force applications all

DB20000I  FORCE APPLICATION指令成功完成。

DB21024I  該指令為異步的,可能不會立即生效。

C:> db2stop

2007-09-23 19:54:07     0   0   SQL1064N  DB2STOP 處理成功。

SQL1064N  DB2STOP 處理成功。

C:> db2start

2007-09-23 19:54:16     0   0   SQL1063N  DB2START 處理成功。

SQL1063N  DB2START 處理成功。

接下來我們連上資料庫,對清單1中建立的示例資料庫 DB2TEST1 啟用自動統計資訊概要分析和自動概要檔案更新功能,在 DB2CLP 視窗環境中 ,連接配接上示例資料庫 DB2TEST1,通過發出 UPDATE DB CFG 指令修改自動統計資訊概要分析(AUTO_STATS_PROF)、自動概要檔案更新(AOTO_PROF_UPD)參數,将其值置為 ON,具體如清單 2 所示:

清單 2. 更新 DB CFG 參數

1

2

3

4

5

6

7

8

9

10

11

12

13

14

C:> db2 connect to db2test1

資料庫連接配接資訊

資料庫伺服器         = DB2 / NT 9.1.0

SQL 授權辨別         = RHETTE

本地資料庫别名       = DB2TEST1

C:> db2 update db cfg using AUTO_STATS_PROF ON

SQL0270N  函數不受支援(原因碼 = " 75 " )。  SQLSTATE = 42997

C:> db2 update db cfg using AUTO_PROF_UPD ON

SQL0270N  函數不受支援(原因碼 = " 75 " )。  SQLSTATE = 42997

指令執行失敗,報 SQL0270N 錯誤,通過查詢 DB2 幫助得知這是由于在聯合系統中自動統計資訊概要分析和自動概要檔案更功能,我們在 DB2CLP 視窗中發出“DB2 ? SQL錯誤号”指令查詢 SQL0270N(原因碼 = " 75 " )對應的錯誤,具體如清單 3 所示:

清單 3. 更新 DB CFG 參數

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

C:> db2 ? SQL0270N

SQL0270N 函數不受支援(原因碼 = "《原因碼》")。

解釋:

因為該語句違反由下列原因碼所訓示的限制,是以不能處理它:

1 主鍵、每個唯一限制以及每個唯一索引必須包含表的所有分布列(這些列可以按任何順序出現)。

2 不支援更新分布鍵列值。

3 如果定義外鍵時指定了 ON DELETE SETNULL,則它不能包含任何可空分布鍵列。由于定義這樣

的限制将導緻嘗試更新分布鍵列,是以這是原因碼 2 的特殊情況。

. . . . . . . . . . . . . . . . . . . .

75 多資料庫分區系統、啟用了 SMP的系統或聯合系統不支援自動統計資訊概要分析功

能。

83 無法處理該語句,因為 DATA CAPTURE CHANGES 與COMPRESS YES 不相容。

84 分區資料庫不能啟用自動存儲器。

85 不能将分區添加至啟用了自動存儲器的單一分區資料庫。

87 不能将下列類型的表定義為分區表:類型表、登台表、使用者臨時表和範圍叢集表。

. . . . . . . . . . . . . . . . . . . .

使用者響應:

與原因碼對應的操作是:

. . . . . . . . . . . . . . . . . . . .

75 通過将資料庫配置參數 AUTO_STATS_PROF 和AUTO_PROF_UPD 設定為OFF,對此資料庫禁用

自動統計資訊概要分析功能。 或者将系統更改為位于非聯合的、未啟用 SMP的單個資料庫分區上的系統。

. . . . . . . . . . . . . . . . . . . .

sqlcode :   -270

sqlstate :  42997

通過幫助我們的使用者響應,我們需要把系統更改為非聯合的。接下來我們把我們先把DBM CFG中的FEDERATED配置參數設定成NO,關閉聯合系統,送出,斷開所有連接配接,重新開機示例,在DB2CLP視窗環境中,輸入UPDATE DBM CFG 等指令,具體如清單12所示:

清單 4. 更新 DBM CFG 參數

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

C:> db2 update dbm cfg using  FEDERATED no

DB20000I  UPDATE DATABASE MANAGER CONFIGURATION指令成功完成。

SQL1362W  為立即修改而送出的一個或多個參數未動态更改。直到下次啟動應用程式

或發出TERMINATE 指令之後,客戶機更改才會生效。直到下一條 DB2START指令之後,伺服器更改才會生效。

C:> db2 terminate

DB20000I  TERMINATE指令成功完成。

C:> db2 force applications all

DB20000I  FORCE APPLICATION指令成功完成。

DB21024I  該指令為異步的,可能不會立即生效。

C:> db2stop

2007-09-23 19:42:49     0   0   SQL1064N  DB2STOP 處理成功。

SQL1064N  DB2STOP 處理成功。

C:> db2start

2007-09-23 19:42:55     0   0   SQL1063N  DB2START 處理成功。

SQL1063N  DB2START 處理成功。

接下來我們再次連上資料庫,對示例資料庫DB2TEST1啟用自動統計資訊概要分析和自動概要檔案更新功能,在 DB2CLP 視窗環境中 ,連接配接上示例資料庫 DB2TEST1,通過發出 UPDATE DB CFG 指令修改自動統計資訊概要分析(AUTO_STATS_PROF)、自動概要檔案更新(AOTO_PROF_UPD)參數,将其值置為 ON,具體如清單 13 所示:

清單 5. 更新 DB CFG 參數

1

2

3

4

5

6

7

8

9

10

11

12

13

14

C:> db2 connect to db2test1

資料庫連接配接資訊

資料庫伺服器         = DB2 / NT 9.1.0

SQL 授權辨別         = RHETTE

本地資料庫别名       = DB2TEST1

C:> db2 update db cfg using AUTO_STATS_PROF ON

DB20000I  UPDATE DATABASE CONFIGURATION指令成功完成。

C:> DB2 UPDATE  DB CFG USING AUTO_PROF_UPD ON

DB20000I  UPDATE DATABASE CONFIGURATION指令成功完成。

這樣我們就成功地啟用自動統計資訊概要分析和自動概要檔案更新功能,可以通過 GET DB CFG 檢視配置參數,具體如清單 6 所示:

清單 6. 檢視示例資料庫 DB2TEST1 的配置參數

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

C:> db2 get db cfg for db2test1

資料庫  的資料庫配置

資料庫配置發行版級别                                    = 0x0b00

資料庫發行版級别                                        = 0x0b00

資料庫地域                                              = CN

資料庫代碼頁                                            = 1386

資料庫代碼集                                            = GBK

資料庫國家/地區代碼                                    = 86

資料庫整理順序                                          = UNIQUE

備用整理順序                              ( ALT_COLLATE ) =

資料庫頁大小                                            = 4096

. . . . . . . . . . . . . . . . . . . .

自動維護                                   ( AUTO_MAINT ) = ON

自動資料庫備份                       ( AUTO_DB_BACKUP ) = ON

自動表維護                           ( AUTO_TBL_MAINT ) = ON

自動 runstats                       ( AUTO_RUNSTATS ) = ON

自動統計資訊概要分析              ( AUTO_STATS_PROF ) = ON

自動概要檔案更新                  ( AUTO_PROF_UPD ) = ON

自動重組                       ( AUTO_REORG ) = OFF

接下來繼續在DB2CLP視窗中中打開自動重組功能,輸入UPDATGE DB CFG指令,把AUTO_REORG參數置成ON,打開自動重組功能(自動維護和自動表維護等父項開關必須都打開才有效),具體如清單 7 所示:

清單 7. 更新 DB CFG 參數

1

2

C:> DB2 UPDATE  DB CFG USING AUTO_REORG ON

DB20000I  UPDATE DATABASE CONFIGURATION指令成功完成。

指令成功完成,這樣我們就打開了自動重組功能。另外,同本文的第一部分和第二部分一樣,對自動重組、自動統計資訊概要分析、自動概要檔案更新也可以在圖形化界面的配置自動維護中進行。

在控制中心在示例資料庫DB2TEST1上右鍵單擊,選擇自動維護視窗, 打開,在第五個頁面“選擇要配置的維護活動”頁面中對“整理表和索引資料碎片( REORG )”這條記錄中的“自動化”列打上勾即可,具體界面如圖12所示:

圖 1. 配置自動維護視窗選擇配置的維護活動頁面

輕按兩下“整理表和索引資料碎片( REORG )”記錄,或者選中這條記錄并單擊頁面下面的“配置設定”按鈕,就會打開“配置設定-整理資料碎片( REORG )”視窗,在其第一個标簽頁“表作用域”中,可以指定要将資料庫中的哪些表用于自動重組。要排除特定表,使用“選擇的表”選項并辨別要使用國旅排除哪些表。要限制将進行自動重組的表的大小,可以指定大小限制。具體界面如圖13所示:

圖 2. 配置設定 - - 整理資料碎片( REORG )

在其第二個标簽頁“重組選項”中,可以指定索引重組方式是使用聯機還是脫機,聯機的方式允許對索引進行寫通路,聯機索引重組将在聯機維護視窗中運作,注意,如果不允許對表進行寫通路,則将使用脫機方式并且将在脫機維護視窗中運作索引重組。脫機方式允許對索引進行讀通路。脫機索引重組将在脫機維護視窗中運作,注意,如果不允許對表進行讀通路,則将在不進行通路的情況下重試脫機索引重組。

另外,本視窗還可以指定要用于壓縮資料字典的選項,預設是保留,也可以重新選擇成重建。具體如圖14所示:

圖 3. 配置設定 - - 整理資料碎片( REORG )

關于配置自動維護視窗的其他頁面和上面所述的差不多,不再累述。