电脑技术学习

深入探讨联邦数据库系统基本诊断信息的获取

dn001

本文阐述联邦系统的系统表及视图,并讲解了如何获取联邦系统中基本的有效信息并利用其来对遇到的故障进行诊断分析。

引言


联邦数据库系统是一种基于 DB2 实现的分布式数据管理系统,由于其屏蔽了各种数据源之间的差异,能够实时,快捷的对异构数据源的数据进行操作,得到了广泛的应用。同任何产品一样,普通用户在使用联邦系统的的过程中,必然会遇到一些问题,这些问题一部分是系统自身的设计缺陷造成的,但是还有很大部分是由于用户没有遵循产品使用的规则,没有注意到使用各项特性的先决条件造成的,本文正是针对此类问题,从联邦系统目录和视图的角度出发,描述了其相关的系统表信息,并介绍了如何获取并利用这些信息来对故障进行定位,从而更有效率的解决此类问题。本文面向对象需要了解联邦系统相关知识,并理解其内建对象(用户映射,函数映射,别名等)。

联邦系统系统目录信息介绍


系统目录表


如前所述,联邦系统基于 DB2 实现,它利用了 DB2 的系统表来存储远程数据源相关的系统信息,如 SYSIBM.TABLES, SYSIBM.INDEXES,SYSIBM.COLUMNS,SYSIBM.ROUTINES 等,同时对于那些联邦系统特有的对象和特性 , 设计了专门的系统表来存储相关信息,这些表包括:


◆SYSIBM.SYSWRAPPERS:每一行代表注册过的转换器 (wrapper)

◆SYSIBM.SYSSERVERS: 每一行代表了数据源的信息,如数据源版本号,类型等。

◆SYSIBM.SYSFUNCMAPPINGS: 包括函数映射的基本信息如函数映射名,基于服务器的名字等等,一般可以用来判断找不到相应函数这类的错误。

◆SYSIBM.SYSSERVEROPTIONS: 包括对服务器选项的设置信息,如 Collating_sequence,PROXY_AUTHID 等,这些选项的设置可以对查询性能产生影响。

◆SYSIBM.SYSTYPEMAPPINGS: 包括数据类型映射的基本信息,如联邦服务器这一侧的数据类型和远程数据源短的数据类型的对应关系,一般用于判断数据类型相关的错误。

◆SYSIBM.SYSUSEROPTIONS: 在这个表中包括了用户选项及其设置值,如连接远程数据源使用的用户名和密码信息 (REMOTE_AUTHID, REMOTE_PASSWORD) 等,一般可以用于判断连接错误或者访问权限错误 ( 配合 DB2 本身的 SYSDBAUTH 系统表 )

◆SYSIBM.SYSWRAPOPTIONS: 其中包含了关于创建的转换器的一些可选信息,例如在使用转换器的时候是否使用“ Trusted ”或者“ Fenced ”选项。

除此以外,联邦系统特定的系统表还包括 SYSIBM.SYSPASSTHRUAUTH,SYSIBM.SYSFUNCMAPPARMOPTIONS,SYSIBM.SYSFUNCMAPOPTIONS。在联邦系统中,各系统表中的信息在正确情况下应该是一致的,例如对于每条 SYSIBM.SYSSERVERS 中的记录,在 SYSIBM.SYSWRAPPERS 中总有一条记录与此服务基于的转换器对应。如果出现不一致的情况,那么表示系统的缺陷导致了系统表的混乱。


系统可读视图和可更新视图


除了系统表外,为了查询方便和权限管理起见,同 DB2 一样,联邦系统也存在着一些可读的系统视图如下:

清单1. 系统可读视图


SYSCAT.FUNCMAPPINGS

SYSCAT.FUNCMAPPARMOPTIONS

SYSCAT.FUNCMAPOPTIONS

SYSCAT.NICKNAMES

SYSCAT.PASSTHRUAUTH

SYSCAT.SERVEROPTIONS

SYSCAT.SERVERS

SYSCAT.TYPEMAPPINGS

SYSCAT.USEROPTIONS

SYSCAT.ROUTINESFEDERATED


这些可读视图为用户查询特定的信息提供了方便,如 SYSCAT.ROUTINESFEDERATED 就从 SYSIBM.SYSROUTINES 和 SYSCAT.ROUTINEOPTIONS 中提取出了联邦系统相关的例程信息,方便了用户的查询。


因为联邦系统的查询相关的统计信息等和所有的 DB2 查询统计信息一样,可以通过 DB2 可更新的视图来更新,因此联邦系统不具有单独的可被更新的系统视图。

获取解决问题信息的方法


1. db2look


如果用户在遇到故障的时候,忘记了自己做过什么操作或者由于操作过多,那么在用户操作引发错误的时候,往往知道引发这个问题的直接操作是什么,但是并不能获取可能引发错误的所有操作的信息用于诊断。DB2 本身提供了强大的工具 (db2support) 可以还原用户的环境,但是对于普通用户而非开发人员来讲,从这些信息里提取有用的信息非常困难,而 db2look 其简洁灵活的特点是其更加适用于普通用户的分析。对一般用户来讲,最常用的两个选项为 -d 和 -e 选项。


2. db2cat


db2cat 是得到联邦系统和远程数据源系统的信息的又一种工具,通过其打印出来的各种信息和我们直接从 catalog 表中取得的数据理论上应该是一致的,其 -p 选项后的 server 和 remote 选项值为联邦系统专有,别名 (nickname) 被做为本地表来进行存储和处理。注意 db2cat 并不能获得用户映射和函数映射这样的信息,对于这类信息我们只能通过直接查询系统表或系统试图来获得。我们可以利用 db2cat -h 选项来查看其更详细的用法。


3. 直接从系统表中查询相应信息

应用举例


1.直接查询系统目录表信息举例


以如何解决下面创建别名的时候遇到的权限问题为例来说明系统目录表的信息应用。

清单2. 为远程表创建别名


db2 => create nickname N2 for DATASTORE2.J15USER1.tab1

DB21034E The command was processed as an SQL statement

because it was not a valid Command Line Processor command.


During SQL processing it returned:

SQL0551N “ZURBIE” does not have the privilege to perform

operation “CREATE NICKNAME” on object “ZURBIE.N2”. SQLSTATE=42501

为了解决上述问题,我们可以首先查询用户选项表 (SYSCAT.USEROPTIONS) 来判断是否已经为当前用户 ZURBIE 建立了到远程数据源的用户映射 , 查询如下:

清单3.通过查询系统目录获得的用户映射信息


db2 => select authid from syscat.useroptions where

servername = 'DATASTORE2' and option = 'REMOTE_AUTHID' and setting = 'J15USER1'


AUTHID

----------------------

LISHD

1 record(s) selected.


从中我们可以看到并没有 Zurbie 相关的用户映射,从而确定以上结果是正常的输出。如果存在相应的用户映射,那么我们可以通过查询 SYSCAT.DBAUTH 来确定用户对联邦系统操作的权限。


2.使用 db2cat 进行故障诊断


下面给出了更改已经创建的服务器端相应选项时遇到的错误:

清单4. 设置服务器选项


db2 => alter server NET8_SERVER options(set wrong_opt 'WRONG')

DB21034E The command was processed as an SQL statement

because it was not a valid Command Line Processor command.


During SQL processing it returned:

SQL1881N “WRONG_OPT” is not a valid “SERVER” option for “NET8_SERVER”.

SQLSTATE=428EE

这类问题我们也可以通过直接查询 syscat.serveroptions 系统试图来判断此服务器选项是否真的存在,不过这里给出利用 db2cat 来查询服务器端相关信息的方法,我们可以利用如下命令:


db2cat –d test1 –s LISHD –p server –n NET8_SERVER –o output.pd


可以查看输出得到如下,从中可以发现并没有相应的选项,所以输出结果也是正常的。

清单5.通过db2cat查询到的服务器选项结果


$ vi output.pd

output.pd 41 lines,836 characters

DB2 Version 9.5,5622-044 (c) Copyright IBM Corp. 2007

Licensed Material - Program Property of IBM

IBM DATABASE 2 Catalog Analysis and Repair Tool

Please use single quote for delimited name

---------------------------------------------

SYSSERVERS.SERVER_DESC:

SYSSERVERS.SERVER_DESC HEADER

-----------------------------

SERVER IDENTIFICATION:

Wrapper Name :NET8

Server Name :NET8_SERVER

Server Type :ORACLE

Server Version :10.1

SERVER OPTIONS

-------------------------------

Name :NODE

Value :ora10g

Uid :SQL080403001500734

TimeStamp: {2008-04-03-00.15.00734363}

DATA TYPE MAPPINGS

---------------------------------

No Data Type Mappings

FUNCTION MAPPINGS

--------------------------------

No Function Mappings

3.真正的问题


一般来讲,如果在执行 DDL 语句是遇到的错误,那么一般可以根据查询系统表和 db2cat 打印相关对象信息的方法来定位是产品的缺陷,如果是使用错误一般也可以从中得到相应的解决方法。诸如查询效率低下或者查询时遇到的相关问题等问题不但需要用户熟悉系统表的组织,同时也需要用户清楚自己数据源的特性,比如需要检查服务器选项值的设置是否正确,如 collating_sequence,varchar_no_trailing_blanks 等,或者要检查统计信息是否正确 ( 例如,可以通过 syscat.coldist 获知列的分布情况,由此得知统计信息正确与否 )。一般说来当在用户文档中查询不到对遇到的错误的详细解释说明时 ( 如 SQL901N), 或者联邦系统停止在正在运行的操作上时此类错误是产品的缺陷,这是一种极少发生的情形。

总结


联邦系统的系统目录信息保存了联邦系统特有对象的描述信息,产品同时还提供了一些系统视图来简化对相关信息的查询。本文通过分析系统目录的信息,简要地描述了如何从系统目录中获得诊断相关的信息,并给出了相应的例子。