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