DB2資料庫適配NC65

chenoracle發表於2020-02-24

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",共同學習,共同成長!!!

DB2資料庫適配NC65

DB2資料庫適配NC65


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2677040/,如需轉載,請註明出處,否則將追究法律責任。

相關文章