whitek 发表于 2016-11-19 02:23:37

C语言+嵌入式SQL+DB2开发经验总结

  1、使用DB2工具将SQC文件预编译成C文件和bnd文件。
  命令: db2 prep ***.sqc version * package using * bindfile BLOCKING ALL INSERT BUF DATETIME ISO queryopt 9 LONGERROR NO
  解释:***代表要进行预编译的文件名。 version参数后面跟一个版本号,比如:1,2,3等数字。 此参数非常重要,可以区分多人编译的不同版本。package using 参数后面跟一个指定的名称,该名称就是DB2数据库生成的package的包名称。 如果不指定名称,默认最大为8位字符串, 可能与其他同名的package冲突。
  2、使用DB2工具将bnd文件绑定到数据库中,生成package.
  命令:db2 bind ***.bnd
  解释:若增加ACTION ADD参数,则强制阻止被同名的package覆盖。存在同名package时,会报SQL0719错误。
  DB2与oracle不同处1:
  create table new_table_name as
  (select * from table_name) definition only;
  不同处2:创建物化查询表(MQT)
  create table new_table_name as
  (select * from table_name)
  data initially deferred refresh deferred;
  refresh table new_table_name;
  注意:物化表类似一个查询,没有真正形成表,类型显示为Query。但它完全可以当表来用。
  不同处3:复制表结构
  create table new_table_name like table_name;
  数据库概念:
  操作系统最小存储单位(block)块,windows上一块=1KB. linux上一块=0.5KB.数据库的最小存储单位为(datapage)数据页,一数据页=4KB、8KB、16KB、32KB可变。大一级的单位为extent, 一个extent = 整数倍的datapage.即多个datapage组成一个extent, 多个extent组成一个表空间容器,多个表空间容器组成一个表空间。
  表空间和缓冲池是性能调优的关键。
  DB2常用命令:

系统环境变量:
DB2INSTANCE , 设置当前活动实例
实例参数:
DFTDBPATH 设置数据库安装路径
查看当前活动实例:db2 get instance

启动数据库:
启动db2服务:db2start
激活数据库实例:db2 activate database<db_name>
查看激活状态的数据库:db2 list active databases
开启db manager:db2 start db manager

关闭数据库:
失效数据库实例:db2 deactivate database <db_name>
关闭数据库服务:db2stop
断开连接但不释放资源:db2 connect reset
断开连接并释放资源:db2 terminate

查看数据库:db2 list db directory
查看数据库应用:db2 list applications
查看数据库应用和进程号:db2 list applications show detail
查看数据库表空间:db2pd -db <db_name> -tablespace
查看数据库配置:db2 get db cfg for <db_name>
查看配置实例参数:db2 get dbm cfg ; db2 update dbm cfg using ... ; db2 reset dbm cfg (恢复默认参数);实例配置参数保存在 sqllib/db2systm文件中
查看配置DAS实例参数:db2 get admin cfg ; db2 update admin cfg using ...; db2 reset admin cfg ;
连接数据库:db2 connect to <db_name>
                  db2 connect to <db_name> user using
断开数据库连接:db2 connect reset/db2 terminate

创建数据库:db2 create db <db_name>
                (dft_extent_sz 4
               catalog tablespace managed by database using (FILE 'C:\111.dat' 2000, FILE 'C:\222.dat' 2000) extentsize 8 prefetchsize 16
               temporary tablespace managed by system using ('C:\333.dat', 'C:\444.dat')
               user tablespace managed by database using (FILE 'C:\555.dat' 1200 extentsize 24 prefetchsize 48)
               automatic storage on path1,path2
               autoresize yes
               initialsize 200M
               increasesize 20%
               maxsize none
               using codeset=GBK territory=CN )
               automatic storage--默认设置,设置数据库为自动存储,即DMS自动存储
               autoresize yes--表空间用光时,自动扩展
               initialsize 200M--初始表空间大小为200MB, 每个容器100MB, 因为指定了两个path.
               maxsize none--不限制表空间最大大小
               using codeset=GBK territory=CN--指定数据库代码页为中文
               using codeset=UTF-8 territory=US 指定代码页为unicode编码,可支持XML数据
创建表空间:db2 create tablespace <name> managed by automatic storage;DMS自动存储的数据库建立表空间, managed by可省略。
               db2 create tbalespace <name> managed by system using () ; 未开启自动存储的数据库使用SMS方式建立表空间
               db2 create tbalespace <name> managed by database using () extentsize 4; 未开启自动存储的数据库使用DMS方式建立表空间
               extentsize 4--每个容器最多写入4个数据页; extentsize 4M--每个容器最多写入4M大小的数据
               prefetchsize 4--从表空间预获取的数据页数量; prefetchsize 4M--预获取数据大小


删除数据库:db2 drop db <db_name>(如果不能删除,尝试断开激活的连接或者重启db2)
删除实例:db2idrop -f 实例名 (加-f是为了删除sqllib,否则下次再建用例时会报错)
查看实例:db2ilist
系统启动自动启动实例:db2iauto -on 实例名   db2iauto -off 实例名
查看das用户:daslist
创建das实例:dasicrt 实例名
启停管理服务器(即das实例):db2admin start/stop , 一个机器上如果装多个db2版本的产品, 也是共享一个das实例, 若das创建时是基于A版本的db2, A版本升级后,也要用A版本的dasupdt升级一下das实例。 若升级的是其他版本的db2, 则das可不用升级。
删除das用户:dasdrop 用户名

列出系统表:db2 list tables for system
列出所有用户表:db2 list tables
列出所有表:db2 list tables for all
列出特定用户表:db2 list tables for schema

复制一张表:db2 create table t1 like t2
显示表结构:db2 describe table tablename
查询表:db2 "select * from table tablename where ..."
执行SQL脚本:db2 -tvf scripts.sql

查看错误代码信息:
db2 ? 10054

停止激活的连接:
db2 force application all;\db2 force application all;\db2 force application all;\db2stop

查看死锁:
db2 get snapshot for locks on <db_name>
db2 "select agent_id,tabname,lock_mode from table(snap_get_lock('<db_name>')) as aa"

杀掉进程:
db2 force application(NUM)

监控DB2消耗多的SQL语句:
eg:(DB_NAME=SUNDB)
db2top -d SUNDB-----查看消耗资源 按照提示按 l,出现Application Handle,找到资源消耗大的Application Handle(stat)
记下app handle。
db2pd -d SUNDB -dyn -application > /tmp/db2pd1.txt    ----到处会话语句,准备进行调优

设置连接方式(重启才会生效):
db2set DB2COMM=tcpip
db2set DB2COMM=   

导出导入建表DDL和数据:
db2move 数据库名 export -u 数据库用户 -p 密码
db2look -D 数据库名 -E -A -I 数据库用户 -W 密码 -O 导出.sql
db2 -tvf 导出.sql -z 导入过程.log
db2 -tvd@ -f 存储过程.db2   (.db2后缀名可以任意)
db2move 数据库名 import -io replace -u 数据库用户 -p 密码

建立远程编目:
db2 catalog tcpip node 本地节点名称(随意取名) remote IP地址 server 端口
db2 catalog db 远程数据库名称 as 本地别名 at node 本地节点名称
db2 uncatalog node 本地节点名称   (删除节点编码)
db2 uncatalog db 远程数据库名称    (删除数据库编目)

查看SQL的执行计划:
  db2expln -d 数据库名称 -u 用户名 密码 -statement "SQL语句(不加分号)" -terminal -g

数据库版本变更后,迁移实例:
db2imigr (大版本变更使用,比如从V8升级到V9)
db2iupdt (小版本变更使用,比如从v8.1升级到v8.2)  连接实例:db2 attach to 实例名   
  断开实例:db2 detach   
  DAS:一个用于远程管理其他实例的特殊实例。 只有用图形工具远程控制时需要。用命令行远程控制不需要。
页: [1]
查看完整版本: C语言+嵌入式SQL+DB2开发经验总结