<samp id="f6fwk"><ins id="f6fwk"></ins></samp>
<menuitem id="f6fwk"></menuitem>
    1. <menuitem id="f6fwk"></menuitem>
      <font id="f6fwk"><menuitem id="f6fwk"><sup id="f6fwk"></sup></menuitem></font>

      <s id="f6fwk"><source id="f6fwk"></source></s>

      1. 電腦知識
        關鍵詞:路由器 學習認識睡眠,待機、休眠、的不同點! 破解Win 7系統的密碼 電腦硬件 系統使用

        文章閱讀:

        文章分享

        更多
        您現在的位置:電腦知識 >> IT技術 >> 數據庫技術 >> 瀏覽文章

        DB2數據庫SQL0670N錯誤案例解析

        2013-12-29 19:26:09 本站原創 佚名 【字體: {SQL_我要評論()}

         開發人員在修改一個表時,DB2數據庫報SQL0670N錯誤,具體信息如下:

        DB2數據庫SQL0670N錯誤案例解析

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

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

        DB2數據庫SQL0670N錯誤案例解析

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

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

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

         

        $ db2  list  tablespaces  show detail

         

        表空間標識                          = 9

        名稱                                = TPMS

        類型                                = 系統管理空間

        內容                                = 任何數據

        狀態                                = 0x0000

          詳細解釋:

            正常

        總計頁數                            = 2084

        可用頁數                            = 2084

        已用頁數                            = 2084

        未用頁數                            = 不適用

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

        頁大小(以字節計)                  = 32768

        擴展數據塊大小(頁)                = 32

        預取大小(頁)                      = 32

        容器數                              = 1

         

        pagesize的值已經比較大了,可以考慮增大表空間。

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

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

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

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

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

         

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

        例如:執行的SQL語句為

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

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

         

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

         

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

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

         

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

         

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

         

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

        DB2數據庫SQL0670N錯誤案例解析來自:http://www.yk551.com/html/ITjs/sjk/9163.html

        相關文章閱讀:

        網友評論:


        圖片文章
        精品在線
        神马第九影院