Backup

db2ckbkp - 如何確定哪些表空間是臨時表空間

  • May 20, 2021

我正在編寫一個腳本來從備份中恢復數據庫。腳本應該需要盡可能少的輸入來完成這個任務(以一種有效的方式)。restore 命令採用並行度參數。想法是將此參數設置為不是臨時表空間的表空間的數量。

我發現 db2ckbkp 命令不僅會驗證備份文件,還會輸出大量(有用的)資訊。

目前我打算用 -t 執行它來獲取表空間資訊。我只是難以解釋列印的資訊。在為其中一個表空間列印的輸出之後。

       USERSPACE1
             tbspInImage: T

                      ID: 2
                   flags: 3122
                  flags2: 400
             extent_size: 32
           prefetch_size: 32
                 version: 9
                 flavour: 6
                   state: 0
     statechangeobjectid: 0
       statechangepoolid: 0
                 LifeLSN: 00000000000005C2
          LoadPendingLSN: 0000000000000000
         LoadRecoveryLSN: 0000000000000000
                BeginLSN: 0000000000000000
                  EndLSN: 0000000000000000
              StordefLSN: 0000000000000000
         Full Backup LSN: 0000000000000000
         Last Backup LSN: 0000000000000000
        Full Backup Time:  00000000 = "19691231180000"
        Last Backup Time:  00000000 = "19691231180000"
              TotalPages: 8192
            UseablePages: 8160
             reorgPoolID: 0
              reorgObjID: 0
          poolReorgCount: 0
         # of containers: 1
           current_group: 0
               cont_csum: 2004299914
     current_map_entries: 1
               page_size: 4096
                map_csum: 4294967294
    tsp rfwd encountered: 16

           Container CB
                            Type: 6
                      TotalPages: 8192
                     UsablePages: 8160
              # of OS rsvd bytes: 512
                   Page 0 offset: 131072
                      Tag offset: 512
                   Extent offset: 0
                            Name: /data/devinsth/NODE0000/.../T0000002/C0000000.LRG

要確定它是否是臨時空間,flavour不適合,因為它對於所有表空間都是 6。然而,容器類型對於臨時空間似乎有所不同。Type臨時表空間為 0,所有其他表空間為 6。

當我使用-a參數時,我得到了另一條資訊。

   00003A91: SYSCATSPACE
           ID:          0  Type:                 2 Datatype:           0
           Size:    29932  NumContainers:        1 tbspInImage:        1

   00003AC5: TEMPSPACE1
           ID:          1  Type:                 1 Datatype:          16
           Size:        1  NumContainers:        1 tbspInImage:        1

   00003AF9: USERSPACE1
           ID:          2  Type:                 2 Datatype:          32
           Size:       96  NumContainers:        1 tbspInImage:        1

   00003B2D: TS_DAT_SPF_4K
           ID:          3  Type:                 2 Datatype:          32
           Size:     7776  NumContainers:        1 tbspInImage:        1

   00003B61: TS_IND_SPF_4K
           ID:          4  Type:                 2 Datatype:          32
           Size:       96  NumContainers:        1 tbspInImage:        1

   00003B95: TS_LOB_SPF_4K
           ID:          5  Type:                 2 Datatype:          32
           Size:       96  NumContainers:        1 tbspInImage:        1

   00003BC9: TS_TMP_4K
           ID:          6  Type:                 1 Datatype:          16
           Size:        1  NumContainers:        1 tbspInImage:        1

   00003BFD: TS_USR_TMP_BAT_4K
           ID:          7  Type:                 1 Datatype:          64
           Size:        1  NumContainers:        1 tbspInImage:        1

我可以使用此表中的類型嗎?臨時表空間似乎為 1,所有其他表空間似乎為 2。我試圖在網際網路上找到解釋 db2ckbkp 輸出的文件,但沒有成功。對此問題的任何幫助表示讚賞。

表空間內容類型(第二個範例中的數據類型)定義在sqlutil.h

/* table space contents                                                       */
#define SQLB_TBS_ANY 0x0               /* All permanent data. Regular table   */
                                      /* space.                              */
#define SQLB_TBS_LARGE 0x20            /* All permanent data. Large table     */
                                      /* space.                              */
#define SQLB_TBS_LONG SQLB_TBS_LARGE   /* Kept for compatibility.             */
#define SQLB_TBS_SYSTMP 0x10           /* system temp data                    */
#define SQLB_TBS_USRTMP 0x40           /* user temp data                      */

所以那些數據類型為 16 (0x10) 的將是我應該認為的系統臨時表空間。

但是,我認為使用非系統臨時表空間的數量來確定恢復並行度沒有多大意義。我建議把它留給 DB2 來決定。如果您仍想超越 DB2,您最好使用 CPU 核心數、I/O 並行度或容器數作為調整的基礎。

引用自:https://dba.stackexchange.com/questions/50579