1. 程式人生 > 其它 >DB2建表時報錯:DB2 SQL Error: SQLCODE=-286, SQLSTATE=42727

DB2建表時報錯:DB2 SQL Error: SQLCODE=-286, SQLSTATE=42727

技術標籤:errorsqldb2資料庫

問題描述:

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四種選擇,相對應的欄位數、行長和表大小見下表:

4K8K16K32K
表的最多欄位數(列)500101210121012
表每行最大長度(位元組)400581011629332677
表的最大大小( GB)64128256512

根據報錯中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 表空間’ 即可