Sunday, October 21, 2012

关于db2表空间SYSTOOLSPACE和SYSTOOLSTMPSPACE

最近在维护的DB2服务器上看到大部分的服务器上都存在SYSTOOLSPACE和SYSTOOLTMPSPACE这两个表空间。可以明确的是这两个表空间不是我们自己创建的,而且从名称上看应该是系统工具使用的表空间。一直对这两个表空间比较困惑,今天在信息中心找了下发现这两个表空间是因为使用了部分系统功能而自动创建的两个工具数据库,详细可见信息中心说明:
http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=%2Fcom.ibm.db2.udb.admin.doc%2Fdoc%2Fc0023713.htm


SYSTOOLSPACE 和 SYSTOOLSTMPSPACE 表空间

SYSTOOLSPACE 表空间是一个用户数据表空间,DB2 管理工具和一些 SQL 管理例程使用它来存储历史数据和配置信息。下列工具和 SQL 管理例程使用 SYSTOOLSPACE 表空间:
  • Design Advisor
  • “改变表”笔记本
  • “配置自动维护”向导
  • 存储管理工具
  • db2look 命令
  • 自动收集统计信息(包括统计信息收集所需的运行状况指示器)
  • 自动重组(包括重组所需的运行状况指示器)
  • GET_DBSIZE_INFO 存储过程
  • ADMIN_COPY_SCHEMA 存储过程
  • ADMIN_DROP_SCHEMA 存储过程
  • SYSINSTALLOBJECTS 存储过程
  • ALTOBJ 存储过程
SYSTOOLSPACE 表空间是第一次使用上述任一工具和例程(ADMIN_COPY_SCHEMA 和 ADMIN_DROP_SCHEMA 除外)时创建的。
SYSTOOLSTMPSPACE 表空间是一个用户临时表空间,REORGCHK_TB_STATS、REORGCHK_IX_STATS 和 ADMIN_CMD 存储过程使用它来存储临时数据。SYSTOOLSTMPSPACE 表空间是第一次调用其中任一存储过程(ADMIN_CMD 除外)时创建的。
注:
  1. 如果 DB2 注册表变量 DB2_WORKLOAD 设置为 SAP,那么既不会自动创建 SYSTOOLSPACE,也不会创建 SYSTOOLSTMPSPACE。
  2. 缺省情况下,会对所有新数据库启用重组所需和统计信息收集所需的运行状况指示器和运行状况监视器。这两个运行状况指示器由运行状况监视器大约每两个小时评估一次。这表示在新数据库处于活动状态两个小时之后,将自动为它们创建 SYSTOOLSPACE 和 SYSTOOLSTMPSPACE 表空间,否则将显式禁用运行状况监视器或这些运行状况指示器。
  3. 缺省情况下,会对所有新数据库启用自动收集统计信息功能。此功能大约每两个小时评估一次。这表示在新数据库处于活动状态两个小时之后,将自动为它们创建 SYSTOOLSPACE 和 SYSTOOLSTMPSPACE 表空间,否则将显式禁用自动收集统计信息功能。
如果不想要任一表空间的缺省定义,那么可以手工创建表空间(如果已经自动创建了这些表空间,那么删除它们,然后重新创建)。表空间定义可能不同(例如,可以使用 DMS 或 SMS 表空间,或者可以启用或禁用自动存储器),但是必须在 IBMCATGROUP 数据库分区组中创建表空间。如果尝试在任何其他数据库分区组中创建它们,那么将会返回错误 SQL1258N。
以下是如何手工创建 SYSTOOLSPACE 和 SYSTOOLSTMPSPACE 表空间的一个示例。此示例使用自动创建表空间时使用的那些定义:
如果数据库使用自动存储器:
      CREATE TABLESPACE SYSTOOLSPACE IN IBMCATGROUP
          MANAGED BY AUTOMATIC STORAGE
          EXTENTSIZE 4

      CREATE USER TEMPORARY TABLESPACE SYSTOOLSTMPSPACE IN IBMCATGROUP
          MANAGED BY AUTOMATIC STORAGE
          EXTENTSIZE 4
如果数据库不使用自动存储器:
      CREATE TABLESPACE SYSTOOLSPACE IN IBMCATGROUP
          MANAGED BY DATABASE USING ( FILE 'SYSTOOLSPACE' 32 M )
          AUTORESIZE YES
          EXTENTSIZE 4

      CREATE USER TEMPORARY TABLESPACE SYSTOOLSTMPSPACE IN IBMCATGROUP
          MANAGED BY SYSTEM USING ( 'SYSTOOLSTMPSPACE' )
          EXTENTSIZE 4
缺省情况下,只要数据库不是使用受限访问权创建的,就会授予 PUBLIC 组使用 SYSTOOLSTMPSPACE 的权限。

Wednesday, October 17, 2012

连接数据库的时候碰到SQL0332N错误


连接数据库的时候碰到SQL0332N错误:


SQL0332N Character conversion from the source code page "1386" to the target 
code page "819" is not supported. SQLSTATE=57017


创建数据库语句:



db2 "create database apdb ON /apdb_FS using codeset gbk territory CN"



检查发现db2codepage默认819
修改db2codepage=1386
停止并重启实例


db2stop
db2start
db2 connect to apdb




再连接数据库错误依旧。
经过多次研究后发现command line processor没有退出。
退出command line processor


db2 terminate
db2 connect to apdb 





数据库连接成功。

总结:
当碰到这个问题时是因为command line processor在开启时使用的是注册表变量db2codepage来初始化字符集,当重新修改db2codepage时command line processor没有重启导致还是使用了819的页码。所以在修改db2codepage后需要db2 terminate来重启command line processor
注,你可以将command line processor理解成一个数据库连接客户端,如:ibm data studio、QC等。使用客户端连接服务器时必须指定相同或者兼容的页码,否则会出现转换失败的错误。