1. 内容提要
本文解答 DB2 客户关于数据服务器最常见的问题。
问题(和答案)涉及以下产品:
IBM DB2 Universal Database (DB2 UDB) Version 8
DB2 UDB Version 8.2
IBM DB2 Version 9 for Linux, UNIX, and Windows (DB2 9)
IBM DB2 Version 9.5 for Linux, UNIX, and Windows (DB2 9.5).
本文安排如下:
本文第一节回答了在安装以及升级 DB2 数据服务器过程中可能遇到的问题。
本文第二节回答了在运行备份或者装载时可能遇到的问题。
第三节回答了一些操作方面的问题
这篇文章读者范围是所有客户。
2. 安装和升级
2.1 我是否能在一个服务器上安装不同版本的数据库?
当然,你可以。
在一个 Windows 平台上,如果你正在使用 DB2 UDB 版本 8,必须首先安装
较早版本,再安装新的版本。新的版本必须安装在一个不同的目录。
例如,你不能把 DB2 UDB 版本 8 安装在 DB2 版本 9 或 DB2 版本 9.5 之后。你需要首先安装 DB2 UDB 版本 8,然后再安装 DB2 版本 9 或 DB2 版本 9.5 在不同的目录中。
关于 DB2 版本 9 和 DB2 版本 9.5,你可以安装在不同的目录中。例如,你可以在某个目录中先安装 DB2 版本 9.5,然后再把 DB2 版本 9 安装在其他的目录中。
2.2 如果我已经有一个 DB2 版本 8.2 的实例,可以在 DB2 9.5 上使用相同的实例吗?
不能,你不能跨 DB2 版本共享实例。你可以把 DB2 UDB 版本 8.2 升级到以后的版本,但你不能没有升级就在不同版本间共享实例。
2.3 我在哪里能够获取 DB2 在 Linux,UNIX 和 Windows 上的修订包?
这里是该网站的链接,你可以在这里启动搜索。
http://www.ibm.com/support/docview.wss?rs=71&uid=swg27007053
在这个网站中,你可以访问并下载关于 DB2 UDB 版本 8,DB2 UDB 版本 9,以及 DB2 UDB 版本 9.5 的修订包和客户代码。
2.4 我最近在系统上应用了 DB2 补丁包,在那之后无法启动实例,这是什么问题?
在安装了补丁后,你需要更新实例。
请尝试运行下面的命令:
db2iupdt instance_name
你可以在 readme.txt 中找到所有安装前和安装后的要求。这个文件是修订包附带的,如果补丁包没有包括一个 readme.txt 文件,你可以通过进入你刚安装的修订包下载时列在前面的问题链接下载这个文件。
不过从 DB2 9.5 开始,不再需要这个步骤了。
2.5 我在哪里能找到 APAR 的列表?
你可以从这里找到所有 DB2 UDB 版本 8 的 APAR:
ftp://ftp.software.ibm.com/ps/products/DB2/fixes/english- us/aparlist/DB2_v82/APARLIST.TXT
或这里:
http://www.ibm.com/support/docview.wss?rs=71&uid=swg21255352
2.6 最近,我在 AIX 平台上安装了 DB2 数据服务器。有什么已知的问题需要注意吗?同时,我们计划升级 AIX,DB2 数据服务器是否支持新的 AIX 版本?
你可以从下面的链接找到 DB2 数据服务器在 AIX 平台上的信息
http://www.ibm.com/support/docview.wss?rs=71&uid=swg21165448
2.7 我在 Windows 平台上卸载了 DB2 UDB 版本 8.2, 然后安装了 DB2 9,然后尝试恢复一个备份,得到了 SQL1005N 错误,为什么?
你可以直接从 DB2 UDB 版本 8 升级到 DB2 9,然后尝试用 restore 来恢复先前的数据库。而不必先卸载 DB2 UDB 版本 8.2,再安装 DB2 9 。
如果你在 Windows 平台上遇到相同的场景,可以在 DB2 UDB 版本 8 之上安装 DB2 9,并在 GUI 安装启动板上选择“迁移”选项。
然而,如果你已经卸载了 DB2 UDB 版本 8,并安装了 DB2 9,那么请尝试运行下面的命令:
db2 list db directory
如果返回为空,就请运行下面的命令:
db2 list db directory on drivename/pathname
这个命令会在当前系统中列出你卸载 DB2 UDB 版本 8 之前的所有数据库。
再次编目数据库,然后运行 MIGRATE DATABASE 命令,这将令你能够连接到数据库并访问数据。更多关于 MIGRATE DATABASE 的信息请参考:
卸载或删除实例的操作,不会删除数据库以及它的目录。
编目数据库的信息,参见:
2.8 我从一个 DB2 较早的补丁包升级到了最新的补丁包,如何回退至原来较早的补丁包?
对于 DB2 UDB 版本 8:
在 Solaris 平台上,可以使用 /var/sadm/patch/backoutallpatch* 工具回退一个修订包。
在 HP 平台上,可以将 PDB2* 文件集中属于最新修订包的那部分卸载掉。
在 Linux 平台上,可以在新的修订包之上应用老的修订包。
在 Windows 平台上,没有任何途径能够回退修订包。
在 AIX 平台上,如果你应用新的修订包而不提交它(使用 SMIT 工具或者 installp),就可以回退至较老的修订包。
对于所有 Linux 和 UNIX 平台上的 DB2 9 及以后版本,要在新的修订包之上安装老的修订包,使用 installFixPack 工具时,一定要指出你打算回退至较老的修订包版本;在 Windows 平台,你不能回退到一个较老的修订包。
2.9 如何检查我用的是 DB2 的什么产品?以及如何找出正在运行的 DB2 的版本?
关于 Windows 平台上的 DB2 UDB 版本 8,检查 Windows 注册表:
运行 Windows 命令行,输入 regedit 并回车。这个命令将打开 Windows 注册表。
从注册表展开HKEY_LOCAL_MACHINE --> Software --> IBM --> DB2.
在显示的信息中你可以看到你已经安装了的 DB2 产品(例如,DB2 企业服务器版,DB2 管理客户机,等等。)
在 Windows 平台上要判断 DB2 的版本,需要从 DB2 的命令窗口运行 db2level ;在 UNIX 或者 Linux 平台上,则需要在提示符下运行 db2level 。 db2level 的输出结果列出了你正在运行的 DB2 的补丁,DB2 的位标准,是否有任何特殊补丁正在使用,以及 DB2 技术支持可能需要的其他信息。
Windows 上的例子:
C:>db2level DB21085I Instance "DB2" uses "32" bits and DB2 code release "SQL09013" with level identifier "01040107". Informational tokens are "DB2 v9.1.300.257", "s070719", "WR21392", and Fix Pack "3". Product is installed at "C:PROGRA~1IBMSQLLIB" with DB2 Copy Name "DB2COPY1".
UNIX 上的例子:
$ db2level DB21085I Instance "v8inst1" uses "64" bits and DB2 code release "SQL09050" with level identifier "03010107". Informational tokens are "DB2 v9.5.0.0", "s071001", "AIX6495", and Fix Pack "0". Product is installed at "/view/DB2_v10_aix64_s071001/vbs/INST".
在 DB2 9 及以后的版本中,使用 db2ls 命令就会得到这个信息。更多关于此命令的信息请参见:
db2ls 会输出如下内容:
[root@hansolo wsdb]# db2ls -q -b /opt/mydb2 -a Install Path: /opt/mydb2 Feature Response File ID Level Fix Pack Feature Description -------------------------------------------------------------- DB2_PRODUCT_MESSAGES_EN 9.1.0.0 0 Product Messages - English BASE_CLIENT 9.1.0.0 0 Base client support JDK 9.1.0.0 0 IBM Software Development Kit (SDK) for Java(TM) DB2_JAVA_HELP_EN 9.1.0.0 0 Java Help (HTML) - English REPL_QSERVER 9.1.0.0 0 Replication with MQ Server BASE_DB2_SERVER 9.1.0.0 0 Run-time Environment JAVA_SUPPORT 9.1.0.0 0 Java support SQL_PROCEDURES 9.1.0.0 0 SQL procedures ICU_SUP 9.1.0.0 0 ICU Utilities REPL_SERVER 9.1.0.0 0 SQL Replication Support JAVA_COMMON_FILES 9.1.0.0 0 Java Common files BASE_DB2_ENGINE 9.1.0.0 0 Base server support DB2_CONTROL_CENTER_HELP_EN 9.1.0.0 0 Control Center Help (HTML) - English CONNECT_SUPPORT 9.1.0.0 0 Connect support CONFIGURATION_ASSISTANT 9.1.0.0 0 Configuration Assistant SPATIAL_EXTENDER_CLIENT_SUPPORT 9.1.0.0 0 Spatial Extender client APPLICATION_DEVELOPMENT_TOOLS 9.1.0.0 0 Base application development tools ADMINISTRATION_SERVER 9.1.0.0 0 Administration Server COMMUNICATION_SUPPORT_TCPIP 9.1.0.0 0 Communication support - TCP/IP CONTROL_CENTER 9.1.0.0 0 Control Center DATABASE_PARTITIONING_SUPPORT 9.1.0.0 0 Parallel Extension REPL_CLIENT 9.1.0.0 0 Replication tools RELATIONAL_WRAPPERS_COMMON 9.1.0.0 0 Relational wrappers common DB2_DATA_SOURCE_SUPPORT 9.1.0.0 0 DB2 data source support LDAP_EXPLOITATION 9.1.0.0 0 DB2 LDAP support INSTANCE_SETUP_SUPPORT 9.1.0.0 0 DB2 Instance Setup wizard XML_EXTENDER 9.1.0.0 0 XML Extender FIRST_STEPS 9.1.0.0 0 First Steps DB2_WEB_TOOLS 9.1.0.0 0 DB2 Web Tools ESE_PRODUCT_SIGNATURE 9.1.0.0 0 Product Signature for DB2 Enterprise Server Edition XML_EXTENDER_SAMPLES 9.1.0.0 0 XML Extender samples DB2_SAMPLE_APPLICATIONS 9.1.0.0 0 ADT sample programs DB2_SAMPLE_DATABASE 9.1.0.0 0 Sample database source SPATIAL_EXTENDER_SAMPLES 9.1.0.0 0 Spatial Extender samples INFORMIX_DATA_SOURCE_SUPPORT 9.1.0.0 0 Informix data source support
2.10 DB2 的补丁支持有多长时间?能获取一个对较老补丁包的特殊补丁吗?
你可以从下面的链接中找到 DB2 修订包策略:
你也能从下面的链接中找到信息管理产品的生命周期:
http://www.ibm.com/software/data/support/lifecycle/
2.11 我的 DB2 9 的许可证在安装后 90 天过期了,能从什么地方获取许可证密码?
如果你购买了 DB2 的产品介质,许可证就将作为安装介质的一部分,位于 db2/license 目录中。作为实例的拥有者,你可以通过许可证中心 GUI 或者以下的 DB2 命令来添加这个许可证:
db2licm -a license_certificate_file_name
与 DB2 9 的产品 CD 一同发运的许可证文件叫做基础许可证。基础许可证并没有实际授予任何使用权限。如果发运了基础许可证,那么 DB2 就可以启动(虽然它的启动伴随警告信息)。 DB2 9 和 DB2 9.5 随带的激活 CD 包含了真正的授权证书。所有类型的证书策略都有一个与之相对应的授权证书(CPU,经授权用户,开放,等等), 你必须安装这些授权证书。在许可证中心或者 db2licm -l 的输出中,一个未授权的安装将有一个“无基础授权”的授权类型。
如果你从 Passport Advantage 网站下载了产品,那么产品安装将有 90 天的有效期,并且在 db2licm – l 命令输出中,将会显示 Try&Buy 许可证。你可以从 Passport Advantage 网站下载一个永久许可证,也可以从下面的链接中找到相关许可证的部分代码。
http://www.ibm.com/support/docview.wss?rs=71&uid=swg21267176
上面的链接是 DB2 9 的许可证文件的部分代码。 DB2 9.5 的许可证代码的搜索条件应该类似于:CPU Option – Activation 或者 Authorized User Option 。
如果你是从 PartnerWorld 网站下载的产品,请联系 PartnerWorld 索取许可证代码。
如果是从 DB2 支持网站或者补丁中心(http://www.ibm.com/support/fixcentral)下载的产品,并且没有此产品的许可证代码介质,请联系你的 IBM 销售代表。
2.12 DB2 UDB 版本 8 的服务有效期什么时候结束?
IBM 的软件支持的生命周期文件,详细说明了支持从 IBM 软件可以被买到的时间和支持过期的时间。
http://www.ibm.com/software/support/lifecycle/
2.13 AIX 的 ulimit 设置对于 DB2 而言,是否有任何一般性的建议?
下面的 tech note 讨论了用户私有内存 data limit 和对运行 DB2 的 AIX 提供的建议值:
2.14 为什么我试图使用通用 JCC 驱动从应用程序连接到 DB2 on z/OS 的时候,会收到没有许可证的异常信息?
如果要使用 4 类 JCC 驱动连接 z/OS 上的 DB2,你需要有一个 DB2jcc_license_cisuz.jar 许可证。你要确保有一个有效许可证文件的 DB2 Connect 产品,并把 DB2jcc_license_cisuz.jar 许可证添加到你的 classpath 中。该文件通常位于 /SQLLIB/java/DB2jcc_license_cisuz.jar
2.15 DB2 产品是否支持微软的 Windows Vista ?
现推出的 DB2 9 补丁 2 已经支持 Windows Vista 了。更多信息请参见:
3. 备份和恢复
3.1 一个联机备份操作有时候会由于 SQL0911N 原因码 68 结束,如何避免这种情况?
你在运行联机备份的同时,检查是否有其他实用程序如 load,runstats,或者 reorg 在运行。联机备份程序无法和某些其他实用程序同时运行。更多关于联机备份兼容的实用程序信息请参见:
3.2 我是否能备份一个 SMS 表空间,并恢复到一个 DMS 表空间?或者反之亦然?
不能。你不能将一个系统管理表空间镜像恢复到一个数据库管理表空间,也不能将一个数据库管理表空间的镜像恢复到系统管理表空间。
3.3 我有一个在 UNIX 平台上的数据库备份,是否能在 windows 平台恢复?或反之亦然?
不能。 UNIX 和 Windows 平台之间的跨平台备份和恢复是不受支持的(也不可能)。
之所以不能进行 UNIX 和 Windows 之间的跨平台恢复,是因为 big-endian 和 little-endian 字节顺序的复杂度。
Linux 和 Window 跨平台恢复也不能进行。虽然它们都是 little-endian,但在多个配置文件中的路径平台却是不同的。
然而,由于有相同的 endianess 可以跨 UNIX 平台恢复备份镜像。
3.4 我能把一个数据库实例(数据库目录和文件)从一台计算机复制到另一台,作为备份策略吗?
我们推荐你通过 DB2 备份和恢复实用程序,来备份和恢复你的数据库。你不应该把数据库文件集从一台机器移动到另外一台机器,这将损坏数据库。
3.5 是否能够将一个 32 位实例下数据库的备份镜像恢复到一个 64 位实例的系统中?或反之亦然?
你可以将一个 32 位数据库的备份镜像恢复到一个 64 位的系统中,但反之不行。
Source of backup p_w_picpath | Target for restore | Supported |
---|---|---|
32-bit system | 64-bit system | Yes |
64-bit system | 32-bit system | No |
3.6 有一个数据库 A 的备份镜像,我想把它恢复到不同的目录中,能这么做吗?
可以,你可以对这个数据库运行重定向恢复。下面的参考文档提供了一些额外的信息。
关于重定向恢复的一般信息,请参见:
关于重定向信息的脚本(适用 UNIX 环境),请参见文章:
关于如何运用重定向恢复克隆 DB2 数据库,请参见文章:
3.7 我想装载数据到一个表,并且这个表能在装载结束后被访问,怎样才能做到呢?
请参见下面的关于如何对表进行数据装载的信息主题:
http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/topic/com.ibm.db2.luw.admin.cmd.doc/doc/r0008305.html
如果你不希望在装载结束后备份表空间,请在装载的时候指定 NONRECOVERABLE 或 COPY YES TO device/directory选项。
在装载结束后,表可能会处于 CHECK PENDING 状态(意味着表必须检查一致性),可以运行下面的命令:db2 set integrity for tablesname immediate checked
3.8 我能在备份中包含日志吗? 如果有一个包含日志的数据库联机备份镜像,是否能只恢复并应用镜像中包含的日志?
你可以在运行备份命令的时候,指定 INCLUDE LOGS 选项。当你指定了这个选项,备份实用程序将截断当前活动日志,并且复制需要的日志扩展数据块(extent)到备份镜像中。更多信息请参见:
你需要创建一个空目录,并在恢复过程中将日志提取到这个目录。然后运行前滚命令并将当前目录指定为日志溢出目录。下面是一个例子:
bkogan@panipuri /home/bkogan > DB2 backup db test1 online include logs Backup successful. The timestamp for this backup p_w_picpath is : 20080318084101 bkogan@panipuri /home/bkogan > mkdir rest_logs bkogan@panipuri /home/bkogan > DB2 restore db test1 logtarget /home/bkogan/rest_logs SQL2539W Warning! Restoring to an existing database that is the same as the backup p_w_picpath database. The database files will be deleted. Do you want to continue ? (y/n) y DB20000I The RESTORE DATABASE command completed successfully. bkogan@panipuri /home/bkogan > DB2 "rollforward db test1 to end of logs and stop overflow log path (/home/bkogan/rest_logs) noretreive" Rollforward Status Input database alias = test1 Number of nodes have returned status = 1 Node number = 0 Rollforward status = not pending Next log file to be read = Log files processed = S0000018.LOG - S0000018.LOG Last committed transaction = 2008-03-18-12.41.14.000000 DB20000I The ROLLFORWARD command completed successfully.
4. 各种各样的使用问题
4.1 是否能够更改现有数据库的代码页?
代码页的值,是在数据库安装时,从操作系统中自动衍生的,你不能在数据库创建后更改它的代码页。如果你需要更改代码页,你只能删除数据库,并以需要的代码页创建数据库。
DB2CODEPAGE 注册表变量仅指定了 DB2 数据服务器对客户端应用程序呈现的代码页。你不应该使用这个变量,除非明确地记录在 DB2 文档中,或者被 DB2 服务要求这么做。设置一个不被操作系统支持的 DB2CODEPAGE,将会带来不可预料的后果。
4.2 数据库管理员如何计算该系统的 CPU 速度(CPUSPEED 数据库管理员管配置参数)?
当一个实例被创建的时候,DB2 数据服务器会多次运行一个小的标定测量实验,以评估 CPU 的速度。那些测试的平均时间,被用于计算 CPU 的速度。
那些测试具有一定的科学性。测试在一个操作系统调度程序提供的时间范围内运行,以确保在不论系统有多忙的情况下,CPU 测量都有效。
你能改变 CPUSPEED 值,或者通过设定 CPUSPEED 为 -1 来让数据库管理器自己设置这个值
4.3 如果我删除一个实例,是否会丢失此数据库以及它里面存放的数据?
删除一个实例不会删除数据库,你也不会失去数据。你可以先删除一个实例,再创建它,然后编目数据库并使它们可用。在这种情况下,你可以用 db2cfexp 以及 db2cfimp 命令来导出和导入实例配置文件。
4.4 我有一个表在表空间 A 中,它的索引在表空间 B 中。是否可以删除其中一个表空间,然后重建它?
不能。在没有删除所有与之关联的表空间之前,你不能删除一个表空间。在这种情况下,你必须使用一句删除语句,将表空间和索引表空间同时删除。
4.5 将一个数据库分区添加到一个数据库分区组后,是否能仅重新分布在这个分区组中的一个表?
使用 REDISTRIBUTE DATABASE PARTITION GROUP 命令可以在所有数据库分区上重新分布数据。重新分布操作是针对所有在这个分区组的表,并不能限定于一个表。
4.6 你推荐哪种类型的条带?是 DB2 条带还是磁盘条带?
我们推荐 DB2 条带(数据以循环的方式,被写入到多个容器中)。
如果你想同时使用磁盘条带和 DB2 条带,表空间的扩展数据块和磁盘条带大小(例如 RAID 数组)必须匹配。
4.7 是否有一个命令,能够用来计算数据库的大小?
通过命令行连接到你的数据库,并且运行下面的命令:
> db2 "call get_dbsize_info(?,?,?,0)"
这个命令的输出结果类似于下面的信息:
Value of output parameters -------------------------- Parameter Name : SNAPSHOTTIMESTAMP Parameter Value : 2008-03-18-17.15.17.919242 Parameter Name : DATABASESIZE Parameter Value : 23130112 Parameter Name : DATABASECAPACITY Parameter Value : 16075184640 Return Status = 0
4.8 DB2 数据服务器是否提供了类似于 Oracle truncate 裁剪命令的功能?
是的,一个表上的删除操作和每次删除一行,将产生相当数量的日志。为了避免这种日志,你可以运行 "IMPORT FROM /dev/null.. REPLACE INTO" 语句,这将把整个表截去而不写日志。这个操作就类似于 Oracle truncate 裁剪功能。 DB2 信息中心有一个 truncate 脚本叫 truncate.db2,可以用来裁减表。
下面是 truncate.db2 的链接:
4.9 DB2.Net 数据支持什么版本的 .NET 框架?
对于 DB2 UDB 版本 8 DB2.Net 提供程序,你需要 1.0 或者 1.1 框架。
对于 DB2 UDB 版本 9 DB2.Net 提供程序,你需要 1.1 或者 2.0 框架。
4.10 为什么我在尝试通过客户端进行连接的时候,收到了 TCP/IP 通讯错误(SQL30081)?
你可以从下面的链接中,找到关于这个错误的更多信息,根据原因码得到可能的解决方案:
4.11 为什么在 DB2 9 里看不到开发中心?
在 DB2 9 中,开发中心被开发工作台替代。在 DB2 9.5 中,开发工作台得到了增强并重命名为 IBM 数据工作室(IBM Data Studio,现在是分开下载)。你能从下面的链接得到试用版:
IBM Data Studio Developer and pureQuery Runtime .
4.12 为什么装完 DB2 9 后,在 Visual Studio 中尝试添加一个新的数据连接时找不到 DB2 数据源?
那可能是由于你没有在 Visual Studio 2005 中安装 IBM 数据库 add-ins 。你可以从 DB2 产品介质的 VSAI 子目录中,使用 issetup.exe 或者 .msi(db2_v9_ese_win_32p_w_picpathVSAI)来安装 Visual Studio 2005 add-ins 。
4.13 我能用 DB2 的命令得到当前的时间和日期吗?
是的,从 DB2 命令行窗口运行下面的命令:
关于当前时间:
$ db2 values current time 1 -------- 14:52:46 1 record(s) selected.
关于当前日期:
$ db2 values current date 1 ---------- 04/10/2008 1 record(s) selected.
关于当前时间戳:
$ db2 values current timestamp 1 -------------------------- 2008-04-10-14.53.02.562000 1 record(s) selected.