表空间类型分为SMS和DMS,分别是systemmanagementspace,databasemanagementspace.SMS使用方便,简单,无需手工创建和维护数据存储文件。DMS需要手动指定container和存储数据的文件名,并保证有足够磁盘空间可用。
对于一个数据库,至少存在一个pagesize为4K的系统临时表空间,可以额外建立具有更大pagesize的用户临时表空间,系统会自动进行使用。
无法用alter语句更改一个字段的数据类型,对某些字段可以更改数据长度,这一点上相对于Oracle,DB2的限制要多一些。
可以使用:select表达式fromsysibm.sysdummy;替代的,以下语句是等价的:values表达式;
表和视图的创建、更新、删除操作,都写日志,因此可以commit或rollback。
在update语句中,如果没有对定义了默认值的某个字段显式赋值,则更新时,此字段不会重新执行默认值中定义的表达式。为了让其重新执行默认值定义的表达式,可以采用以下方式:
createtablet1(c1varchar(32),lastupdatetimewithdefaultcurrenttimpstamp);updatet1setc1='newstring',lastupdatetime=default;
对于DB2数据库可以在创建时指定codepage参数,创建后不可修改。当应用程序访问数据库时,DB2会比较两者的codepage是否一致,不一致则进行代码页的自动转换。为了减少转换所带来的开销,应尽量保证应用程序所采用的代码页与数据库一致。
可以对DB2CLP工具的codepage进行设置,使用:
$db2setDB2CODEPAGE=1386
本例中设置的是中文GBK字符集在Windows平台对应的值。注意,这个数字值是由DB2自己定义的。有关各种字符集在相应平台所对应的代码页值可在IBM网站查找。
在DB2CLP中,对远程数据库编目的操作,首先把远程主机映射为本地节点,节点名自己指定,本例采用TCPIP连接。service_name一般定义在远程主机的/etc/services文件中。
$db2CATALOGTCPIPNODElocal_node_nameREMOTEhostname|ipSERVERservice_name
然后把已知的远程主机的数据库映射到本地别名,注意本地别名在主机级别不能重复。节点名指定上面刚编目的节点。
$db2CATALOGDATABASEdb_nameASlocal_aliasATlocal_node_nameUSERusernameUSINGpassword
现在就可以用刚才编目中定义的别名连接远程主机数据库
$db2CONNECTTOlocal_aliasUSERusernameUSINGpassword
获取数据库详细配置信息
$db2GETCONFIGURATIONSHOWDETAIL
对于DB2返回的错误号,可以用以下方法查阅说明(以sql10008为例):
$db2?sql10008
数据库的备份与恢复:
使用备份与恢复工具可以完成在不同的服务器见完整的转移数据库的工作,命令行方式如下:
备份
$db2BACKUPDATABASEdb_nameUSERuser_nameUSINGpasswordtobackup_dir_name$db2BACKUPDATABASEdlhdbUSERdlhUSINGadmindlhTOd:\backups
恢复
$db2RESTOREDATABASEsource_db_nameUSERuser_nameUSINGpasswordFROMbackup_dir_nameTAKENATbackup_file_create_timeTOdriver_letterINTOnew_db_name$db2RESTOREDATABASEdlhdbUSERdlhUSINGadmindlhFROMd:\backupsTAKENAT20031209141056TOd:INTOnewdb
有关实例的操作:
设置默认实例环境变量
$db2SETDB2INSTANCE=inst_name
启动当前实例
$db2start
停止当前实例
$db2stop[force]
连接到某个实例
$db2ATTACHTOANSTANCEinst_name
获取实例的配置参数
$db2GETDBMCFGSHOWDETAIL
导出数据库完整的定义到脚本文件,包括表,视图,函数,数据库参数等
$db2look-dsample(数据库)-a-e-l-x-m-f-o(参数)samplesql.out(输出文件)
load一个表的数据时,有可能导致表空间处于backuppending(0x0020)状态。比如把整形数据load到double型的字段中。
处于backuppending状态的表空间不能被访问。
可以通过对此表空间运行一次backup操作,恢复到正常状态(0x0)。
对于自增字段,可以通过两种方式指定:
generatedbydefaultasidentitygeneratedalwaysasidentity
区别是,第一种方式在插入数据时允许手工指定自增字段的值,只要不重复即可,并且数据库会自动设置下一个值;
第二种方式则不允许指定,只能由数据库自动分配并插入。
DB2sql语句中转义符的使用:
select*fromt1wherealike'%abc\%def'escape'\';
创建数据库时,出现SQL1043C错误,可能的问题:
指定容器所在的磁盘空间不足,
当容器为file类型时,后面的long-num参数不对,比如25600代表256Mb,但如果指定256则会导致以上错误。
平台RHLinux8
DB2UDBv8.1
在WAS5中建立到db2的数据源,但连接失败,返回以下错误:
[ServletError]-[SQLConnect]:java.lang.UnsatisfiedLinkError:SQLConnect
原因是没有为运行was服务的用户设置以下环境变量:
D_LIBRARY_PATHLIBPATHDB2INSTANCE...
以上环境变量定义在$INSTHOME/sqllib/db2profile文件中,可以采用的解决方案:
$shstopServer.shservername$.$INSTHOME/sqllib/db2profile$shstartServer.shservername
也可以把db2profile放到was启动脚本中首先执行。
如果只设置了LD_LIBRARY_PATH,LIBPATH两个环境变量,DB2会返回以下错误:
CLI0600EInvalidconnectionhandleorconnectionisclosed.SQLSTATES1000
对应于Oracle的Job包功能,DB2通过一个GUI工具-任务中心(taskcenter)实现。使用任务中心前需要进行必要的工具设置,需要创建一些数据库对象,可以创建在已有的一个数据库中,也可以单独创建一个数据库。通过以下命令实现:
createcatalogtoolsschema_namecreatenewdatabasedb_name
此命令为编目工具创建一个名为db_name的数据库,并指定了一个模式名。
注意:无法用using子句指定一个codeset,系统会默认使用ISO8859-1字符集。
QuestCenterforDB2带有数据库性能诊断功能,动态监视db内存,磁盘io,表空间,负载等等。
DB2客户端的类型:
DB2运行时客户端DB2RuntimeClient
DB2管理客户端DB2AdministratorClient(包含运行时客户端的所有内容)
DB2应用程序开发客户端DB2ApplicationDevelopmentClient(包含管理客户端的所有内容)
DB2瘦客户端DB2ThinClient
DB2RelationalConnect联邦数据库,用于连接异种数据库。