感觉有很多基础问题的答案都是可以通过DB2的帮助获得的,因为DB2安装后自身就带有非常详尽的帮助信息,所以偶觉得有必要总结一下如何获得DB2指令语法的帮助!
以下的讨论的是AIX5.2或WINXP下的DB2 8.2,主要侧重维护方面,因本人才疏学浅,涉库不深,有不当之处,还望大伙多多指正和补充!
目录:
一、如何学会使用db2指令
1、看图解
2、使用db2指令
3、查找资料
二、故障诊断
1、错误信息种类
2、确定错误信息
3、查看db2diag.log
4、收集及分析db2trc跟踪信息
一、如何学会使用db2指令
1、看图解
在使用DB2帮助及在查阅各种文档时,会碰到命令解释图解,所以,学会使用DB2指令,首选需要了解在DB2帮助中常用的两种命令图解。
命令的语法以图的形式存在。图告知您可使用特殊命令执行的操作,并且表明不同选项之前以及有时同一选项的不同值之间的关系。DB2中常用的语法图解有两种不同类型:轨道图和 BNF(Backus-Naur 格式)图。
==> 如何读轨道图
每个轨道图由两个右箭头开始并且以一对左右箭头结束。由单个右箭头开始的行是延续行。您从左到右,从上到下,按照箭头的方向读轨道图。
用于轨道图的其它约定是:
>>-A--B--C-----------------------------------------------------><
您必须指定值 A、B 和 C。必需值在轨道图的主行上显示。
>>-+---+-------------------------------------------------------><
'-A-'
您可指定值 A。在轨道图的主行下显示可选值。
>>-+-A-+-------------------------------------------------------><
+-B-+
'-C-'
值 A、B 和 C 是可选的,您必须指定其中一个。
>>-+---+-------------------------------------------------------><
+-A-+
+-B-+
'-C-'
值 A、B 和 C 是可选的,您可指定其中一个。
.-,-----.
V |
>>---+---+-+---------------------------------------------------><
+-A-+
+-B-+
'-C-'
您可指定 A、B 和 C 的一个或多个值。多个或重复的值的任何必需分隔符(在这个示例中是逗号(,))显示在箭头上。
.-+---+-.
| '-,-' |
V |
>>---+---+-+---------------------------------------------------><
'-A-'
您可多次指定值 A。此示例中的分隔符是可选的。
.-A-.
>>-+---+-------------------------------------------------------><
+-B-+
'-C-'
值 A、B 和 C 是可选的,您可指定其中一个。如果未指定显示的值,则使用缺省值 A(主行上显示的值)。
>>-| 名称 |----------------------------------------------------><
名称
|--A--+---+-----------------------------------------------------|
'-B-'
从主轨道图中分别显示轨道片段名称。
标点符号和大写值 按所示准确无误地指定。
小写值(例如,name) 提供您自己的文本代替 name 变量。
这种命令解释方式常出现在DB2的联机文档中,如查看"db2 list history"命令的使用在文档中是这样描述的:
代码: |
>>-LIST HISTORY----+-------------------+------------------------> +-BACKUP------------+ +-ROLLFORWARD-------+ +-ALTER TABLESPACE--+ +-DROPPED TABLE-----+ +-LOAD--------------+ '-RENAME TABLESPACE-' >-----+-ALL--------------------------------+--------------------> +-SINCE--timestamp-------------------+ '-CONTAINING--+-schema.object_name-+-' '-object_name--------' >----FOR--+----------+---database-alias------------------------>< +-DATABASE-+ '-DB-------' |
==> 如何读 BNF 图
在 BNF 中,以行的形式写出语法。方括号([ 和 ])、花括号({ 和 })以及垂直条符号(|)用于描述语法。这些符号全体称作为控件。
空格用于将语法元素从方括号、花括号和垂直条中分隔出来。使用您的屏幕阅读器的“读下一词”(通常 Ctrl + 右箭头键)和“读前一词”(通常 Ctrl + 左箭头键)在连续 BNF 控件和语法元素之间移动。
在您构造命令时需要包含的字符(例如,左右括号,( 和 ) 和诸如逗号的分隔符)位于您需要输入它们的点上。例如,可在选项列表前读出左括号。在一些编程语言(如 C、C++ 和 Java)中,在语言中使用方括号、花括号和垂直条符号。为了简化标识,其中方括号、花括号或垂直条符号作为编程语言的一部分出现在语法图中,则它的前面有转义字符 \(反斜杠)。例如,如果您听到 \{,您知道在构造命令时应实际在该点输入 {,并且该 { 不是语法图结构的一部分。
BNF 语法按如下所示工作:
·花括号 { 和 } 用于表明一组语法元素,与 ( 和 ) 用于代数的方法一样。例如,AUTH( { USERID | SYSTEMID } ) 表明 USERID 和 SYSTEMID 是 AUTH 关键字的一组选项。注意,此示例语法包含您需要输入括在选择的选项外面 ( 和 )。如果您选择 USERID 选项,您的命令将是 AUTH(USERID)。
·方括号 [ 和 ] 意味着可选的构造。可选的构造以 [ 开始并且以 ] 结束。方括号 [ 和 ],以及花括号 { 和 } 都可在语法元素的相同组上使用。例如,语法 [ AUTH( { USERID | SYSTEMID } ) ] 中存在方括号意味着您可从构造的命令中省去关键字 AUTH 和它的选项。
·垂直条 | 是 OR 标记并意味着备用。| 右边的所有构造是 | 左边构造的备用。| 的作用域通过组或构造的结束(以 ] 或 } 显示)或语法的结束来定界。垂直条适用于定界组中的所有项,而不仅仅是那些与条紧密相邻的项。例如,{ A | B C } 意味着“A 或 B 或 C”。如果您要表明“A 和 C 或者 B 和 C”,正确的语法将是 { A | B } C。
·值边上的感叹号 ! 表明备用集合中的缺省值。例如,AUTH( { !USERID! | SYSTEMID } ) 意味着 USERID 是 AUTH 关键字的缺省选项。特别注意括在包含缺省值的构造外面的任何方括号 [ 和 ] 的位置。如果方括号在整个构造外,而不是备用集合外,例如 [ AUTH( { !USERID! | SYSTEMID } ) ],这意味着缺省值适用于整个构造。如果您从完成的命令中省略 AUTH 关键字,将自动包含缺省设置 AUTH(USERID)。但是,如果在整个构造和备用集合外都有方括号,例如 [ AUTH [ ( { !USERID! | SYSTEMID } ) ] ],这意味着缺省值仅适用于备用集合。在这种情况下,如果您从完成的命令中省略 AUTH 关键字,将不包含缺省设置。如果您包含 AUTH 关键字,但不表明您选择的选项,将应用缺省选项 USERID。
·省略号 ... 跟在构造后面意味着可以可选地重复该构造中给定的语法元素。例如,{ HOST | STATE | TYPE } ... 意味着您可包含一个以上关键字 HOST、STATE 和 TYPE。注意,如果构造仅包含一个语法元素,您可多次重复该同一语法元素。但是,如果构造包含一个以上语法元素,您可使用一个以上元素,但您不能多次使用每个元素。在上面的示例中,您可写 HOST STATE,但您无法写 HOST HOST。
·以 %(百分率符号)开始和结束的语法元素意味着元素是语法片段的名称,而不是文字。它表明在别处定义的引用。例如,%OP1% 意味着在这点上,您应引用单个语法片段 OP1。在获取此示例的语法中,OP1 给定了进一步选项的列表。
在DB2 CLP下是这是主要的命令描述方式,如同样是以上的"db2 list history"命令,在CLP的帮助是如下描述的:
代码: |
CUtester-mymm > db2 ? list history LIST HISTORY {BACKUP | ROLLFORWARD | REORG | CREATE TABLESPACE | ALTER TABLESPACE | DROPPED TABLE | LOAD | RENAME TABLESPACE | ARCHIVE LOG} {ALL | SINCE timestamp |CONTAINING {schema.object_name | object_name}} FOR [DATABASE] database-alias NOTE: From the operating system prompt, prefix commands with 'db2'. Special characters MAY require an escape sequence (\), for example: db2 \? change database db2 ? change database xxx comment with \"text\" |
2、在CLP下使用db2帮助
分两种情况,一种是对于DB2指令及DB2 SQL指令,都可以使用"db2 ? command"的方式来获得帮助,如:
代码: |
CUtester-mymm > db2 ? prune PRUNE HISTORY timestamp [WITH FORCE OPTION] [AND DELETE] PRUNE LOGFILE PRIOR TO log-file-name NOTE: From the operating system prompt, prefix commands with 'db2'. Special characters MAY require an escape sequence (\), for example: db2 \? change database db2 ? change database xxx comment with \"text\" |
以下收集了DB2 CLP下的指令,有兴趣的可以用"?" 查一下,也会学到不少东西!
DB2 CLP指令简要汇总:
代码: |
CLP Session Control “LIST COMMAND OPTIONS” “UPDATE COMMAND OPTIONS” “CHANGE ISOLATION LEVEL” “SET RUNTIME DEGREE” “TERMINATE” “QUIT” Database Manager Control “START DATABASE MANAGER” “STOP DATABASE MANAGER” “GET DATABASE MANAGER CONFIGURATION” “RESET DATABASE MANAGER CONFIGURATION” “UPDATE DATABASE MANAGER CONFIGURATION” “AUTOCONFIGURE” Database Control “RESTART DATABASE” “CREATE DATABASE” “DROP DATABASE” “MIGRATE DATABASE” “ACTIVATE DATABASE” “DEACTIVATE DATABASE” “QUIESCE” “UNQUIESCE” “LIST INDOUBT TRANSACTIONS” “LIST DRDA INDOUBT TRANSACTIONS” “GET DATABASE CONFIGURATION” “RESET DATABASE CONFIGURATION” “UPDATE DATABASE CONFIGURATION” “AUTOCONFIGURE” Database Directory Management “CATALOG DATABASE” “UNCATALOG DATABASE” “CATALOG DCS DATABASE” “UNCATALOG DCS DATABASE” “CHANGE DATABASE COMMENT” “LIST DATABASE DIRECTORY” “LIST DCS DIRECTORY” ODBC Management “CATALOG ODBC DATA SOURCE” “LIST ODBC DATA SOURCES” “UNCATALOG ODBC DATA SOURCE” “GET CLI CONFIGURATION” “UPDATE CLI CONFIGURATION” Client/Server Directory Management “CATALOG LOCAL NODE” “CATALOG NAMED PIPE NODE” “CATALOG APPC NODE” “CATALOG APPN NODE” “CATALOG NETBIOS NODE” “CATALOG TCP/IP NODE” “UNCATALOG NODE” “LIST NODE DIRECTORY” Network Support “REGISTER” “DEREGISTER” “UPDATE LDAP NODE” “CATALOG LDAP DATABASE” “UNCATALOG LDAP DATABASE” “CATALOG LDAP NODE” “UNCATALOG LDAP NODE” “REFRESH LDAP” DB2 Administration Server “GET ADMIN CONFIGURATION” “RESET ADMIN CONFIGURATION” “UPDATE ADMIN CONFIGURATION” “CREATE TOOLS CATALOG” “DROP TOOLS CATALOG” Recovery “ARCHIVE LOG” “BACKUP DATABASE” “RECONCILE” “RESTORE DATABASE” “ROLLFORWARD DATABASE” “LIST HISTORY” “PRUNE HISTORY/LOGFILE” “UPDATE HISTORY FILE” “INITIALIZE TAPE” “REWIND TAPE” “SET TAPE POSITION” Operational Utilities “FORCE APPLICATION” “LIST PACKAGES/TABLES” “REORGCHK” “REORG INDEXES/TABLE” “RUNSTATS” Database Monitoring “GET MONITOR SWITCHES” “UPDATE MONITOR SWITCHES” “GET DATABASE MANAGER MONITOR SWITCHES” “GET SNAPSHOT” “RESET MONITOR” “INSPECT” “LIST ACTIVE DATABASES” “LIST APPLICATIONS” “LIST DCS APPLICATIONS” Data Utilities “EXPORT” “IMPORT” “LOAD” “LOAD QUERY” Health Center “ADD CONTACT” “ADD CONTACTGROUP” “DROP CONTACT” “DROP CONTACTGROUP” “GET ALERT CONFIGURATION” “GET CONTACTGROUP” “GET CONTACTGROUPS” “GET CONTACTS” “GET DESCRIPTION FOR HEALTH INDICATOR” “GET HEALTH NOTIFICATION CONTACT LIST” “GET HEALTH SNAPSHOT” “GET RECOMMENDATIONS” “RESET ALERT CONFIGURATION” “UPDATE ALERT CONFIGURATION” “UPDATE CONTACT” “UPDATE CONTACTGROUP” “UPDATE HEALTH NOTIFICATION CONTACT LIST” Application Preparation “PRECOMPILE” “BIND” “REBIND” Remote Server Utilities “ATTACH” “DETACH” Table Space Management “LIST TABLESPACE CONTAINERS” “SET TABLESPACE CONTAINERS” “LIST TABLESPACES” “QUIESCE TABLESPACES FOR TABLE” Database Partition Management “ADD DBPARTITIONNUM” “DROP DBPARTITIONNUM VERIFY” “LIST DBPARTITIONNUMS” Database Partition Group Management “LIST DATABASE PARTITION GROUPS” “REDISTRIBUTE DATABASE PARTITION GROUP” Data Links “ADD DATALINKS MANAGER” “DROP DATALINKS MANAGER” “LIST DATALINKS MANAGERS” Additional Commands “DESCRIBE” “ECHO” “GET AUTHORIZATIONS” “GET CONNECTION STATE” “GET INSTANCE” “GET ROUTINE” “HELP” “PING” “PUT ROUTINE” “QUERY CLIENT” “SET CLIENT” |
还有一种情况是对于DB2系统指令,这类命令没有统一的获得指令帮助的方法,最好的办法是查阅《Command Reference》,但很多指令都可以用"-h"或"-?"参数获得帮助,如db2icrt、db2idrop、db2licm、db2pd、db2support等等,但也有许多不需要加参数的指令就不能用以上办法,如:db2stop、db2start、db2ilist等,不过加上"-h"或"-?"也只会出个错误提示,但是有的不可以轻易尝试,如db2_kill,最好还是看手册吧!这些指令存在于实例目录下sqllib/bin目录下,有兴趣的可以看一下!
3、查找资料
几个文档可以帮助学者学习和查找各指令的使用:《Command Reference》、《SQL Reference Volume 1》和《SQL Reference Volume 2》。
二、故障诊断
1、错误信息种类
在维护过程中,可以通过DB2报出的错误代码来确定错误所在。DB2提供的错误信息以代码前缀来区分错误类别,分为以下几类:
代码: |
ADM messages generated by many DB2 components. ASN messages generated by DB2 Replication AUD messages generated by the DB2 Audit facility. CCA messages generated by the Client Configuration Assistant CLI messages generated by Call Level Interface DBA messages generated by the Database Administration tools DBI messages generated by installation and configuration DBT messages generated by the Database tools DB2 messages generated by the command line processor DIA diagnostics messages generated by many DB2 components. DWC messages generated by the Data Warehouse Center DXX messages generated by the XML Extender GOV messages generated by the DB2 governor utility. GSE messages generated by the DB2 Spatial Extender ICC messages generated by the Information Catalog Center SAT messages generated in a satellite environment SPM messages generated by the sync point manager SQL messages generated by the database manager when a warning or error condition has been detected. |
2、确定错误信息
确定错误代码的含义的一种方法是查看文档《Message Reference Volume 1》、《Message Reference Volume 2》,另一个方法是最常用最方便的方法,用CLP查询代码含义,如在做表格delete时,报SQL0100W,就可以如下查询:
代码: |
CUtester-mymm > db2 ? sql0100 SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. Explanation: One of the following conditions is true: o No row was found that meets the search conditions specified in an UPDATE or DELETE statement. o The result of a SELECT statement was an empty table. o A FETCH statement was executed when the cursor was positioned after the last row of the result table. o The result of the SELECT used in an INSERT statement is empty. No data was retrieved, updated, or deleted. User Response: No action is required. Processing can continue. sqlcode : +100 sqlstate : 02000 |
3、查看db2diag.log
有时用SQL代码查询并不能直观地看出故障所在,就要看db2诊断日志了。比如在做db2start时报错:
代码: |
CUtester-mymm > db2start 04/20/2005 11:59:47 0 0 SQL5043N Support for one or more communications protocols failed to start successfully. However, core database manager functionality started successfully. SQL1063N DB2START processing was successful. |
直接查看SQL5043并不能确定问题所在,如果查一下db2diag.log,就很清楚了:
代码: |
2005-04-20-11.59.46.114107+480 E33845468C447 LEVEL: Error PID : 25032 TID : 1 PROC : db2sysc 0 INSTANCE: db2inst1 NODE : 000 FUNCTION: DB2 UDB, common communication, sqlcctcpconnmgr, probe:50 MESSAGE : ADM7006E The SVCENAME DBM configuration parameter was not configured. Update the SVCENAME configuration parameter using the service name defined in the TCP/IP services file. |
这样改一下SVCENAME就可以了!
db2诊断日志存在于实例目录下sqllib/db2dump(UNIX下默认,在WIN下存在于实例目录)下,可以通过修改DBM参数DIAGPATH来改变诊断日志目录,该目录还有dump文件及trap文件。诊断日志有五个诊断级别,分别是:
引用: |
0--不记录诊断信息 1--只记录严重错误 2--记录所有错误 3--记录所有错误和警告(默认) 4--记录所有错误、警告和信息型信息 |
诊断级别可以通过DBM参数DIAGLEVEL来改变,如果想搜集更多的信息可以将级别改成4,但代价是db2diag.log增长得太快了,要注意文件系统空间不要满掉!一般设成3就够了!
以下是一个db2diag.log文件的示例,可以帮助大家读懂这个文件:
代码: |
(1) 2002-05-17-17.30.32.140000 (2) InstanceB2MPP (3) Node:000 (4) PID:2204(db2bp.exe) (5) TID:2224 (6) Appid:*LOCAL.DB2MPP.020517213032 (7) database_utilities (8) sqlubckp (9) Probe:26 DiagData (10) 2cfc ffff 2002-05-17-20.17.20.793000 InstanceB2MPP Node:000 PID:596(db2syscs.exe) TID:2176 Appid: base_sys_utilities sqleMergeSqlca Probe:20 Database:SAMPLE Received sqlcode 1496 for request 8000001e from node number 1 (11) Data Title:SQLCA PID:596 TID:2176 Node:000 sqlcaid : SQLCA sqlcabc: 136 sqlcode: 1496 sqlerrml: 0 sqlerrmc: sqlerrp : SQLESRSU sqlerrd : (1) 0x00000000 (2) 0x00000000 (3) 0x00000000 (4) 0x00000000 (5) 0x00000000 (6) 0x00000001 sqlwarn : (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) sqlstate: 1. 表示记这条日志时的时间戳 2.实例名. 该例子中的实例名是db2mpp 3. 分区号. 在单分区的数据库中该值总为0 4. 应用或代理的进程ID. 5. 应用或代理的线程ID. 该值只有在windows平台上有效. 6. 应用ID. 该值对应于LIST APPLICATIONS命令的输出.每一个应用都有唯一的应用ID. 7. 组件名称(component). 8. 报错或信息的功能模块名, 该功能模块从属于上面的组件. 9. 功能模块的probe point. 对应于返回错误和信息的功能模块的源代码的位置. 10. 诊断信息. 该例子中的db2diag.log文件来源于Windows平台, 所以dump的信息是反字节顺序的.为了把该信息转化为sqlcode, 您需要把2cfc ffff转化成为 ffff fc2c同时从十六进制转化为十进制.请注意该值并不是都能转化为有效的sqlcode的. |
以上这个日志文件是在db27.2下的,在db28.2中,db2diag.log格式进行了改进,变得更加易读:
代码: |
2005-04-06-05.26.53.418280+480 I11170C296 LEVEL: Event PID : 43018 TID : 1 PROC : db2flacc INSTANCE: db2inst1 NODE : 000 FUNCTION: DB2 UDB, config/install, sqlfLogUpdateCfgParam, probe:30 CHANGE : CFG DBM: "Svcename" From: "" To: "DB2_db2inst1" 2005-04-06-05.26.55.895210+480 I11467C395 LEVEL: Warning PID : 20886 TID : 1 PROC : db2sysc 0 INSTANCE: db2inst1 NODE : 000 FUNCTION: DB2 UDB, routine_infrastructure, sqlerKillAllFmps, probe:5 MESSAGE : Bringing down all db2fmp processes as part of db2stop DATA #1 : Hexdump, 4 bytes 0x2FF21760 : 0000 0000 .... 2005-04-06-05.26.55.989040+480 I11863C354 LEVEL: Severe PID : 21876 TID : 1 PROC : db2hmon 0 INSTANCE: db2inst1 NODE : 000 FUNCTION: DB2 UDB, routine_infrastructure, sqlerFmpOneTimeInit, probe:100 MESSAGE : DiagData DATA #1 : Hexdump, 4 bytes 0x2FF22690 : FFFF FBEE |
是不是这个信息更加容易理解啊?而且8.2提供了一个非常方便的诊断日志分析工具db2diag,可以根据需要查看格式化db2diag.log的输出,有兴趣的可以用"db2diag -h"看一下帮助!
4、收集及分析db2trc跟踪信息
发生在AP中的问题用诊断日志往往不能确定,就需要用db2trc问题跟踪了!