zoukankan      html  css  js  c++  java
  • DB2的长字段解决办法

    在DB2中,有时候需要建立如下种类的表:
    T_1(id varchar(50),data varchar(8000))

    因此需要执行create table T_1(id varchar(50),data varchar(8000));
    通常情况下,这个语句不会执行成功的.
    如下:

    C:\Documents and Settings\Administrator>db2 create table T_1(id varchar(50),data varchar(8000))
    DB21034E  该命令被当作 SQL
    语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
    SQL0286N  找不到页大小至少为 "8192"、许可使用授权标识 "VM" 的缺省表空间。


    顾名思义,DB2默认的页大小是4K,这样的表的字段太长,接近8K.一条记录不能跨页存储.
    所以我们需要创建一个页长为8K的表空间.
    首先,创建8K的缓冲池:

    create bufferpool ibmdefault8k IMMEDIATE  SIZE 5000 PAGESIZE 8 K ;

    然后,使用该缓冲池创建一个表空间

    CREATE TABLESPACE mytbs
      IN DATABASE PARTITION GROUP IBMDEFAULTGROUP
      PAGESIZE 8K
      MANAGED BY SYSTEM
      USING
      ('D:\DB2\mycontainer'
      )
      EXTENTSIZE 32
      PREFETCHSIZE 16
      BUFFERPOOL IBMDEFAULT8K
      OVERHEAD 24.10
      TRANSFERRATE 0.90
      DROPPED TABLE RECOVERY OFF;
    GRANT USE OF TABLESPACE mytbs TO PUBLIC;

    接下来执行

    create table T_1(id varchar(50),data varchar(8000));

    顺利通过
    在DB2的CLP环境下,可以进行正常的insert,select等操作,但是在JDBC环境下就不行了.
    在Eclipse的DBEdit(也是通过JDBC)下执行select操作时候报:


    [IBM][CLI Driver][DB2/NT] SQL1585N  不存在具有足够页大小的系统临时表空间。  SQLSTATE=54048

      dbedit.core.DataException: Unable to retrieve result values for VM.T_1
      dbedit.core.DataException: Couldn't execute query:select "ID","DATA" from "VM"."T_1"
      COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/NT] SQL1585N  不存在具有足够页大小的系统临时表空间。  SQLSTATE=54048


    因此,需要再创建一个系统临时表空间才能让DB2 shut up.

    CREATE TEMPORARY TABLESPACE mysystmp1
      IN DATABASE PARTITION GROUP IBMTEMPGROUP
      PAGESIZE 8K
      MANAGED BY SYSTEM
      USING
      ('D:\DB2\tttt'
      )
      EXTENTSIZE 32
      PREFETCHSIZE 16
      BUFFERPOOL IBMDEFAULT8K
      OVERHEAD 24.10
      TRANSFERRATE 0.90
      DROPPED TABLE RECOVERY OFF;


    终于,一切正常了.
  • 相关阅读:
    相关博客
    读写锁
    vccode配置c++ 编译环境
    windows下内存检测工具
    定时器堆的实现的方法
    关于tcp send的再次思考
    关于一个socket在阻塞模式下是否还可以使用的实验
    windows下对socket的send和recv的超时设置,并附一个简洁明了的socket简单demo
    对于vector中高效删除中间元素的技巧
    ubuntu下后台服务的管理
  • 原文地址:https://www.cnblogs.com/millen/p/2212347.html
Copyright © 2011-2022 走看看