Backup
db2ckbkp - 如何確定哪些表空間是臨時表空間
我正在編寫一個腳本來從備份中恢復數據庫。腳本應該需要盡可能少的輸入來完成這個任務(以一種有效的方式)。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 並行度或容器數作為調整的基礎。