DB2数据库常用操作

1 表数据的导出与恢复

  在生产环境上线要向数据库的表中插入数据的时候,要先备份表数据,防止插入的中途出问题啦,特别是数据中还含有中文的,这样出问题了可以恢复。

export to TBL_TXN_FLOW_CTL.ixf of ixf messages exportmsgs_flow.txt select * from TBL_TXN_FLOW_CTL; 
export to TBL_TXN_EXEC_CTL.ixf of ixf messages exportmsgs_exec.txt select * from TBL_TXN_EXEC_CTL; 

  表数据的时候出问题了,可以用下列sql语句恢复:

import from  TBL_TXN_FLOW_CTL.ixf of ixf messages importmsgs_flow.txt replace into TBL_TXN_FLOW_CTL;
import from  TBL_TXN_EXEC_CTL.ixf of ixf messages importmsgs_exec.txt replace into TBL_TXN_EXEC_CTL;
load from "/tmp/mbr.del" of del replace into mbr nonrecoverable; 

  这个主要用于清表操作,对于一些大表,删除比较慢,可以自建一个空档案(mbr.del),使用这个语句清掉mbr这个表。注意nonrecoverable表示在装载数据时如果出错了将不可恢复,如果原先数据很重要,需要先备份。
(load也可以将数据导入到DB2服务器中,并且速度比import快)
注:另外,在导出和导入数据库数据的时候,需要进行编码转换,对于ixf格式,会自动进行代码转换,但对于del格式,当在不同系统间export/import/load数据时,由于数据的编码不同,可能会遇到汉字乱码问题。所以,一般都用ixf格式。


2 db2数据库常用的操作

export DBLINK="tsmpdb user tsmpusr using xxx"
db2 connect to $DBLINK
db2 list tables for schema tsmpusr
db2 describe table tsmpusr.TBL_HCE_APPLE_CARD_INFO
db2 "select * from tsmpusr.TBL_HCE_APPLE_CARD_INFO fetch first 1 rows only with ur"

  with ur,ur(uncommitted read,未提交读)是db2中隔离数据的最低级别,并且提供最高的并行性,在select的时候没有提交数据的时候就能够读到更新的数据。

db2 "update TBL_BAT_TASK_CTL set USE_FLAG='N' where BAT_ID='0024' or BAT_ID='0025'"

delete from TBL_HCE_APPLE_CARD_INFO where HCE_CARD_STAT='31';
select * from TBL_HCE_CARD_APPLY where TXN_DATE between '' and '';
select * from TBL_TXN_FLOW_CTL where TXN_NUM like 'A%';

断开数据库连接(敲db2后进入交互模式,quit退出):
disconnect current —— 断开数据库连接,不退出命令交互模式
terminate —— 断开数据库连接,退出命令交互模式
quit —— 只退出命令交互模式,并没有断开数据库连接

commit work


3 脚本、sqc中见到的有关数据库的操作

db2 -x "select count(bat_id) from tbl_bat_task_ctl where bat_status<>'S' and use_flag='Y'and substr(bat_flag,1, 1)='0'"

substr(str,pos,len)表示从str的pos位置开始,截取len个字符。
count(*)统计的是结果集的总条数,count(字段名)统计的是结果集中该字段值不为NULL的总条数。

db2 “select mpanid,spanid,token_pan,hce_card_stat from tbl_hce_apple_card_info where pan='' and cps_id='' order by acq_no desc fetch first rows only

4 遇到的db2数据库报的错

  在db2数据库中执行sql语句如果不成功,会有对应的错误码信息,分为SQLCODE和对应的SQLSTATE,如果想知道具体的含义,可以通过使用数据库实例用户登录后,执行如下语句:
db2 ? sql0964 —— 可以看SQLCODE为-964的解释。
db2 ? 57011 —— 可以看db2的SQLSTATE解释。

4.1 SQLCODE=964

DB2 SQL Error: SQLCODE=-964, SQLSTATE=57011, SQLERRMC=null, DRIVER=3.57.82

db2 delete大数据表中的部分数据经常会产生很大日志,造成数据库日志空间满的情况。
1、清空表:
  alter table TBL_APPLEPAY_CARD_APPLY activate not logged initially with empty table;(不记日志)(alter命令可以修改表结构。)
  import from /dev/null of del replace into TBL_APPLEPAY_CARD_APPLY;
2、增加日志文件大小(一般不做修改,DBA的事)
  db2 update db cfg for tsmpdb using LOGSIZE 262144
  db2 update db cfg for tsmpdb using LOGPRIMARY 20

4.2 SQLCODE=818

  SQLCODE=-818,出现场景是上一版本到测试环境了,但是发现数据库的一个bnd文件不对,又重新编译这个数据库的sqc文件,然后再上版本,再绑定数据库时。
  不能运行老的程序访问新被绑定PACKAGE的数据库,解决办法是要重新编译,重新上版本,再重新绑定数据库。

4.3 SQLCODE=332

SQL0332N  Character conversion from the source code page "1386" to the target code page "819" is not supported.  SQLSTATE=57017

  建完节点编目和数据库编目后,db2 connect to O2ODB2 user o2ousr using o2ousr2202,连接数据库的时候报上面的这个错,执行一下db2set db2codepage=1386这个命令后,db2 terminate断开数据库后,再连接数据库就可以正常连上啦。

4.4 db2数据库中字符集相关问题

  计算机处理文本时,把一门语言中的每个字符都赋以特定的值,这种字符与数值的对照表就叫codepage(代码页)。例如ASCII就是把英文字母表和一些控制字符映射到一些特定的数值上去。

  在db2数据库中,与字符集相关的问题主要有三个层次的字符集的设置,其中系统级别和实例级别的字符集可以根据需求进行修改,而数据库级别的数据集则必须在建库时确定。
(1)操作系统locale:系统级别的代码页设置,决定应用程序的默认代码页;如果希望将OS Local设置成中文,可以考虑下面的方法:
unix:可以通过export LANG=”zh_CN”命令修改当前的local到中文;
windows:在“开始->设置->控制面板->区域选项”中进行对系统的语言设置进行选择。
(2)db2codepage:db2实例级别的代码页设置,它会影响db2相关应用程序对代码页转换时做出代码页判定。可以通过db2set db2codepage=命令将db2codepage设置为你需要的字符集。
(3)database codepage:db2数据级别的代码页设置,必须在建库时进行设置。
例如:创建指定区域为中国(CN)的Unicode数据库。
db2 “create database dbname using codeset utf-8 territory CN”

db2set命令是用于修改db2实例级别的注册变量(profile registies),profile registries要比实例的configuration parameters大一点,比系统环境变量小一点。
db2set -ll //列出当前设置过的变量
例如:
[e] DB2DBDFT=tsmpdb
[e] DB2PATH=/opt/IBM/db2/V9.7
[i] DB2CODEPAGE=1386
[g] DB2SYSTEM=localhost.localdomain
[g] DB2INSTDEF=tsmp
注:[e]表示是操作系统级别的环境变量
[i]表示实例级别定义的变量
[g]表示在全局对该系统上的所有实例上定义

4.5 db2锁现象

在数据库中,锁的主要功能是为了控制并发数据的完整性而引入的机制,在并发应用中出现锁现象并不可怕,锁现象通常分为死锁和锁等待两种情形。


5 应用系统中db2数据库的整个相关编程应用场景

1、数据库服务器上db2数据库的安装;
2、配置数据库,创建数据库用户,并建相关应用的数据库,各种表;
3、在windows下用DbVisualizer连接应用数据库,进行各种查询等操作;
4、在Linux中安装数据库客户端,shell下用db2 connect to $DBLINK连接数据库后,来进行查询等各种操作(包括一些脚本中的操作);
5、嵌入式sql编程,在程序中连接数据库,并对数据库进行一些操作。

~/.bashrc
if [ -f /home/tsmp/sqllib/db2profile ]; then
    . /home/tsmp/sqllib/db2profile
fi
DB2DIR=/opt/ibm/db2/V9.7

x.sqc程序在预编译阶段会生成x.bnd文件和x.c文件,x.bnd文件需要绑定,x.c文件再按linux下C程序的编译过程生成动态库文件。
x.bnd文件绑定脚本如下:

db2 connect to $DBLINK                                                                                                       
for file in `ls *.bnd`
do
    echo $file
    db2 bind $file
done

这个是全绑,一般只需要重新绑定修改了的,db2 bind xxx.bind即可。
关于sqc文件的详细编译过程及bnd文件的作用可另作查询。


数据库配置
查询:

db2 get db cfg <for database_name>

设置:

db2 update db cfg for <database_name> using <parameter_name> <value>

数据库管理器配置
查询:

db2 get dbm cfg

设置:

db2 update dbm cfg using <parameter_name> <value>

Linux下本地连接远程服务器的数据库:
装db2的客户端,建实例,配置数据库环境,新建数据库节点(catlog),再连接数据库。
系统(主机) ——> 实例 —— > 通信节点 ——> 表空间 ——> 数据库对象

关于数据库和实例的理解:
实例就是一组操作系统进程(或者是一个多线程的进程)和一些内存,这些进程可以操作数据库。
数据库只是一个文件集合。
数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。

编目节点就是把远程服务器映射到本地
在DB2中从客户端访问服务器的数据库时,不能直接用connect命令,而必须先建立通信node,再在node的基础上建立数据库连接。
在命令行的具体操作如下:

db2 catalog tcpip node ${nodeName} remote ${serverName} server ${portNumber}
db2 catalog db ${dbName} as ${dbAlias} at node ${nodeName}
db2 connect to ${dbAlias} user ${userName} using ${passWord}
db2 terminate
//说明:${dbAlias}编目到本地后的数据库别名

取消节点编目:

db2 uncatalog node <node_name>

取消数据库编目:

db2 uncatalog database <db_name>

db2ilist可以查看系统上的所有实例
查看当前实例:db2 get instance或echo $DB2INSTANCE

查看本地编目节点信息:db2 list node directory
查看当前实例下的编目数据库信息:db2 list db directory


多个数据库在本地建了节点,怎么从连接的一个数据库切换到另一个数据库?
dbset clear_passwd clear_passwd user_key onl/his
dbset tsmpdb/tsmpdb123@vend3 tsmpdb/tsmpdb123@vend3 123456 onl
dbset “O2ODB user o2ousr using o2ousr1234” “O2ODB user o2ousr using o2ousr1234” 123456 onl
dbget onl

/home/o2obtc/batch/src/dbs/dbcommon/dbscommon.sqc
DbsConnect ()
36 rc = GetOnlPwd(sConnStr);

/home/o2obtc/batch/etc/batch.db.sh

#DBLINK
connstr=`dbget onl`
sub=`echo $connstr|cut -c1-2`
num_sub=`expr ${sub} + 4`
DBLINK=`echo $connstr|cut -c5-$num_sub`
export DBLINK

linux中的cut命令可以从一个文本文件或者文本流中提取文本列。
cut -c 字符区间 —— 以字符(characters)的单位取出固定字符区间。

/home/tsmp/tsmp/src/tools/dbsec
C标准文件操作函数:
fopen()/fclose() —— 打开/关闭文件
char *fgets(char *s, int size, FILE *stream);
从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读到了size-1个字符为止,最后会加上NULL作为字符串结束。
int fprintf(FILE *stream, const char *format, …);
fprintf()会根据参数format字符串来转换并格式化数据,然后将结果输出到参数stream指定的文件中,直到出现字符串结束符(’\0’)为止。

gethostname();
strcat();

sprintf(sTmp, “%.8x”, i); —— 将i以无符号16进制小数的形式输出到sTmp中,其中小数位为8位。但计算机表示的十六进制数不存在小数点,所以上述写法虽然编译器能给出正确的结果,但是是错的,应该写sprintf(sTmp, “%08x”, i);

char *strtok(char *str, const char *delim);
该函数用来把字符串分割成一个个片段。参数str指向待分割的字符串,参数delim则为分隔符字符串中所包含的所有字符。当strtok()在参数s的字符串中发现参数delim中包含的字符时,则会将该字符改为’\0’字符。在第一次调用时,strtok()必须给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。


6 有关DB2数据库的其他操作

db2 list tables for system —— 列出所有系统表

查看db2的命令参数选项:
db2 list command options

运行脚本:
db2 -tf script_name -oz log_name(-f选项表示将命令的输入从标准输入指定到某一文件,-z选项表示将所有输出保存到输出文件)
db2 -tvf TBL_AM_CARD_PRE_TEST.sql(-v选项表示回送当前命令到标准输出)

查询数据库中的存储过程:
db2 “select procname,text from sysibm.sysprocedures”


数据库备份(分全量备份和增量备份,这里是脱机全量备份):
1、停掉数据库再重新启动,以便断掉所有连接;
db2stop force
db2start
2、备份

db2 backup db <database_name> [to <dir_name>]
//to <dir_name>表示为备份到的目录路径,为可选项,默认在当前目录下。

数据库恢复:
restore


数据库导出:
1、db2look是DB2用于生成数据库DDL(建表的)语句的一个工具。
db2look -d 数据库名 -e -o db.sql -u 用户名 -w 密码
2、db2move导出数据。
db2move是一个集成式的数据移动工具,它支持导出(export)、导入(import)、装入(load)三种操作方式。其中db2move的这三种工作方式分别是通过简单使用db2 export,db2 import,db2 load指令来完成的。使用db2move导出的数据文件格式是ixf。

db2move 数据库名 export -u 用户名 -p 密码
这将会把该数据库中的全部数据提取到当前目录下。每个表的内容都存储在一个.ixf文件中,每个.ixf文件都有一个与之相对应的.msg文件,.msg文件是描述从表中导出数据时的信息的。另外还有两个文件,db2move.lst用来记录.ixf文件、.msg文件与表的一一对应关系,EXPORT.out记录的是导出数据时的屏幕输出。

数据库导入:
1、创建一个空的新数据库。
2、db2move导入数据。
db2move 数据库名 import -u 用户名 -p 密码
db2move import时系统会自动建表,但表上的索引、视图等还需要自行创建。

db2cc图形界面,db2 V10版本中没有啦,在V9的Linux版本中有。


7 PowerDesigner功能之一Data Architect

  这是一个强大的数据库设计工具,使用Data Architect可利用实体关系图为一个信息系统创建”概念数据模型“——CDM(Conceptual Data Model)。并且可根据CDM产生基于某一特定数据库管理系统的”物理数据模型“——PDM(Physical Data Model)。还可优化PDM,产生为特定DBMS创建数据库的SQL语句并可以以文件形式存储以便在其他时刻运行这些SQL语句创建数据库。另外,Data Architect还可根据已存在的数据库反向生成PDM、CDM及创建数据库的SQL脚本。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值