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