邪恶八进制信息安全团队技术讨论组's Archiver

ring04h 2006-5-1 17:45

[转载]有关DB2的FAQ

<p>信息来源:塞迪</p><p style="TEXT-INDENT: 2em">1、DB2 命令行处理器中命令选项的介绍 </p><p style="TEXT-INDENT: 2em">环境 产品:DB2 UDB </p><p style="TEXT-INDENT: 2em">平台:跨平台 </p><p style="TEXT-INDENT: 2em">版本:Version 6.1,Version 7.1 </p><p style="TEXT-INDENT: 2em">问题 介绍 DB2 命令行状态下有关命令选项的用途及设置方法。 </p><p style="TEXT-INDENT: 2em">解答 在 DB2 命令行处理器中使用命令 db2 list command options,可得到如下输出: </p><p style="TEXT-INDENT: 2em">命令行处理器选项设置 </p><p style="TEXT-INDENT: 2em">后端进程等待时间(秒) (DB2BQTIME) = 1 </p><p style="TEXT-INDENT: 2em">连接至后端的重试次数 (DB2BQTRY) = 60 </p><p style="TEXT-INDENT: 2em">请求队列等待时间(秒) (DB2RQTIME) = 5 </p><p style="TEXT-INDENT: 2em">输入队列等待时间(秒) (DB2IQTIME) = 5 </p><p style="TEXT-INDENT: 2em">命令选项 DB2OPTIONS) = </p><p style="TEXT-INDENT: 2em">选项 说明 当前设置 </p><p style="TEXT-INDENT: 2em">------ ------------------------------- ------------ </p><p style="TEXT-INDENT: 2em">-a 显示 SQLCA OFF </p><p style="TEXT-INDENT: 2em">-c 自动落实 ON </p><p style="TEXT-INDENT: 2em">-e 显示 SQLCODE/SQLSTATE OFF </p><p style="TEXT-INDENT: 2em">-f 读取输入文件 OFF </p><p style="TEXT-INDENT: 2em">-l 将命令记录到历史文件中 OFF </p><p style="TEXT-INDENT: 2em">-n 除去换行字符 OFF </p><p style="TEXT-INDENT: 2em">-o 显示输出 ON </p><p style="TEXT-INDENT: 2em">-p 显示交互式输入提示 ON </p><p style="TEXT-INDENT: 2em">-r 将输出保存到报告文件 OFF </p><p style="TEXT-INDENT: 2em">-s 在命令出错时停止执行 OFF </p><p style="TEXT-INDENT: 2em">-t 设置语句终止字符 OFF </p><p style="TEXT-INDENT: 2em">-v 回送当前命令 OFF </p><p style="TEXT-INDENT: 2em">-w 显示 FETCH/SELECT 警告信息 ON </p><p style="TEXT-INDENT: 2em">-x 不打印列标题 OFF </p><p style="TEXT-INDENT: 2em">-z 将所有输出保存到输出文件 OFF </p><p style="TEXT-INDENT: 2em">这些选项的具体功能及其缺省设置为: </p><p style="TEXT-INDENT: 2em">.a 显示 SQLCA 的数据,缺省为 OFF。 </p><p style="TEXT-INDENT: 2em">.c 是否自动落实 SQL 命令,缺省为 ON。 </p><p style="TEXT-INDENT: 2em">.e {c|s} 显示 SQLCODE 或 SQLSTATE,缺省为 OFF。 </p><p style="TEXT-INDENT: 2em">.f 文件名 将命令的输入从标准输入指定到某一文件,缺省为 OFF。 </p><p style="TEXT-INDENT: 2em">注:命令“db2 < 文件名”与“db2 -f 文件名”作用相同。 </p><p style="TEXT-INDENT: 2em">.l 文件名 将命令记录到历史文件中,缺省为 OFF。 </p><p style="TEXT-INDENT: 2em">.n 除去换行字符,缺省为 OFF。 </p><p style="TEXT-INDENT: 2em">.o 将输出数据及信息送到标准输出,缺省为 ON。 </p><p style="TEXT-INDENT: 2em">.p 在交互方式下显示命令行处理器的提示信息,缺省为 ON。 </p><p style="TEXT-INDENT: 2em">.r 将输出保存到指定文件中,缺省为 OFF。 </p><p style="TEXT-INDENT: 2em">.s 执行批处理文件中或交互方式下的命令出错时即停止执行操作,缺省为 OFF。 </p><p style="TEXT-INDENT: 2em">.t 设置语句终止字符,缺省为 OFF。 </p><p style="TEXT-INDENT: 2em">.v 回送当前命令到标准输出,缺省为 OFF。 </p><p style="TEXT-INDENT: 2em">.w 显示 FETCH 或 SELECT 警告信息,缺省为 ON。 </p><p style="TEXT-INDENT: 2em">.x 不打印列标题,缺省为 OFF。 </p><p style="TEXT-INDENT: 2em">.z 文件名 将所有输出保存到输出文件,缺省为 OFF。 </p><p style="TEXT-INDENT: 2em">以上选项不要求顺序并可以进行组合使用。若要修改其缺省设置,将选项设为打开,只需在选项前加“+”;而将选项关闭则加“-”。 </p><p style="TEXT-INDENT: 2em">通过设置环境变量 DB2OPTIONS,也可对这些选项进行设置。如在 Intel 系统下使用:set DB2OPTIONS='+c -a';在 UNIX 系统下使用:export DB2OPTIONS='+c -a'。但命令行处理器选项设置的优先级高于 DB2OPTIONS 的设置。 </p><p style="TEXT-INDENT: 2em">另外使用 db2 update command options 命令,同样可以实现通过交互式输入模式或命令文件改变选项设置的功能。如:db2 update command options using c off。 </p><p style="TEXT-INDENT: 2em">2、DB2备份历史文件损坏 </p><p style="TEXT-INDENT: 2em">环境 产品:DB2 </p><p style="TEXT-INDENT: 2em">平台:跨平台 </p><p style="TEXT-INDENT: 2em">版本:DB2 5.2;DB2 6.1 </p><p style="TEXT-INDENT: 2em">问题 DB2备份历史文件损坏 </p><p style="TEXT-INDENT: 2em">解答 如果在作数据库备份操作时遇到DB2备份历史文件db2rhist.asc损坏, 错误代码SQL2048的错误,可按照如下步骤操作: 1. 先在NODE000x/SQL000x目录下找到该文件,及其备份文件db2rhist.bak,将db2rhist.asc文件移动到其他目录中。 </p><p style="TEXT-INDENT: 2em">2. 重新运行备份命令。此命令仍会报同样的错误,但同时DB2系统会自动用db2rhist.bak重新生成db2rhist.asc文件。 </p><p style="TEXT-INDENT: 2em">3. 再次运行备份命令,它将能够正确运行。 </p><p style="TEXT-INDENT: 2em">如果按照上面的步骤操作后,仍出同样的错误,则再按如下操作: 1. 先在NODE000x/SQL000x目录下找到该文件,及其备份文件db2rhist.bak,将这两个文件移动到其他目录中。 </p><p style="TEXT-INDENT: 2em">2. 重新运行备份命令。此命令仍会报同样的错误,但同时DB2系统会自动重新生成这两个文件。 </p><p style="TEXT-INDENT: 2em">3. 再次运行备份命令,它将能够正确运行。 </p><p style="TEXT-INDENT: 2em">3、DB2从7.2版本开始支持存储过程的发布,即可以将一个数据库上已编译好的存储过程抽取并安装到其它数据库上,目标数据库所在的服务器上不再需要c编译器。 </p><p style="TEXT-INDENT: 2em">解答 发布存储过程请按以下步骤: </p><p style="TEXT-INDENT: 2em">1. 如果数据库是从7.1版本打补丁后升为7.2版本,请用 </p><p style="TEXT-INDENT: 2em">db2updv7 -d 数据库名 </p><p style="TEXT-INDENT: 2em">使DB2可以抽取或安装已编译好的存储过程; </p><p style="TEXT-INDENT: 2em">2. 在源数据库,编译好存储过程; </p><p style="TEXT-INDENT: 2em">3. 在源数据库,运行 </p><p style="TEXT-INDENT: 2em">db2 "get routine into 文件名 from procedure 存储过程名" </p><p style="TEXT-INDENT: 2em">抽取存储过程; </p><p style="TEXT-INDENT: 2em">4. 上传文件至目标服务器; </p><p style="TEXT-INDENT: 2em">5. 在目标服务器端,运行 </p><p style="TEXT-INDENT: 2em">db2 "put routine from 文件名" </p><p style="TEXT-INDENT: 2em">安装已编译好的存储过程。 </p><p style="TEXT-INDENT: 2em">4、DB2数据库中一个表的行长度、列数以及每页行数在表空间中的限制 </p><p style="TEXT-INDENT: 2em">环境 [产品] DB2 UDB </p><p style="TEXT-INDENT: 2em">[平台] Windows 9x/NT/2000, Unix, Linux </p><p style="TEXT-INDENT: 2em">[版本] 6.x/7.x </p><p style="TEXT-INDENT: 2em">问题 DB2数据库中一个表的行长度、列数以及每页行数在表空间中的限制 </p><p style="TEXT-INDENT: 2em">解答 在DB2数据库中一个表的每行长度、列数以及每页行数在表空间中的限制如下: </p><p style="TEXT-INDENT: 2em">表空间页面大小 表空间中行长度限制(bytes) 表空间中列数限制 表空间中每页最大行数 </p><p style="TEXT-INDENT: 2em">4K 4005 500 255 </p><p style="TEXT-INDENT: 2em">8K 8101 1012 255 </p><p style="TEXT-INDENT: 2em">16K 16293 1012 255 </p><p style="TEXT-INDENT: 2em">32K 32677 1012 255 </p><p style="TEXT-INDENT: 2em">注:表空间页面大小只有4K,8K,16K,32K四种。 </p><p style="TEXT-INDENT: 2em">5、当编译一个复杂的SQL语句时,出现SQL0101N错误,怎么办? </p><p style="TEXT-INDENT: 2em">环境 DB2 V5.2; DB2 V6.1; DB2 V7.1 </p><p style="TEXT-INDENT: 2em">问题 某些SQL语句可能非常复杂,比如嵌套调用多个表或触发许多触发器,在对这样 </p><p style="TEXT-INDENT: 2em">的SQL语句进行编译时,出现SQL0101N错误,如何处理 </p><p style="TEXT-INDENT: 2em">解答 对于一个复杂的SQL语句,在调用多个表或触发多个触发器时, 可能会占用 </p><p style="TEXT-INDENT: 2em">大量的系统资源. </p><p style="TEXT-INDENT: 2em">当出现SQL0101N错误时, 首先需要确认系统中没有递归的触发器存在. </p><p style="TEXT-INDENT: 2em">之后可通过增加如下参数的值来解决此问题: </p><p style="TEXT-INDENT: 2em">1)STMTHEAP </p><p style="TEXT-INDENT: 2em">2)APPLHEAPSZ </p><p style="TEXT-INDENT: 2em">3)PCKCACHESZ </p><p style="TEXT-INDENT: 2em">6、如何实施已删除表的恢复(Dropped Table Recovery) </p><p style="TEXT-INDENT: 2em">解答 如何实施已删除表的恢复(Dropped Table Recovery) </p><p style="TEXT-INDENT: 2em">解答: </p><p style="TEXT-INDENT: 2em">1. 首先数据库要可以前滚恢复(数据库配置参数logretain或userexit打开)。 </p><p style="TEXT-INDENT: 2em">2. 对要实施Drop Table Recovery的表空间(限regular tablespace),执行: </p><p style="TEXT-INDENT: 2em">alter tablespace 表空间名 dropped table recovery on </p><p style="TEXT-INDENT: 2em">3. 用 list history dropped table all for 数据库名 得到删除表的tableid(例如 0000000000006d0000020003)和表结构的生成语句(DDL),记录tableid和该语句以便恢复。之后,用drop命令删除的表中的数据可以在前滚恢复时导出。 </p><p style="TEXT-INDENT: 2em">4. 恢复数据库后,如果想恢复已删除的表,在前滚时加recover dropped table tableid to 目标目录 。 在该目录下被删除的表中的数据导出,例如导出至 ../NODE0000/data文件。利用上面提到表结构生成语句生成被删除了的表,然后用import命令将数据导入表中。 </p><p style="TEXT-INDENT: 2em">7、如何更改本地系统名称 </p><p style="TEXT-INDENT: 2em">环境 [产品] DB2 UDB </p><p style="TEXT-INDENT: 2em">[平台] Windows 9x/NT/2000, Unix, Linux </p><p style="TEXT-INDENT: 2em">[版本] 5.x/6.x/7.x </p><p style="TEXT-INDENT: 2em">问题 在控制中心(Control Center)中,可以看到编目在节点下的系统名称。可启动控制中心的节点作为本地系统,名称是不能在这里改变的。那么如何改变本地系统的名称呢? </p><p style="TEXT-INDENT: 2em">解答 首先,从控制中心(Control Center)中知道本地系统所在的原节点名。 </p><p style="TEXT-INDENT: 2em">然后退出控制中心,在命令行处理器中输入以下命令: </p><p style="TEXT-INDENT: 2em">1. db2set db2system=新系统名 </p><p style="TEXT-INDENT: 2em">2. db2 terminate </p><p style="TEXT-INDENT: 2em">3. db2 uncatalog node 原节点名 </p><p style="TEXT-INDENT: 2em">4. db2 terminate </p><p style="TEXT-INDENT: 2em">重起控制中心,可以看到,本地系统名已更改。 </p><p style="TEXT-INDENT: 2em">8、如何将表空间的状态置为正常 </p><p style="TEXT-INDENT: 2em">环境 [产品] DB2 UDB </p><p style="TEXT-INDENT: 2em">[平台] Windows 9x/NT/2000, Unix, Linux </p><p style="TEXT-INDENT: 2em">[版本] 5.x/6.x/7.x </p><p style="TEXT-INDENT: 2em">问题 quiesce是一种持续状态的锁,它属于一个连接,当该连接失败时,quiesce状态依然存在。如何将表空间的状态置为正常状态? </p><p style="TEXT-INDENT: 2em">解答 除去quiesce状态: </p><p style="TEXT-INDENT: 2em">1. 连接到数据库 </p><p style="TEXT-INDENT: 2em">2. 用 list tablespaces 判断哪个tablespace处于quiesce状态和和取得对象(object)ID </p><p style="TEXT-INDENT: 2em">3. 判断对象ID对应的表 </p><p style="TEXT-INDENT: 2em">a)用 db2 "select tabname from syscat.tables where tablid=对象ID" 得到表名 </p><p style="TEXT-INDENT: 2em">b)用 db2 list history 判断是那个表 </p><p style="TEXT-INDENT: 2em">4. 用 db2 quiesce tablespaces for table 表名 reset 去除quiesce状态 </p><p style="TEXT-INDENT: 2em">9、如何实施联机备份 </p><p style="TEXT-INDENT: 2em">环境 [产品] DB2 UDB </p><p style="TEXT-INDENT: 2em">[平台] Windows 9x/NT/2000, Unix, Linux </p><p style="TEXT-INDENT: 2em">[版本] 5.x/6.x/7.x </p><p style="TEXT-INDENT: 2em">问题 如何实施联机备份? </p><p style="TEXT-INDENT: 2em">解答 数据库建立时日志方式默认是循环日志模式(Circular Log),这时是无法做联机备份的。所以,希望实施联机备份,首先要将日志方式改为归档日志模式(Archival Log)。 </p><p style="TEXT-INDENT: 2em">以sample数据库为例,可以在控制中心中改变sample数据库的配置参数LOGRETAIN为Recovery,或在命令行下用 db2 update db cfg for sample using LOGRETAIN on。改变此参数后,再次连接数据库会显示数据库处于备份暂挂(BACKUP PENDING)状态。这时,需要做一次对数据库的脱机备份。在控制中心中选择对数据库进行脱机备份或在命令行下用 db2 backup db sample 实施。此后数据库就可以进行联机备份了。 </p><p style="TEXT-INDENT: 2em">可以选择在控制中心中对数据库进行联机备份,或在命令行下用 db2 backup db sample online 实施。 </p><p style="TEXT-INDENT: 2em">注意: 利用联机备份得到的IMAGE文件进行恢复时,还需要相关的日志文件。</p><p style="TEXT-INDENT: 2em">10、如何在AIX上建立使用裸设备的数据库管理(DMS)表空间 </p><p style="TEXT-INDENT: 2em">环境 [产品] DB2 UDB </p><p style="TEXT-INDENT: 2em">[平台] AIX </p><p style="TEXT-INDENT: 2em">[版本] 5.x/6.x/7.x </p><p style="TEXT-INDENT: 2em">问题 如何在AIX上建立使用裸设备的数据库管理(DMS)表空间? </p><p style="TEXT-INDENT: 2em">解答 1. 用mklv命令建裸设备,语法为: </p><p style="TEXT-INDENT: 2em">mklv -t jfs -y 设备名 -U 用户名 -G 组名 vg名 lv大小 硬盘 </p><p style="TEXT-INDENT: 2em">例如: mklv -t jfs -y contest -U db2inst1 -G db2iadm1 rootvg 10 hdisk0 </p><p style="TEXT-INDENT: 2em">2. 然后创建表空间 </p><p style="TEXT-INDENT: 2em">1). 连接数据库 </p><p style="TEXT-INDENT: 2em">2). 创建表空间:注意在命令中要在加引号: </p><p style="TEXT-INDENT: 2em">db2 "create tablespace 表空间名 managed by database using (device 裸设备名及路径 大小)" </p><p style="TEXT-INDENT: 2em">例如: db2 "create tablespace tptest managed by database using (device '/dev/rcontest' 80M)" </p><p style="TEXT-INDENT: 2em">db2 "create tablespace tptest managed by database using (device '/dev/rc </p><p style="TEXT-INDENT: 2em">1、如何在Unix平台上启动DB2控制中心(Control Center) </p><p style="TEXT-INDENT: 2em">环境 [产品] DB2 UDB </p><p style="TEXT-INDENT: 2em">[平台] Unix </p><p style="TEXT-INDENT: 2em">[版本] 6.x/7.x </p><p style="TEXT-INDENT: 2em">问题 如何在Unix平台上启动DB2控制中心(Control Center) </p><p style="TEXT-INDENT: 2em">解答 再Unix平台上启动DB2控制中心需要一下几个步骤,以AIX操作系统为例: </p><p style="TEXT-INDENT: 2em">1. 安装DB2时选择安装DB2控制中心(Control Center); </p><p style="TEXT-INDENT: 2em">2. 以root账号登录,输入xhost +命令(每次重新启动Unix后需输入该条命令以启动控制中心); </p><p style="TEXT-INDENT: 2em">3. 以DB2实例管理员账号登录,输入以下命令 </p><p style="TEXT-INDENT: 2em">a. db2jstrt </p><p style="TEXT-INDENT: 2em">b. db2cc </p><p style="TEXT-INDENT: 2em">这样,就启动了DB2控制中心(Control Center)。 </p><p style="TEXT-INDENT: 2em">#xhost + </p><p style="TEXT-INDENT: 2em">#su - db2inst1 </p><p style="TEXT-INDENT: 2em">$db2jstrt </p><p style="TEXT-INDENT: 2em">$db2cc </p><p style="TEXT-INDENT: 2em">db2cc使用的是jdk118 </p><p style="TEXT-INDENT: 2em">export JAVA_HOME=/usr/jdk118 </p><p style="TEXT-INDENT: 2em">export PATH=/usr/jdk118/binPATH </p><p style="TEXT-INDENT: 2em">2、如何在查询语句中只显示结果的前n条记录 </p><p style="TEXT-INDENT: 2em">环境 [产品] DB2 UDB </p><p style="TEXT-INDENT: 2em">[平台] Windows 9x/NT/2000, Unix, Linux </p><p style="TEXT-INDENT: 2em">[版本] 5.x/6.x/7.x </p><p style="TEXT-INDENT: 2em">问题 在查询语句中,不想显示所有记录,只显示结果的前n条记录 </p><p style="TEXT-INDENT: 2em">解答 在查询语句中,不想显示所有记录,只显示结果的前n条记录,可以用 fetch first n rows only 跟在查询语句后面实现。 </p><p style="TEXT-INDENT: 2em">以sample数据库中的staff表为例,用如下命令可以得到查询结果的前5条建立: </p><p style="TEXT-INDENT: 2em">db2 "select * from staff fetch first 5 rows only" </p><p style="TEXT-INDENT: 2em">3、如何在命令行下查看修改实例和数据库配置参数 </p><p style="TEXT-INDENT: 2em">环境 [产品] DB2 UDB </p><p style="TEXT-INDENT: 2em">[平台] Windows 9x/NT/2000, Unix, Linux </p><p style="TEXT-INDENT: 2em">[版本] 5.x/6.x/7.x </p><p style="TEXT-INDENT: 2em">问题 如何在命令行下查看修改实例和数据库配置参数 </p><p style="TEXT-INDENT: 2em">解答 在命令行下查看实例的配置参数,可用 db2 get dbm cfg 命令实现。 </p><p style="TEXT-INDENT: 2em">类似地用 db2 get db cfg for 数据库名 可以得到数据库的配置参数。 </p><p style="TEXT-INDENT: 2em">以下是数据库参数的一部分: </p><p style="TEXT-INDENT: 2em">Log file size (4KB) (LOGFILSIZ) = 250 </p><p style="TEXT-INDENT: 2em">Number of primary log files (LOGPRIMARY) = 3 </p><p style="TEXT-INDENT: 2em">Number of secondary log files (LOGSECOND) = 2 </p><p style="TEXT-INDENT: 2em">修改实例配置参数,用 db2 update dbm cfg using 参数名 新值 </p><p style="TEXT-INDENT: 2em">类似,用 db2 update db cfg for 数据库名 using 参数名 新值 修改数据库配置参数。 </p><p style="TEXT-INDENT: 2em">例如,要修改sample数据库配置参数中的LOGPRIMARY为10,可用以下命令实现: </p><p style="TEXT-INDENT: 2em">db2 update db cfg for sample using logprimary 10 </p><p style="TEXT-INDENT: 2em">4、如何在命令行下执行DB2脚本(script) </p><p style="TEXT-INDENT: 2em">环境 [产品] DB2 UDB </p><p style="TEXT-INDENT: 2em">[平台] Windows 9x/NT/2000, Unix, Linux </p><p style="TEXT-INDENT: 2em">[版本] 5.x/6.x/7.x </p><p style="TEXT-INDENT: 2em">问题 如何在命令行下执行DB2脚本(script) </p><p style="TEXT-INDENT: 2em">解答 在命令窗口中运行DB2脚本,可用 db2 -svtf 脚本文件名 来实现。 </p><p style="TEXT-INDENT: 2em">例如,脚本文件名为sample.sql,运行:db2 -svtf sample.sql </p><p style="TEXT-INDENT: 2em">参数中: </p><p style="TEXT-INDENT: 2em">s 代表遇到错误时中止运行脚本 </p><p style="TEXT-INDENT: 2em">v 代表输出结果到屏幕 </p><p style="TEXT-INDENT: 2em">t 指以;号作为每行的分隔符 </p><p style="TEXT-INDENT: 2em">f 指后面需跟脚本文件名 </p><p style="TEXT-INDENT: 2em">如果希望即使遇到错误也不要中止运行可以去掉参数s。 </p><p style="TEXT-INDENT: 2em">5、文件標題: 如何解決資料庫別名已存在問題? </p><p style="TEXT-INDENT: 2em">修訂日期: 2001/10/15 </p><p style="TEXT-INDENT: 2em">文件來源: TSC Team </p><p style="TEXT-INDENT: 2em">英文標題: How to eliminate the existed database alias name? </p><p style="TEXT-INDENT: 2em">產品名稱: DB2 UDB </p><p style="TEXT-INDENT: 2em">作業平台: 跨平台 </p><p style="TEXT-INDENT: 2em">適用範圍: system administrator </p><p style="TEXT-INDENT: 2em" /><p style="TEXT-INDENT: 2em">-------------------------------------------------------------------------------- </p><p style="TEXT-INDENT: 2em">問題: </p><p style="TEXT-INDENT: 2em">如何解決資料庫別名已存在問題? </p><p style="TEXT-INDENT: 2em">解答: </p><p style="TEXT-INDENT: 2em">在建立資料庫時遇到資料庫別名已存在的問題時,可以: </p><p style="TEXT-INDENT: 2em">1)首先用 db2 list database directory 命令查看系統資料庫目錄(System Database Directory)中有沒有該資料庫。 </p><p style="TEXT-INDENT: 2em">如果有,應該再確定該資料庫是沒有用的資料庫之後用 db2 drop database 資料庫名將其刪除。 </p><p style="TEXT-INDENT: 2em">2)如果沒有,再用 db2 list database directory on location 看在本端資料庫目錄(Local Database Directory)中有沒有該資料庫,location指定資料庫的位置(如Windows下的C: ,Unix下的/home/db2inst1)。 </p><p style="TEXT-INDENT: 2em">如果有,先用 db2 catalog database 資料庫名 on location 將資料庫catalog到節點上,再對其進行刪除處理。 </p><p style="TEXT-INDENT: 2em">6、文件標題: 如何直接備份DB2資料庫到磁帶設備? </p><p style="TEXT-INDENT: 2em">修訂日期: 2001/06/06 </p><p style="TEXT-INDENT: 2em">文件來源: </p><p style="TEXT-INDENT: 2em">英文標題: How to backup DB2 database to a tape library? </p><p style="TEXT-INDENT: 2em">產品名稱: Database and Data Management </p><p style="TEXT-INDENT: 2em">作業平台: 跨平台 </p><p style="TEXT-INDENT: 2em">適用範圍:system administrator </p><p style="TEXT-INDENT: 2em">-------------------------------------------------------------------------------- </p><p style="TEXT-INDENT: 2em">問題: </p><p style="TEXT-INDENT: 2em">如何直接備份DB2資料庫到磁帶設備? </p><p style="TEXT-INDENT: 2em">解答: </p><p style="TEXT-INDENT: 2em">在UNIX和Windows NT作業系統,支援本端的磁帶設備。OS/2作業系統不提供本端磁帶 </p><p style="TEXT-INDENT: 2em">設備支援。下面以Windows作業系統為例,介紹如何將DB2資料庫直接備份到磁帶設備。 </p><p style="TEXT-INDENT: 2em">(1)首先在備份資料庫之前先要初始化磁帶設備,可用INITIALIZE TAPE命令完成此工作 </p><p style="TEXT-INDENT: 2em">,例如initialize tape on \\.\tape0 </p><p style="TEXT-INDENT: 2em">(2)備份資料庫到磁帶設備,可用backup database命令。如:backup database sample to \\.\tape0 </p><p style="TEXT-INDENT: 2em">(3)在回復資料庫時要先將磁帶倒帶,可用命令rewind tape。如:rewind tape on \\.\tape0。 </p><p style="TEXT-INDENT: 2em">(4)回復資料庫sample到一個新資料庫newdb時,可用restore database命令。如: </p><p style="TEXT-INDENT: 2em">restore database sample from \\.\tape0 into newdb </p><p style="TEXT-INDENT: 2em">附註:在備份資料庫到磁帶設備或從磁帶設備回復時,可能需要檢查磁帶機的blocking </p><p style="TEXT-INDENT: 2em">參數與DB2的資料庫管理(DBM)參數Max requester I/O block size是否符合。如 </p><p style="TEXT-INDENT: 2em">需更詳細資訊可參考DB2的命令手冊。</p><p style="TEXT-INDENT: 2em">7、文件標題: 怎樣解決DB2資料庫代碼頁不相容的問題 </p><p style="TEXT-INDENT: 2em">修訂日期: 2001/03/10 </p><p style="TEXT-INDENT: 2em">文件來源: [url]http://www-900.ibm.com/cn/support/viewdoc/FaqDisplay?DocId=1307130000002[/url] </p><p style="TEXT-INDENT: 2em">英文標題: How to solve DB2 database codepage imcompatablility problem </p><p style="TEXT-INDENT: 2em">產品名稱: DB2 UDB 7.1/6.1/5.2 </p><p style="TEXT-INDENT: 2em">作業平台: ALL </p><p style="TEXT-INDENT: 2em">適用範圍: system administrator </p><p style="TEXT-INDENT: 2em">-------------------------------------------------------------------------------- </p><p style="TEXT-INDENT: 2em">問題: </p><p style="TEXT-INDENT: 2em">怎樣解決DB2資料庫代碼頁(codepage)不相容的問題 </p><p style="TEXT-INDENT: 2em">解答: </p><p style="TEXT-INDENT: 2em">當發出命令:db2 connect to db_name 後系統出現 </p><p style="TEXT-INDENT: 2em">SQL0332N There is no available conversion for the source code page "819" to the target code page "1386". Reason Code "1". SQLSTATE=57017 </p><p style="TEXT-INDENT: 2em">DB2 要求來源代碼與目標代碼頁是相容的, 在以上的例子中,來源代碼頁為819与目標代碼頁1386不相容,導致了資料庫連接失敗, 解決方法如下: </p><p style="TEXT-INDENT: 2em">在發出db2 connect 命令失敗的機器上,在DB2 命令視窗中執行如下命令後重新進行連接: </p><p style="TEXT-INDENT: 2em">->; </p><p style="TEXT-INDENT: 2em">db2set db2codepage=1386  I instance_name </p><p style="TEXT-INDENT: 2em">db2 terminate </p><p style="TEXT-INDENT: 2em">8、在 AIX 和 Solaris 上如何配置存储过程构建器(SPB)? </p><p style="TEXT-INDENT: 2em">环境 产品: DB2 通用数据库 </p><p style="TEXT-INDENT: 2em">版本: 7.1 </p><p style="TEXT-INDENT: 2em">平台: AIX, Solaris </p><p style="TEXT-INDENT: 2em">问题 在 AIX 和 Solaris 上如何配置存储过程构建器(SPB)? </p><p style="TEXT-INDENT: 2em">解答 为了在 AIX 或 Solaris 上配置“存储过程构建器”,需确保在您的系统上安装了“Java 开发者工具箱”(JDK)。DB2 在可用于“控制中心”的系统上安装“Java 运行期环境”(JRE),但是,它将不允许使用“存储过程构建器”。 </p><p style="TEXT-INDENT: 2em">一旦安装了 JDK,就需要确保 DB2 知道 JDK 的位置,方法是在该实例的数据库管理程序配置文件中设置 JDK 的路径。要设置 JDK 的路径,执行下列步骤: </p><p style="TEXT-INDENT: 2em">1. 以具有 SYSADM 权限的用户登录系统。 </p><p style="TEXT-INDENT: 2em">2. 通过输入以下命令来更新数据库管理程序配置文件: </p><p style="TEXT-INDENT: 2em">db2 update dbm cfg using jdk11_path /usr/jdk_base </p><p style="TEXT-INDENT: 2em">其中 /usr/jdk_base 表示 JDK 安装路径。 </p><p style="TEXT-INDENT: 2em">3. 一旦更新了实例的数据库管理程序配置文件,您就必须停止并重新启动该实例,以使更改生效。要停止并启动当前实例的数据库管理程序,输入下列命令: </p><p style="TEXT-INDENT: 2em">db2stop </p><p style="TEXT-INDENT: 2em">db2start </p><p style="TEXT-INDENT: 2em">9、在DB2 UDB中如何创建用户定义临时表? </p><p style="TEXT-INDENT: 2em">解答 可使用 DECLARE GLOBAL TEMPORARY TABLE 语句来定义临时表。此语句需在应用程序中使用。只有在应用程序与数据库断开连接之前,用户定义临时表才是持续的。 </p><p style="TEXT-INDENT: 2em">此表的说明并不出现在系统目录中,使其对于其他应用程序而言不是持续的,也不能与其他应用程序共享此表。 </p><p style="TEXT-INDENT: 2em">当使用此表的应用程序终止或与数据库断开连接时,此表中的数据被删除, 此表被隐式卸下。 </p><p style="TEXT-INDENT: 2em">下面是定义临时表的一个示例: </p><p style="TEXT-INDENT: 2em">DECLARE GLOBAL TEMPORARY TABLE gbl_temp </p><p style="TEXT-INDENT: 2em">      LIKE empltabl </p><p style="TEXT-INDENT: 2em">      ON COMMIT DELETE ROWS </p><p style="TEXT-INDENT: 2em">      NOT LOGGED </p><p style="TEXT-INDENT: 2em">      IN usr_tbsp </p><p style="TEXT-INDENT: 2em">此语句创建一个名为 gbl_temp 的用户临时表。定义此用户临时表 所使用的列的名称和说明与 empltabl 的列的名称和说明完全相同。隐式定义只包括列名、数据类型、可为空特性和列缺省值属性。未定义所有其他列属性,包括唯一约束、外部关键字约束、触发器和索引。执行 COMMIT 操作时, 若未对该表打开 WITH HOLD 游标,则该表中的所有数据都被删除。不记录 对用户临时表所作的更改。用户临时表被放在指定的用户临时表空间中。此表空间必须存在,否则此表的声明将失败。</p><p style="TEXT-INDENT: 2em">10、在使用IMPORT命令向数据库出入数据时,如何避免日志空间满错误? </p><p style="TEXT-INDENT: 2em">环境 平台: 所有平台 </p><p style="TEXT-INDENT: 2em">版本: DB2 V7,DB2 V6,DB2 V5 </p><p style="TEXT-INDENT: 2em">问题 在用IMPORT命令向数据库插入大量数据时,如何避免日志空间满错误 </p><p style="TEXT-INDENT: 2em">解答 在执行IMPORT命令时, 如果使用循环日志, 有时会出现日志满错误, </p><p style="TEXT-INDENT: 2em">这时可用COMMITCOUNT参数来解决. </p><p style="TEXT-INDENT: 2em">因为日志空间满往往是因为所有的日志均处于活动状态导致的. </p><p style="TEXT-INDENT: 2em">而COMMIT执行后, 会释放所占据的资源, 其中包括日志 . </p><p style="TEXT-INDENT: 2em">这样, 被当前事务使用的日志在COMMIT命令执行后, 即变成非活动状态了. </p><p style="TEXT-INDENT: 2em">1、在由备份恢复一个数据库时,遇到SQL2542错误,怎麽办? </p><p style="TEXT-INDENT: 2em">环境 版本:(试用)DB2 V5.0,DB2 V6.1,DB2 V7.1 </p><p style="TEXT-INDENT: 2em">操作系统:(试用)Windows NT,AIX </p><p style="TEXT-INDENT: 2em">问题 在由备份恢复一个数据库时,遇到SQL2542错误 </p><p style="TEXT-INDENT: 2em">解答 如果有几个数据库的备份,在做数据库恢复时,需要提供正确的路径和时间戳,如果是用DB2命令行来执行恢复操作,在Windows NT操作系统,可参照如下命令: </p><p style="TEXT-INDENT: 2em">RESTORE DATABASE SAMPLE FROM D:\backups TAKEN AT 19991117125141 </p><p style="TEXT-INDENT: 2em">此命令中要注意路径和时间戳。时间戳可以通过list history命令得到。可参照如下命令: </p><p style="TEXT-INDENT: 2em">LIST HISTORY BACKUP ALL FOR SAMPLE </p><p style="TEXT-INDENT: 2em">Op Obj Timestamp+sequence Type Dev Earliest log Current log Backup ID </p><p style="TEXT-INDENT: 2em">B D 19991117125141001 F D S0000000.LOG S0000000.LOG </p><p style="TEXT-INDENT: 2em">Contains 2 tablespace(s): </p><p style="TEXT-INDENT: 2em">00001 SYSCATSPACE </p><p style="TEXT-INDENT: 2em">00002 USERSPACE1 </p><p style="TEXT-INDENT: 2em">此命令的输出列出了备份的时间戳加上一个3位的数字序列: </p><p style="TEXT-INDENT: 2em">时间戳+3位的数字序列=19991117125141001 </p><p style="TEXT-INDENT: 2em">所以,可以在restore命令中使用时间戳:19991117125141。 </p><p style="TEXT-INDENT: 2em">如果你有多于一个备份,list history命令将显示所有备份纪录的信息。 </p><p style="TEXT-INDENT: 2em">更多的信息可以参考“IBM DB2 Universal Database 命令手册:第三章 CLP命令”。 </p><p style="TEXT-INDENT: 2em">2、怎么样检查数据库连接有关的错误? </p><p style="TEXT-INDENT: 2em">环境 产品: DB2 UDB </p><p style="TEXT-INDENT: 2em">平台: Windows 9x/NT/2000, Unix, Linux </p><p style="TEXT-INDENT: 2em">版本: 5.x/6.x/7.x </p><p style="TEXT-INDENT: 2em">问题 怎么样检查数据库连接有关的错误? </p><p style="TEXT-INDENT: 2em">解答 以TCP/IP连接为例, 若连接失败,您可以检查下列项目: </p><p style="TEXT-INDENT: 2em">A) 在服务器上: 1) db2comm 注册表值包括值 tcpip。 </p><p style="TEXT-INDENT: 2em">输入 db2set DB2COMM 命令, 以检查 db2comm 注册表值的设置。有关详情,请参考管理指南。 </p><p style="TEXT-INDENT: 2em">2) 正确地更新了 services 文件。 </p><p style="TEXT-INDENT: 2em">3) 在数据库管理程序配置文件中正确地更新了服务名 (svcename) 参数。 </p><p style="TEXT-INDENT: 2em">4) 安全服务已启动。输入 net start db2ntsecserver 命令(仅对于 Windows NT 服务器)。 </p><p style="TEXT-INDENT: 2em">5) 正确地创建并编目了数据库。 </p><p style="TEXT-INDENT: 2em">6) 数据库管理程序已停止并再次启动(在服务器上输入 db2stop 和 db2start 命令)。 </p><p style="TEXT-INDENT: 2em">* 如果在启动一个协议的连接管理程序时出现问题, 则会出现警告信息,并将错误信息记录在 db2diag.log 文件中。 </p><p style="TEXT-INDENT: 2em">B) 在客户机上: 1) 正确地更新了 services 和 hosts 文件(若使用过的话)。 </p><p style="TEXT-INDENT: 2em">2) 使用正确的主机名 (hostname) 或 IP 地址 (ip_address)编目了此节点。 </p><p style="TEXT-INDENT: 2em">3) 端口号必须匹配,或服务名必须映射为服务器上所用的端口号。 </p><p style="TEXT-INDENT: 2em">4) 在数据库目录中指定的节点名 (node_name) 指向节点目录中的正确项目。 </p><p style="TEXT-INDENT: 2em">5) 数据库已正确编目, 它使用在服务器上创建该数据库时编目的服务器的数据库别名(database_alias), 作为客户机上的数据库名 (database_name)。 </p><p style="TEXT-INDENT: 2em">验证这些项目后,若连接仍失败,则参考 DB2 Troubleshooting Guide </p><p style="TEXT-INDENT: 2em">3、怎么样获取表结构以及索引的信息? </p><p style="TEXT-INDENT: 2em">环境 产品: DB2 UDB </p><p style="TEXT-INDENT: 2em">平台: Windows 9x/NT/2000, Unix, Linux </p><p style="TEXT-INDENT: 2em">版本: 5.x/6.x/7.x </p><p style="TEXT-INDENT: 2em">问题 怎么样获取表结构以及索引的信息? </p><p style="TEXT-INDENT: 2em">解答 您可以使用"describe" 命令: </p><p style="TEXT-INDENT: 2em">(1) 显示关于SELECT语句的 SQLDA 信息; </p><p style="TEXT-INDENT: 2em">(2) 显示表或视图的列信息; </p><p style="TEXT-INDENT: 2em">(3) 显示表或视图的索引信息; </p><p style="TEXT-INDENT: 2em">* 命令语法: </p><p style="TEXT-INDENT: 2em">>;>;-DESCRIBE-------------------------->; </p><p style="TEXT-INDENT: 2em">>;--+-select-statement---------+->;< </p><p style="TEXT-INDENT: 2em">'--+-TABLE--table-name----------+---+----------+-' </p><p style="TEXT-INDENT: 2em">'-INDEXES FOR TABLE--table-name--' '-SHOW DETAIL--' </p><p style="TEXT-INDENT: 2em">例如: </p><p style="TEXT-INDENT: 2em">1) 下面的例子用于描述 SELECT 语句: </p><p style="TEXT-INDENT: 2em">db2 "describe select * from staff" </p><p style="TEXT-INDENT: 2em">SQLDA Information </p><p style="TEXT-INDENT: 2em">sqldaid : SQLDA sqldabc: 896 sqln: 20 sqld: 7 </p><p style="TEXT-INDENT: 2em">Column Information </p><p style="TEXT-INDENT: 2em">sqltype sqllen sqlname.data sqlname.length </p><p style="TEXT-INDENT: 2em">--------------- ------ -------------- --------------- </p><p style="TEXT-INDENT: 2em">500 SMALLINT 2 ID 2 </p><p style="TEXT-INDENT: 2em">449 VARCHAR 9 NAME 4 </p><p style="TEXT-INDENT: 2em">501 SMALLINT 2 DEPT 4 </p><p style="TEXT-INDENT: 2em">453 CHARACTER 5 JOB 3 </p><p style="TEXT-INDENT: 2em">501 SMALLINT 2 YEARS 5 </p><p style="TEXT-INDENT: 2em">485 DECIMAL 7, 2 SALARY 6 </p><p style="TEXT-INDENT: 2em">485 DECIMAL 7, 2 COMM 7 </p><p style="TEXT-INDENT: 2em">2) 下面的例子用于描述表结构: </p><p style="TEXT-INDENT: 2em">db2 describe table user1.department </p><p style="TEXT-INDENT: 2em">Table: USER1.DEPARTMENT </p><p style="TEXT-INDENT: 2em">Column </p><p style="TEXT-INDENT: 2em">name Type </p><p style="TEXT-INDENT: 2em">schema Type </p><p style="TEXT-INDENT: 2em">name Length Scale Nulls </p><p style="TEXT-INDENT: 2em">--------- ------- ----------- -------- ------ ------ </p><p style="TEXT-INDENT: 2em">AREA SYSIBM SMALLINT 2 0 No </p><p style="TEXT-INDENT: 2em">DEPT SYSIBM CHARACTER 3 0 No </p><p style="TEXT-INDENT: 2em">DEPTNAME SYSIBM CHARACTER 20 0 YES </p><p style="TEXT-INDENT: 2em">3) 下面的例子用于描述索引结构: </p><p style="TEXT-INDENT: 2em">db2 describe indexes for table user1.department </p><p style="TEXT-INDENT: 2em">Table: USER1.DEPARTMENT </p><p style="TEXT-INDENT: 2em">Index </p><p style="TEXT-INDENT: 2em">schema Index </p><p style="TEXT-INDENT: 2em">name Unique </p><p style="TEXT-INDENT: 2em">rule Number of </p><p style="TEXT-INDENT: 2em">columns </p><p style="TEXT-INDENT: 2em">------------ ---------- ------------ ---------------- </p><p style="TEXT-INDENT: 2em">USER1 IDX1 U 2 </p><p style="TEXT-INDENT: 2em">4、以空文件为数据文件导入(IMPORT)并替换(REPLACE)目标表和删除(DELETE)表操作的对比(一种可以绕开删除整个表操作时遇到交易日志已满的办法) </p><p style="TEXT-INDENT: 2em">文章编号:1347131000035 </p><p style="TEXT-INDENT: 2em">日 期:2001-12-24 </p><p style="TEXT-INDENT: 2em">打印格式 </p><p style="TEXT-INDENT: 2em">以空文件为数据文件导入(IMPORT)并替换(REPLACE)目标表和删除(DELETE) </p><p style="TEXT-INDENT: 2em">表操作的对比(一种可以绕开删除整个表操作时遇到交易日志已满的办法) </p><p style="TEXT-INDENT: 2em">环境 [产品] DB2 UDB </p><p style="TEXT-INDENT: 2em">[平台] 跨平台 </p><p style="TEXT-INDENT: 2em">[版本] 5.x/6.1/7.x </p><p style="TEXT-INDENT: 2em">问题 以空文件为数据文件导入(IMPORT)并替换(REPLACE)目标表和删除(DELETE)表操作的对比 </p><p style="TEXT-INDENT: 2em">解答 当用DELETE TABLE命令删除整个表中数据时,该操作会逐条删除表中记录,并记入活动的交易日志。当表中数据量很大时,如果活动的交易日志不够大,就会遇到交易日志已满的错误,并回滚日志。即使活动的交易日志足够大,删除数据量很大的表的操作也会占用很多时间。用以空文件为数据文件导入(IMPORT)并替换(REPLACE)表的办法可以解决这个问题。例如 </p><p style="TEXT-INDENT: 2em">IMPORT FROM /dev/null OF DEL REPLACE INTO 目标表名 </p><p style="TEXT-INDENT: 2em">这样交易日志只会记录下该条命令,并立即释放所占的空间,而不会像删除命令一样逐条扫描记录,这就类似于DROP掉该表再创建一个完全相同只是没有数据的表一样。对于属于DMS表空间的表来说,删除命令逐条扫描记录,所占的记录空间仍标记为该表所用,而不立即释放空间,需要用REORG命令才可以释放剩余空间。用 LIST TABLESPACE SHOW DETAIL 可以对比两条命令执行后表空间中的剩余空间的大小。 </p><p style="TEXT-INDENT: 2em">用LOAD命令加REPLACE参数可以达到类似IMPORT命令加REPLACE的效果,但是由于LOAD本身不记日志,所以对于可恢复的数据库,LOAD完成后建议马上做一下联机备份的,相比之下,IMPORT命令加REPLACE操作上比较简单一些。 </p><p style="TEXT-INDENT: 2em">from jourmen </p><p style="TEXT-INDENT: 2em">问题描述: </p><p style="TEXT-INDENT: 2em">db2的界面都显示不了中文,所有该显示中文的地方都是显示方框 </p><p style="TEXT-INDENT: 2em">操作系统: </p><p style="TEXT-INDENT: 2em">win2k(别的我没有试,不知道是不是这样) </p><p style="TEXT-INDENT: 2em">db2版本: </p><p style="TEXT-INDENT: 2em">db2 8.1 for win </p><p style="TEXT-INDENT: 2em">解决方法: </p><p style="TEXT-INDENT: 2em">控制面板-->;区域选项-->;常规选项卡-->;你的区域设置设成中文(中国) </p><p style="TEXT-INDENT: 2em">ok,问题解决 </p><p style="TEXT-INDENT: 2em">问题原因:一般是你把区域设置成非中文(中国),比如我设成了英语(美国),来显示时间(9:05AM)这样格式的 </p><p style="TEXT-INDENT: 2em">P.S.:win别的平台和db2的别的版本没有试,也许一样:) <br /></p>

页: [1]
© 1999-2008 EvilOctal Security Team