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]