DB2建表時報錯:DB2 SQL Error: SQLCODE=-286, SQLSTATE=42727
阿新 • • 發佈:2021-01-07
問題描述:
DB2在建立一個200多列的大資料表時,報錯:
SQL 錯誤 [42727]: A default table space could not be found with a page size of at least “16384” that authorization ID “PAS” is authorized to use… SQLCODE=-286, SQLSTATE=42727, DRIVER=4.16.53
問題分析
經過各處查詢,發現是由於頁空間不夠影響的。
使用不同的頁大小,相應表每行的最大長度也有所不同。
DB2的緩衝池或表空間的頁大小可有4K、8K、16K和32K四種選擇,相對應的欄位數、行長和表大小見下表:
4K | 8K | 16K | 32K | |
---|---|---|---|---|
表的最多欄位數(列) | 500 | 1012 | 1012 | 1012 |
表每行最大長度(位元組) | 4005 | 8101 | 16293 | 32677 |
表的最大大小( GB) | 64 | 128 | 256 | 512 |
根據報錯中16384數字可以知道,需要使用32K的緩衝池表空間大小。
解決方法:
第一步:先連線db2資料庫,建立一個32k大小的快取池。
db2 "CREATE BUFFERPOOL PAS_PB_32K IMMEDIATE SIZE 250 AUTOMATIC PAGESIZE 32K"
第二步:通過以下命令,檢視新增的快取池有沒有成功新增
db2 "select * from syscat.bufferpools"
第三步:如果已經成功新增,再建立一個帶有32k快取池的表空間
db2 "CREATE LARGE TABLESPACE TBS_SJY PAGESIZE 32K MANAGED BY DATABASE USING ( FILE 'F:\YCPAS\PAS_DATA\PAS_SPACE_DATA\TBS_SJY1' 30G) EXTENTSIZE 32 OVERHEAD 10.5 PREFETCHSIZE 64 TRANSFERRATE 0.14 BUFFERPOOL PAS_PB_32K DROPPED TABLE RECOVERY ON"
- 建立表空間名:TBS_SJY
- 建立的表路徑路徑:‘F:\YCPAS\PAS_DATA\PAS_SPACE_DATA\TBS_SJY1’
- 建立的表空間大小: 30G
如需調整,根據各自的需求進行調整即可。
第四步:再執行相應建立表的語句,指定新建的表空間TBS_SJY ,就可以執行成功了。
CREATE TABLE TABLENAME (
列1 VARCHAR(1) ,
...
列n VARCHAR(1)
) in TBS_SJY
指定表空間只需在建表的語句後面新增上‘ in 表空間’ 即可