DB2学习笔记.docx
- 文档编号:7180794
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:29
- 大小:103.45KB
DB2学习笔记.docx
《DB2学习笔记.docx》由会员分享,可在线阅读,更多相关《DB2学习笔记.docx(29页珍藏版)》请在冰豆网上搜索。
DB2学习笔记
第一部分DB2系统管理命令
1.Db2有域,实例,和数据库三层的概念。
2.查看数据库服务器中有几个数据库。
包括网络中数据库的引用。
进入数据库安装目录下的bin目录:
C:
\ProgramFiles\IBM\SQLLIB\BIN
执行db2listdatabasedirectory命令
3.查看命令选项说明
listcommandoptions
4.查看运行的数据库服务器中关联了多少个引用程序对数据库的访问。
进入数据库安装目录下的bin目录:
C:
\ProgramFiles\IBM\SQLLIB\BIN
db2listapplications命令
可以通过db2forceapplication(进程id)杀死对应的进程。
5.如何强制断开应用程序和数据库的连接。
进入数据库安装目录下的bin目录:
C:
\ProgramFiles\IBM\SQLLIB\BIN
行下列的命令db2forceapplications可以强制断开应用程序和数据库的连接。
6.如何备份数据库
进入db2的操作环境,然后运行
backupdatabase数据库别名user用户名using密码命令
7.停止数据库的服务器。
进入数据库安装目录下的bin目录:
C:
\ProgramFiles\IBM\SQLLIB\BIN
或db2操作环境中,如果在db2操作环境中必须通过的db2terminate命令终结db2操作环境中启动的所有子进程(即停止所有命令行处理器回话)
再执行db2stop命令。
注意:
在执行此命令的时候,必须没有应用程序或用户和数据库连接。
可以在执行停止命令之前查看于db2服务器连接的应用程序和用户。
然后执行牵制断开命令断开连接的数据库和用户。
·
8.如何从旧版本中把数据库迁移到新的安装版本中(在新版数据库种运行下列代码)
i.验证数据库是否可以被迁移。
用db2ckmig命令,
db2ckmig/e数据库别名/l验证信息保存路径/u用户名/p密码
ii.执行数据库的迁移命令
MIGRATEdatabase数据库别名user用户名using密码命令
9.启动DB2服务器
进入数据库安装目录下的bin目录:
C:
\ProgramFiles\IBM\SQLLIB\BIN
或db2操作环境中
执行db2start命令
10.关于命令行编辑器的使用
使用命令行编辑器之前要连接到一个数据库。
在该数据库中可以执行想要执行的命令和SQL语句。
i.如何配置指定数据库的连接。
首先要启动数据库服务器。
登陆到数据库的服务器上。
然后用在CA(配置助手)菜单栏上(在所选下面)选择使用向导添加数据库。
添加的数据库可以是网络中的已经运行的数据库。
然后选择手工配置至数据库的连接
如果是网络连接选TCP/IP,如果是本地的数据库则选择本地连接
还要知道数据库服务器中所在的Ip和端口号码,以及数据库的名称。
对于安全性的认证一般采用dbm自带的安全认证。
通过以上的配置完成数据库的连接。
注意如果不知道网络中有那些数据库可以通过配置助手的发现功能搜索网络中的数据库。
可以直接把网络中已知系统中的数据库搜索到。
包括已经连接的数据库和没有连接的数据库
ii.使用命令行处理器来配置数据库的连接
数据库服务器节点的概念:
为了连接网络上的数据库服务器,访问数据库提出了节点的概念。
一个节点唯一对应一个网络中的数据库。
所以不能重复。
建立了节点后,可以把节点与一个网络数据库对应。
建立一一之间的映射。
注意这个数据库必须是在节点对应的数据库服务器中存在的。
1)在客户机上配置TCP/IP的节点
catalogtcpipnode自定义节点名remoteip地址server端口号
terminate(作用是刷新目录的告诉缓存,如果不刷新,只能在重启计算机后才会起作用)
2)编目数据库
catalogdatabase数据库名称(必须在网络中已经存在)as数据库别名
atnodenod名称authentication连接数据库时所采用的认证方法
(一般是server或client)
terminate
3)建立数据库
createdbdbName
4)连接数据库
通过以上的配置设置。
数据库服务进程会保存配置信息。
在db2的会话进程中可以通过
connectto数据库的别名
连接数据库。
这是可以执行sql语句;或用!
开头可以执行操作系统的命令
用“\”可以作为多行的分割符。
5)查看数据库的结构信息命令
连接到数据库后可以查看数据库的结构信息,包括有什么表,什么视图,什么触发器等等
1)查看数据库中有多少表或视图
listtables;
2)查看表或试图的结构
describetabletableName获describeSelect*fromtableName
10.数据的导入导出操作
首先连接上数据库;
用export命令
格式如下:
Exporttoc:
\org.txtofdelmessagesd:
\msgs.txtselect*fromorg
1)如何导出大对象
exporttod:
\myfile.delofdellobstod:
\lob\lobfilelobsmodifiedby
lobsinfileselect*fromemp_photo
该句的含义是将从“select*fromemp_photo”中获得的数据放到“d:
\myfile.delof
del”文件中存放的格式是del,其中大对象的位置存放在d:
\lob\,文件名是lobs。
最后modifiedbylobsinfile指明指定要将大对象(LOB)数据导出到LOBSTO子句中所指定的位置。
2)如何导入数据
importfromD:
\TABLE1.ixfofixflobsfromd:
\loblobfilelobsmodifiedbylobsinfile
savecount1000messagesD:
\msg.txtinsertintoTABLE1
//其中,savecount表示完成每1000条操作,记录一次。
将D:
\TABLE1.ixf文件中的数据以ixf格式导入到表table1中。
并把d:
\lob目录下的文件是lobs的大对象文件导入到表中
11.如何执行批处理命令:
首先进现连接数据库
db2=>connecttodbNameuserxxxusingpassword
退出命令处理器:
db2=>quit
在dos环境下输入sql脚本文件的路径全名
c:
\>db2-tvf文件名.sql
注意脚本的每一条命令以分号作为结束标志。
命令之间永换行符进行分割。
12.如何把数据库中的表全部导入导出。
查看要移动的数据库的表空间。
表空间是孩子,数据库是父母,一个数据库可有很多表表空间。
一个表空间只能属于一个数据库。
Listtablespaces
查看每个表空间的属性有两种方法:
1)利用dblook命令
db2look–ddbname–e–odb.sql–iusername–wpassword
把数据库名是dbname的数据库的结构信息输入到db.sql的脚本中,username
是连接数据库时的用户名,password时密码
然后建立一个新的空数据库。
再把sql脚本中connectto新的数据库名
再通过db2-tvfdb.sql运行db.sql的数据库编程脚本。
这样就把原来的数据库中所有表再新数据库中建立。
只是没有数据
最后用export和import命令把数据导入新的数据库。
2)在特定的目录下面执行db2movedbnameexport-uusername-ppassword命
令
把整个数据库移动到该目录下自动建立的5个文件上
(db2move.lst;import.out;export.out;tabl.ixf;tab1.msg)
然后创建一个新的数据库;
最后回到特定的目录(有上述的5个文件),执行
db2movedbnameimport-uusername-ppassword
第二种方法可以把数据一次全部导入和导出,比较好。
13.了解数据库服务器的配置是必要的。
在某些特定的时候有可能要根据应用程序的要求来更改数据库服务器的配置。
用命令db2getdbmcfg命令来运行数据库的配置的相关信息
14.如何设置数据库服务器的配置
db2updatedbmcfgusing参数名参数值
15.读数据库的配置
db2getdbcfgfordbname
16.设定数据库连接的配置
db2updatedbcfgforo_ydusing参数名参数值
删除数据库连接。
(首先要断开关联到数据库应用程序的连接)
dropdbdbName
对于本地数据库执行删除
对于网络数据库删除节点编目。
附录:
选项
描述
当前设置
-a
显示SQLCA
OFF
-c
自动落实
ON
-e
显示SQLCODE/SQLSTATE
OFF
-f
读取输入文件
OFF
-l
将命令记录到历史文件中
OFF
-n
除去换行字符
OFF
-o
显示输出
ON
-p
显示交互式输入提示符
ON
-r
将输出保存到报告文件
OFF
-s
在命令出错时停止执行
OFF
-t
设置语句终止字符
OFF
-v
回送当前命令
OFF
-w
显示FETCH/SELECT警告消息
ON
-x
不打印列标题
OFF
-z
将所有输出保存到输出文件
OFF
第二部分数据库的sql语法
本文介绍了我们在DB2sql开发中经常用到的一些函数。
同时这些函数也是编写优秀sql代码的基本要求。
本文介绍的一些技巧只是揭开了高效使用DB2的冰山一角。
DB2为我们提供了丰富和强大的功能。
在使用DB2的时候,我们应当深入理解其原理,找出更多的最佳实践与大家分享。
一DB2SQL常用函数语法
函数名
函数解释
函数举例
avg()
返回一组数值的平均值
selectavg(salary)frombsempms;
abs(),absval()
返回参数的绝对值
selectabs(-3.4)frombsempms;
acos()
返回参数的反余弦值.
selectacos(0.9)frombsempms;
ascii()
返回整数参数最左边的字符的ASCII码.
selectascii('r')frombsempms;
asin()
返回用弧度表示的角度的参数的反正弦函数
selectasin(0.9)frombsempms;
atan()
返回参数的反正切值,该参数用弧度表示的角度的参数
selectatan(0.9)frombsempms;
atan2()
返回用弧度表示的角度的X和Y坐标的反正切值
selectatan2(0.5,0.9)frombsempms
corr(),correlation()
返回一对数值的关系系数.
selectcorrelation(salary,bonus)frombsempms;
count()
返回一组行或值的个数
selectcount(*)frombsempms;
covar(),covariance()
返回一对数值的协方差
selectcovar(salary,bonus)frombsempms;
max()
返回一组数值中的最大值.
selectmax(salary)frombsempms;
min()
返回一组数值中的最小值
selectmin(salary)frombsempms;
stddev()
返回一组数值的标准偏差.
selectstddev(salary)frombsempms;
sum()
返回一组数据的和
selectsum(salary)frombsempms;
var(),variance()
返回一组数值的方差
selectvariance(salary)frombsempms;
bigint()
返回整型常量中的数字或字符串的64位整数表示.
selectbigint(emp_no)frombsempms;
ceiling()orceil()
返回比参数大或等于参数的最小的整数值
selectceiling(3.56)frombsempms; selectceil(4.67)frombsempms;
char()
返回日期时间型,字符串,整数,十进制或双精度浮点数的字符串表示
selectchar(salary,',')frombsempms;
chr()
返回具有由参数指定的ASCII码的字符
selectchr(167)frombsempms;
concat()
返回两个字符串的连接.
selectconcat(emp_no,emp_nam)frombsempms;
year()
返回数值的年部分
selectyear('2003/01/02')frombsempms;
varchar()
返回字符串,日期型,图形串的可变长度的字符串表示
selectvarchar(emp_nam,50)frombsempms;
ucase()orupper()
返回字符串的大写.
selectucase(emp_nam)frombsempms; selectupper(emp_no)frombsempms;
truncate()ortrunc()
从表达式小数点右边的位置开始截断并返回该数值.
selecttruncate(345.6789,2)frombsempms;
time()
返回一个数值中的时间
selecttime('2001-03-19.12.30.123456')frombsempms
substr(exp1,exp2)
返回EXP1串自EXP2处开始的子串.
selectsubstr('cdnjfdjfjd',5)frombsempms; selectsubstr('cdnjfdjfjd',5,2)frombsempms;
sqrt()
返回该参数的平方根.
selectsqrt(36)frombsempms;
space()
返回由参数指定的长度,包含空格在内的字符串.
selectspace(10)frombsempms;
second()
返回一个数值的秒部分.
selectsecond('18:
34:
32')frombsempms;
rtrim()
删除字符串尾部的空格.
selectrtrim('comment')frombsempms;
round(exp1,exp2)
返回EXP1小数点右边的第EXP2位置处开始的四舍五入值
selectround(2345.6789,2)frombsempms
replace(exp1,exp2,exp3)
用EXP3替代EXP1中所有的EXP2
selectchar(replace('romandd','ndd','ccb'),10)frombsempms;
repeat(exp1,exp2)
返回EXP1重复EXP2次后的字符串
selectchar(repeat('repeat',3),21)frombsempms;
real()
返回一个数值的单精度浮点数表示
selectreal(10)frombsempms;
rand()
返回0和1之间的随机浮点数
selectrand()frombsempms;
power(exp1,exp2)
返回EXP1的EXP2次幂
selectpower(2,5)frombsempms;
posstr(exp1,exp2)
返回EXP2在EXP1中的位置
selectposstr('abcdefgh','d')frombsempms;
nullif(exp1,exp2)
如果EXP1=EXP2,则为NULL,否则为EXP1
nodenumber()
返回行的分区号
selectnodenumber(emp_no)frombsempms
month()
返回一个数值的月部分
selectmonth('2003/10/20')frombsempms;
mod(exp1,exp2)
返回EXP1除以EXP2的余数
selectmod(20,8)frombsempms;
minute()
返回一个数值的分钟部分
selectminute('18:
34:
23')frombsempms;
ltrim()
删除字符串前面的空格.
selectltrim('cddd')frombsempms;
hour()
返回一个数值的小时部分
selecthour('18:
34:
23')frombsempms;
double()
如果参数是一个数字表达式,返回与其相对应的浮点数,如果参数是字符串表达式,则返回该数的字符串表达式
selectdouble('5678')frombsempms;
exp()
返回参数的指数函数.
selectexp
(2)frombsempms;
float()
返回一个数的浮点表示
selectfloat(789)frombsempms;
floor()
返回小于或等于参数的最大整数
slectfloor(88.93)frombsempms;
hex()
返回一个表示为字符串的值的16进制表示.
selecthex(16)frombsempms;
二日期的处理
如果你想将当前日期格式转化成定制的格式(比如‘yyyymmdd’),那又该如何去做呢?
按照我的经验,最好的办法就是编写一个自己定制的格式化函数。
下面是这个UDF的代码:
createfunctionts_fmt(TStimestamp,fmtvarchar(20))
returnsvarchar(50)returnwithtmp(dd,mm,yyyy,hh,mi,ss,nnnnnn)as
(
select
substr(digits(day(TS)),9),
substr(digits(month(TS)),9),
rtrim(char(year(TS))),
substr(digits(hour(TS)),9),
substr(digits(minute(TS)),9),
substr(digits(second(TS)),9),
rtrim(char(microsecond(TS)))fromsysibm.sysdummy1
)
selectcasefmt
when'yyyymmdd'
thenyyyy||mm||dd
when'mm/dd/yyyy'
thenmm||'/'||dd||'/'||yyyy
when'yyyy/dd/mmhh:
mi:
ss'
thenyyyy||'/'||mm||'/'||dd||''||hh||':
'||mi||':
'||ss
when'nnnnnn'
thennnnnnn
else
dateformat'||coalesce(fmt,' ')||'notrecognized.'endfromtmp
SQL日期和时间函数DAYNAME返回一个大小写混合的字符串,对于参数的日部分,用星期表示这一天的名称(例如,Friday)。
DAYOFWEEK返回参数中的星期几,用范围在1-7的整数值表示,其中1代表星期日。
DAYOFWEEK_ISO返回参数中的星期几,用范围在1-7的整数值表示,其中1代表星期一。
DAYOFYEAR返回参数中一年中的第几天,用范围在1-366的整数值表示。
DAYS 返回日期的整数表示。
JULIAN_DAY 返回从公元前4712年1月1日(儒略日历的开始日期)到参数中指定日期值之间的天数,用整数值表示。
MIDNIGHT_SECONDS 返回午夜和参数中指定的时间值之间的秒数,用范围在0到86400之间的整数值表示。
MONTHNAME 对于参数的月部分的月份,返回一个大小写混合的字符串(例如,January)。
TIMESTAMP_ISO 根据日期、时间或时间戳记参数而返回一个时间戳记值。
TIMESTAMP_FORMAT从已使用字符模板解释的字符串返回时间戳记。
TIMESTAMPDIFF 根据两个时间戳记之间的时差,返回由第一个参数定义的类型表示的估计时差。
TO_CHAR 返回已用字符模板进行格式化的时间戳记的字符表示。
TO_CHAR是VARCHAR_FORMAT的同义词。
TO_DATE 从已使用字符模板解释过的字符串返回时间戳记。
TO_DATE是TIMESTAMP_FORMAT的同义词。
WEEK 返回参数中一年的第几周,用范围在1-54的整数值表示。
以星期日作为一周的开始。
WEEK_ISO 返回参数中一年的第几周,用范围在1-53的整数值表示。
要计算两个日期之间的天数,可以:
days(currentdate)-days(date('2000-9-1'))
要使用SQL获得当前的日期、时间及时间戳记,请参考适当的DB2寄存器:
SELECTcurrentdateFROMsysibm.sysdummy1SELECTcurrenttimeFROMsysibm.sysdummy1SELECTcurrenttimestampFROMsysibm.sysdummy1
sysibm.sysdummy1表是一个特殊的内存中的表,用它可以发现如上面演示的DB2寄存器的值。
您也可以使用关键字VALUES来对寄存器或表达式求值。
例如,在DB2命令行处理器(C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DB2 学习 笔记