溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進行DB2數(shù)據(jù)庫行長度超限SQL0670N錯誤的案例解析

發(fā)布時間:2021-12-30 10:55:34 來源:億速云 閱讀:231 作者:柒染 欄目:云計算

今天就跟大家聊聊有關(guān)如何進行DB2數(shù)據(jù)庫行長度超限SQL0670N錯誤的案例解析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

  開發(fā)人員在修改一個表時,DB2數(shù)據(jù)庫報SQL0670N錯誤,具體信息如下:

如何進行DB2數(shù)據(jù)庫行長度超限SQL0670N錯誤的案例解析

  這個錯誤是怎么引起的?又該怎么解決呢?

  首先我們看一下DB2數(shù)據(jù)庫自身對這個錯誤的解釋

如何進行DB2數(shù)據(jù)庫行長度超限SQL0670N錯誤的案例解析

  這里告訴我們在具有32K頁大小的表空間中,行長度不能超過32677字節(jié)。

  解決這個問題,我們自然會想到增大行長度限制的表空間的大小或設(shè)置較大的pagesize ,當然也可以考慮降低一列或多列的長度來降低行長度。

  先查看表空間的具體信息:

$ db2  list  tablespaces  show detail

表空間標識                          = 9

名稱                                = TPMS

類型                                = 系統(tǒng)管理空間

內(nèi)容                                = 任何數(shù)據(jù)

狀態(tài)                                = 0x0000

  詳細解釋:

    正常

總計頁數(shù)                            = 2084

可用頁數(shù)                            = 2084

已用頁數(shù)                            = 2084

未用頁數(shù)                            = 不適用

高水位標記(頁)                    = 不適用

頁大?。ㄒ宰止?jié)計)                  = 32768

擴展數(shù)據(jù)塊大?。摚?               = 32

預(yù)取大?。摚?                     = 32

容器數(shù)                              = 1

pagesize的值已經(jīng)比較大了,可以考慮增大表空間。

DB2現(xiàn)有表空間擴容的方法
1)直接添加一個容器的例子:

db2 " ALTER TABLESPACE TPMS ADD (DEVICE '/dev/rhdisk9' 10000) "
加容器之后DB2會有一個自動balance的過程,可能會持續(xù)幾個小時!!!  在線做有一定風(fēng)險!

2)改變現(xiàn)有容器的大小(該方法不會觸發(fā)balance,但如果表空間建立在裸設(shè)備上,則要擴沖裸設(shè)備空間):

db2 " ALTER TABLESPACE TPMS RESIZE (FILE '/conts/cont0' 2000, DEVICE '/dev/rcont1' 2000, FILE 'cont2' 2000) "

注意這種方式就是將原有的相應(yīng)容器都改成大小是2000頁

或者考慮降低一列或多列的長度來降低行長度。

例如:執(zhí)行的SQL語句為

alter table tpms.tpms_target alter column "target_value_by" set data type varchar(4000);

如果報錯,可以設(shè)一個小點的值varchar(2000),這樣就執(zhí)行成功了。如果2000還放不下,可以分成兩個表,主鍵、字段;主鍵、其他字段

varchar類型的最大長度為8000,如果有更大的數(shù)據(jù),還可以考慮long varchar或clob類型。

最后本例中的報錯是通過設(shè)置CLOB類型解決的。

alter table tpms.tpms_target alter column "target_value_by" set data type clob(4000);

補充:varchar的最大長度是由DB2的表空間決定,在DB2中一行數(shù)據(jù)的大小不能超過表空間的pagesize。而clob,dbclob和blob大小為2GB。

一般來說,為了提高性能,數(shù)據(jù)庫需要專門創(chuàng)建一個用于存放大字段的表空間,數(shù)據(jù)表的大字段列應(yīng)該將數(shù)據(jù)存放于對應(yīng)的表空間中,這是因為不經(jīng)過內(nèi)存(緩沖池)直接讀取的。

DB2的限制
1. 一個表的最大列數(shù)<=1012
2. 一個視圖的最大列數(shù)<=5000
3. 一行的最大長度(字節(jié))<=32677
4. 每個分區(qū)中表的最大尺寸(千兆字節(jié)數(shù))<=512
5. 每個分區(qū)中索引的最大尺寸(千兆字節(jié)數(shù))<=512
6. 每個分區(qū)中表的最大行數(shù)<=4000000000
7. 最長索引關(guān)鍵字(字節(jié)數(shù))<=1024
8. 一個索引關(guān)鍵字中的最大列數(shù)<=16
9. 一個表的最大索引數(shù)<=32767或存儲器
10. 一個SQL語句或視圖中所引用的最大表數(shù)<=存儲器

看完上述內(nèi)容,你們對如何進行DB2數(shù)據(jù)庫行長度超限SQL0670N錯誤的案例解析有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI