DB2数据库适配NC65

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

connect   to  uap65 ;

---1

update  dbm cfg using  aslheapsz 768 ;

---2

update  dbm cfg using  sheapthres 40000 ;

---3

update  dbm cfg using  maxagents   300 ;

---4

update  dbm cfg using  NUM_POOLAGENTS   100 ;

---5

update   database  configuration for  uap65 using  DBHEAP   10240   automatic ;

---6

update   database  configuration for  uap65 using  logbufsz   1024 ;  

---7

update   database  configuration for  uap65 using  CATALOGCACHE_SZ   3072 ;  

---8

update   database  configuration for  uap65 using  locklist   10240   automatic ;

---9

update   database  configuration for  uap65 using  appl_memory automatic ;

---10

update   database  configuration for  uap65 using  sortheap   4096   automatic ;

---11

update   database  configuration for  uap65 using  stmtheap   3072   automatic ;

---12

update   database  configuration for  uap65 using  applheapsz   1024   automatic ;  

---13

update   database  configuration for  uap65 using  pckcachesz   10240   automatic ;

---14

update   database  configuration for  uap65 using  NUM_IOCLEANERS   1   automatic ;

---15

update   database  configuration for  uap65 using  NUM_IOSERVERS   1   automatic ;

---16

---update database configuration for uap65 using maxlocks  80;

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

---17

update   database  configuration for  uap65 using  MAXAPPLS   300 ;

---18

update   database  configuration for  uap65 using  AVG_APPLS   200 ;

---19

update   database  configuration for  uap65 using  logfilsiz   51200 ;

---20

update   database  configuration for  uap65 using  logprimary   30 ;

---21

update   database  configuration for  uap65 using  logsecond   200 ;

--22

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",共同学习,共同成长!!!


请使用浏览器的分享功能分享到微信等