20200224-DB2数据库适配NC65

在这里插入图片描述

整理下16年写的DB2相关文档,换工作以后一直没用过DB2,忘的差不多了。
NC65适配的数据库版本:
在这里插入图片描述

DB2 中创建表空间

Yonyou NC 6.5 在使用 DB2 数据库时要求:建立 NNC_DATA01 、 NNC_INDEX01 两个表空间,对两个表空间的最小大小有具体要求。具体数据文件存放位置、存放形式、容器个数等没有限制,在具体使用中需要根据实际情况修改容器等存储的位置和大小,达到磁盘最大读写效率。

对于表空间的管理建议如下:

  1. NNC_DATA01 表空间页大小选 “16K” ,使用页大小为 “16K” 的缓冲池
  2. NNC_INDEX01 表空间页大小选择 “4K” ,使用页大小为 “4K” 的缓冲池
  3. Usertemp 用户临时表空间,名称可以自己确定 , 表空间页大小选择 16K ,使用页大小为 16K 的缓冲池
  4. Systemp 系统临时表空间,名称可以自己确定 , 表空间页大小选择 16K ,使用页大小为 16K 的缓冲池

2.1 运行脚本 1.SQL

/* 数据库名称,数据文件目录,数据文件大小等根据实际情况而定 */

其中脚本1.SQL、2.SQL、3.SQL见文章结尾
创建数据库UAP65 ;
创建缓存池;
创建NNC_DATA01 表空间;
创建NNC_INDEX01 表空间;
创建临时表;

D:\DB2>db2 -tvf 1.sql

2.2 运行脚本 2.SQL

配置数据库参数

D:\DB2>db2 -tvf 2.sql

2.3 运行脚本 3.SQL

创建 analyze_tb 存储过程,定期收集统计信息

D:\DB2>db2 -tvf 3.sql

3.sql 脚本运行结束后会生成收集统计信息的存储过程analyze_tb ,可以通过 job 定时收集统计信息;
Windows 系统: 控制面板 \ 所有控制面板项 \ 管理工具 \ 任务计划程序
Linux 系统: 写一个 runstats.sh 脚本,脚本内容如下 :

date
db2 connect to UAP 65
db2 "call analyze_tb"
date
echo "DB2 RUNSTATS END"

然后在db2inst1 用户下建立一 crontab ,引用此脚本

0 0 * * * /data2/db2home/db2inst1/runstats.sh >> /data2/db2home/db2inst1/runstats.log

每天晚上00:00:00 开始收集统计信息

脚本

1.sql

Create_DB

1 创建数据库 uap65

CREATE   DATABASE  uap65 USING  CODESET GBK TERRITORY CN COLLATE USING   SYSTEM  CATALOG TABLESPACE   MANAGED   BY   DATABASE   USING   (   FILE   'D:\DB2\uap65\Catalogdata1'   128000   )   USER   TABLESPACE   MANAGED   BY   DATABASE   USING   (   FILE   'D:\DB2\uap65\Userdata1'   512000   )   TEMPORARY   TABLESPACE   MANAGED   BY   DATABASE   USING   (   FILE   'D:\DB2\uap65\Tempspace1'   768000   );

2 连接数据 uap65( 用户可以新建 )

connect   to  uap65 ;

3 创建 bufferpool

CREATE  Bufferpool NCUSED4 SIZE   102400  PAGESIZE 4 K ;
CREATE  Bufferpool NCUSED16 SIZE   38400  PAGESIZE 16 K ;
CREATE  Bufferpool NCTMPUSED16 SIZE   38400  PAGESIZE 16 K ;

4 创建表空间 NNC_DATA01 和 NNC_INDEX01

CREATE  regular TABLESPACE  NNC_DATA01 PAGESIZE 16 K MANAGED   BY   DATABASE   USING   (   FILE   'D:\DB2\uap65\nnc_data01'   1024000 )  EXTENTSIZE 8  OVERHEAD 24.1  PREFETCHSIZE 8  TRANSFERRATE 0.9  BUFFERPOOL NCUSED16 ;

1024000*16K=15.6G

表空间不足时可以通过以下命令添加数据文件

---Alter tablespace NNC_DATA01 add (file ‘ D:\DB2\NC\nnc_data01a ’  409600)
CREATE  regular TABLESPACE  NNC_INDEX01 PAGESIZE 4 K MANAGED   BY   DATABASE   USING   (   FILE   'D:\DB2\uap65\nnc_index01'   1024000 )  EXTENTSIZE 32  OVERHEAD 24.1  PREFETCHSIZE 32  TRANSFERRATE 0.9  BUFFERPOOL NCUSED4 ;

—1024000*4K=3.9G

---Alter tablespace NNC_INDEX01 add (file ‘ D:\DB2\NC\nnc_index01b ’  409600)

5 创建 DB2 临时表空间

CREATE   USER   TEMPORARY   TABLESPACE  USERTEMP PAGESIZE 16 K MANAGED   BY   SYSTEM   USING   (   'D:\DB2\uap65\Usertemp1'   )  EXTENTSIZE 32  OVERHEAD 10.67  PREFETCHSIZE 32  TRANSFERRATE 0.04  BUFFERPOOL NCTMPUSED16 ;
CREATE   SYSTEM   TEMPORARY   TABLESPACE  TEMPSPACE2 PAGESIZE 16 K MANAGED   BY   SYSTEM   USING   (   'D:\DB2\uap65\Tempspace2'   )  EXTENTSIZE 32  OVERHEAD 10.67  PREFETCHSIZE 32  TRANSFERRATE 0.04  BUFFERPOOL NCTMPUSED16 ;

6 授权

GRANT   DBADM , CREATETAB , BINDADD , CONNECT , CREATE_NOT_FENCED_ROUTINE , IMPLICIT_SCHEMA , LOAD , CREATE_EXTERNAL_ROUTINE , QUIESCE_CONNECT , SECADM ON   DATABASE    TO   USER  db2inst1 ;
GRANT   USE   OF   TABLESPACE  NNC_DATA01 TO   USER  db2inst1 WITH   GRANT   OPTION ;
GRANT   USE   OF   TABLESPACE  NNC_INDEX01 TO   USER  db2inst1 WITH   GRANT   OPTION ;
GRANT   USE   OF   TABLESPACE  USERTEMP TO   USER  db2inst1 WITH   GRANT   OPTION ;
CONNECT   RESET ;

2.sql

Update_Parameter

connect   to  uap65 ;
update  dbm cfg using  aslheapsz 768 ;
update  dbm cfg using  sheapthres 40000 ;
update  dbm cfg using  maxagents   300 ;
update  dbm cfg using  NUM_POOLAGENTS   100 ;
update   database  configuration for  uap65 using  DBHEAP   10240   automatic ;
update   database  configuration for  uap65 using  logbufsz   1024 ;  
update   database  configuration for  uap65 using  CATALOGCACHE_SZ   3072 ;  
update   database  configuration for  uap65 using  locklist   10240   automatic ;
update   database  configuration for  uap65 using  appl_memory automatic ;
update   database  configuration for  uap65 using  sortheap   4096   automatic ;
update   database  configuration for  uap65 using  stmtheap   3072   automatic ;
update   database  configuration for  uap65 using  applheapsz   1024   automatic ;  
update   database  configuration for  uap65 using  pckcachesz   10240   automatic ;
update   database  configuration for  uap65 using  NUM_IOCLEANERS   1   automatic ;
update   database  configuration for  uap65 using  NUM_IOSERVERS   1   automatic ;
---update database configuration for uap65 using maxlocks  80;

和 locklist 参数 automatic 矛盾,先不修改

update   database  configuration for  uap65 using  MAXAPPLS   300 ;
update   database  configuration for  uap65 using  AVG_APPLS   200 ;
update   database  configuration for  uap65 using  logfilsiz   51200 ;
update   database  configuration for  uap65 using  logprimary   30 ;
update   database  configuration for  uap65 using  logsecond   200 ;
update   database  configuration for  uap65 using  MINCOMMIT   1 ;
CONNECT   RESET ;
/*
db2stop force
db2start
db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
db2set DB2_RESTRICT_DDF=TRUE
db2set DB2_COMPATIBILITY_VECTOR=ORA
db2set DB2PORTRANGE=60000:60003
db2set DB2COMM=TCPIP
*/

3.sql

analyze_tb

connect   to  uap65 user  db2inst1 using  ufsoft * 123 #
drop   PROCEDURE  analyze_tb#
CREATE   PROCEDURE  analyze_tb ()   LANGUAGE   SQL  MODIFIES SQL   DATA  
begin  
      declare  i integer   default   0 ;  
  declare  v_date timestamp ;  
  DECLARE  stmt VARCHAR ( 4000 );
  declare  v_current_schema varchar ( 4000 );  
  select   current_schema   into  v_current_schema from  sysibm.SYSDUMMY1 ;  
  select   count (*)   into  i from  syscat.tables where  tabname = 'ANALYZE_LOG'   and  tabschema = v_current_schema ;  
if  i = 0   then
      set  stmt =   'create table analyze_log(tabschema varchar(200),tabname varchar(200),analyze_time timestamp)' ;
execute   immediate  stmt ;  
end   if ;  
      for  line as   select  tabschema ,  tabname from  syscat.tables where   type = 'T'   and  tabschema = v_current_schema and  tabname not   like   'UT%'   and  tabname not   like   'TEM%'   and  tabname not   like   'TMP%'  do
  set  stmt =   'CALL SYSPROC.ADMIN_CMD(''RUNSTATS ON TABLE ' || rtrim ( line.tabschema )|| '.' || line.tabname || ' on key columns with distribution on key columns and index all'')' ;    
execute   immediate  stmt ;  
select  current_timestamp into  v_date from  sysibm.sysdummy1 ;  
set  stmt = 'insert into analyze_log values(''' || v_current_schema || ''',''' || line.tabname || ''',''' || v_date || ''')' ;  
execute   immediate  stmt ;  
end   for ;  
end#

欢迎关注我的公众号:IT小Chen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值