分类: DB2/Informix
2008-05-31 16:37:18
系统监视接口
系统监视接口(system-monitoring interface,SMI)表是由数据库服务器管理的特殊的表,其中包含关于数据库服务器状态的动态信息。可以对这些表使用 SELECT
语句,从而了解关于数据库服务器的几乎任何信息。
在首次运行数据库服务器时,它运行一个称为 buildsmi 的脚本(这个脚本在 $INFORMIXDIR/etc 目录中)。这个脚本构建支持 SMI 的 sysmaster 数据库和表。数据库服务器需要大约 1750 个空闲的逻辑日志空间页面来构建 sysmaster 数据库。
如果收到一个错误消息,指示您运行 buildsmi 脚本,那么可能是数据库服务器在构建 SMI 数据库、表和视图时发生了问题。执行 buildsmi 脚本时,会删除并重新创建现有的 sysmaster 数据库。
OnBar 在 sysutils 数据库中存储它执行的每个备份/恢复操作的相关信息。每个 dbspace 和逻辑日志的备份信息也存储在这里。在执行热恢复时,OnBar 会使用这些表。
在首次初始化数据库服务器时,它运行一个称为 bldutil.sh(在 UNIX® 上)或 bldutil.bat(在 Windows® 上)的脚本。这个脚本构建 sysutils 数据库。如果脚本运行失败,数据库服务器会在 tmp 目录中创建一个输出文件。输出文件是 bldutil.process_id(在 UNIX 上)或 bldutil.out(在 Windows 上)。这个输出文件中的消息说明在脚本执行期间发生了什么错误。
sysmaster 数据库是一个 “伪数据库”。这意味着它的大多数表不是磁盘上的普通表,而是指向 IDS 引擎中的共享内存结构的指针。sysmaster 数据库包含的表超过 120 个。Informix Dynamic Server Administrators Guide 中只描述了其中一部分表。其他表没有文档记录,这意味着它们是供内部使用的。
IDS 11 中引入了下面这些新的表。对于其他许多 sysmaster 表,可以在手册中找到更多的详细信息。
表 | 描述 |
---|---|
syscheckpoint | 关于检查点和相关统计数据的信息。 |
systcblst | 修改了现有的表,增加了等待统计数据。 |
sysenvses | 查看 Informix 的会话环境变量。 |
sysenv | 查看服务器环境变量。 |
sysonlinelog | 查看服务器的 online.log。 |
sysscblst | 经过改进,可以查看会话使用的内存。 |
sysnetworkio | 查看数据库会话产生的网络 I/O。 |
sysdual | Oracle 兼容性特性。 |
syssqlcacheprof | 显示每个 SQL 缓存的配置信息。 |
syssqltrace | 系统上最近执行的 SQL 语句。 |
syssqltrace_itr | SQL 语句的迭代器的列表。 |
syssqltrace_info | 关于 SQL 跟踪的一般信息。 |
sysnetglobal | 全局网络信息。 |
sysnetclienttype | 基于客户机类型的网络信息。 |
sysbaract_log | OnBar 活动日志文件。 |
sysrstcb | 经过改进,可以查看 I/O 和锁等待信息。 |
SMI 由数据库服务器自动维护的表和伪表组成。尽管 SMI 表在用户看起来像是表,但是它们并不像普通表那样存储在磁盘上。相反,数据库服务器在需要时根据共享内存中当前的信息在内存中构建这些表。在您查询 SMI 表时,数据库服务器从这些共享内存结构读取信息。因为数据库服务器不断更新共享内存中的数据,所以可以通过 SMI 提供的信息了解数据库服务器的当前状态。
SMI 表提供以下方面的相关信息:
随着用户访问和修改数据库服务器管理的数据库,SMI 表中的数据会动态地改变。
任何用户都可以使用 SQL SELECT
语句查询 SMI 表,但是标准用户不能执行 SELECT
之外的其他语句。尝试这么做会导致权限错误。管理员可以执行 SELECT
之外的其他语句,但是这些语句的结果是无法预测的。
Dynamic Server 提供 sysadtinfo 和 sysaudit 表。只有 UNIX 上的用户 informix 或者 Windows 上的 Informix-Admin 组成员可以查询 sysadtinfo 和 sysaudit 表。
不能在 sysmaster 数据库中的任何表上使用 dbschema
或 dbexport
。如果这样做,数据库服务器会生成下面的错误消息:
Database has pseudo tables - can't build schema
只要可以对普通表使用 SELECT
语句(DBAccess、SPL 例程、ESQL/C 等),都可以对 SMI 表使用 SELECT
语句,但是有一个限制:在查询 SMI 表时,不能引用 rowid。使用 rowid 的 SELECT
语句不会返回错误,但结果是无法预测的。
所有标准的 SQL 语法对 SMI 表都是有效的,包括表之间的连接、输出的排序等等。例如,如果希望连接一个 SMI 表和一个非 SMI 表,那么用以下标准语法命名 SMI 表:
sysmaster[@dbservername]:[owner.]tablename
目标:列出打开数据库的用户,以及他们用来连接数据库的工作站。
onstat -u
实用程序会报告哪些用户连接到了这个服务器,但是并不报告他们正在使用哪个数据库以及工作站。
Onstat -g ses
会报告用户和工作站,但是不报告数据库。
Onstat -g sql
会报告会话 ID 和数据库,但是不报告用户名和工作站。 QUERY SELECT sysdatabases.name database, syssessions.username, syssessions.hostname, syslocks.owner sid FROM syslocks, sysdatabases, outer syssessions WHERE syslocks.tabname = "sysdatabases" AND syslocks.rowidlk = sysdatabases.rowid AND syslocks.owner = syssessions.sid; OUTPUT database stores_demo username informix hostname istation1 sid 27 database sysmaster username informix hostname istation1 sid 29 |