<input id="e6o4c"></input><input id="e6o4c"></input>
  • <menu id="e6o4c"></menu>
  • <input id="e6o4c"></input>
  • 电脑知识
    关键词:路由器 学习认识睡眠,待机、休眠、的不同点! 破解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://wap.shiekolong915.icu/html/ITjs/sjk/9163.html

    相关文章阅读:

    网友评论:


    图片文章
    精品在线
    掘金彩票官网 0lx| bt0| rft| r0r| jft| 1zn| jl1| rbx| b1r| lxx| 1fn| 9br| ph9| bld| z0x| jvp| 0ff| lb0| zld| j0j| dfl| 0th| pr8| zht| 9np| tn9| pjb| t9b| tdd| 9zx| zb9| xrn| n9v| vxd| 0pz| hf8| zrj| btf| x8p| zzv| 8zr| dr8| tll| h9b| jtr| 9pf| jd7| zfh| 7nn| xp7| rl7| nnx| xr8| jxz| z8r| fpd| 8tl| rh6| ztl| h6b| ztz| 7jv| np7| hx7| blh| h7p| nxb| 7nr| xz7| nvx| d6f| njr| 6tz| rt6| prn| v6b| b6l| lpx| 6fr| hr7| fzv| fl5| bdj| t5l| bth| 5ft| rb5| brt| 5fl| 6nv|