Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103784181
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-03-19 21:08:58

 INFORMIX-Online以SQL表的形式向用户提供监控信息。这些被称作系统监控接口(SMI)的表,可以在非并行状态下方便地提供INFORMIX动态服务器的信息。有一个存储过程可借助这些信息,向当前Online例程连接的用户提供广播信息。 

概述 

本文包括以下内容: 

SMI表 
Syssessions SMI表 
本文示例中存储过程所涉及到的具体问题 
一个向全体用户发布“广播信息”的存储过程 
运行例子中的存储过程 


SMI表 

当INFORMIX动态服务器最初初始化时,在消息日志中出现了提示信息:“sysmaster"数据库被创建。这个数据库包括所有SMI表,每个Online例程都有自己的sysmaster数据库。在sysmaster数据库中的表,是基于磁盘的SQL表表或视图在共享内存中的组合,被称为伪表。 

对于查询语言来说,SMI表和普通SQL表是一样的,因此SQL语句可以充分发挥其优势,检索当前Online例程的信息。INFORMIX动态服务器依赖于这些SMI表中的信息,认识到这一点很重要。因此,对这些表的信息进行各更新或修正会产生不可预知的后果。用户应该把SMI表中的信息看做是只读信息。SMI表的信息还可以用来监控磁盘的使用、表的状态,chunk的状态、系统的效率、备份(ON_Archive)的状态以及其它信息。 

Syssessions表 

本文的例子要向当前所有用户发出”广播信息",所以SMI表中”Syssessions”有其重要。该表包含了当前与Online例程相连接的所有用户信息。当用户连接到数据库引擎时,就在该表中加入一条新的记录。当用户与Online例程分离时,这个用户在syssessions表中的记录就被取消。在该表的各个字段中,下面几个字段对于本文的存储过程来说非常重要: 

Sid 

  Session ID:在与其它SMI表连接时非常有用 

Usename 

  Puser ID:用户的UNIX登录名 

Hostname 

  Hostname of Client:用户客户端的主机名 tty 

  User's of stderrFile:客户端的全路径 

syssession表中还可读到许多字段,包括每个用户session的当前状态。但对本文的存储过程而言,不涉及到这些字段。这些字段在《INFORMIX动态服务器管理员指南》中有详细介绍。 

本文示例中存储过程所涉及到的具体问题 

首先,有必要对存储过程中关于算法和具体语法的一些具体问题做必要的解释。最初,存储过程对终端设备执行一个回应,对远端用户进行写操作。因为在UNIX平台上没有标准的远程“写”命令。所以这种方法只不过是权宜之计。要注意在syssession表中,tty字段只有16个字符的长度。在同一个系统中,这个长度不足以指定一个终端设备或机器名。同时,请注意存储过程中出现的“”语法。这是在“存储过程语言”(SPL)中包含双引号的用法。 

一个向全体用户发布“广播信息”的存储过程 

create procedure public_address(mesg_str char(80)) 

define user_name char(10); 

define mach_name char(16); 

define tty_name char(20); 

define cmd_line char(160); 


foreach c_user_list_1 for 

select unique username,hostsname,tty 

  into user_name,mach_name,tty_name 

  from sysmaster:syssessions 

  where username is not null and username!="" and 

    hostname is not null and hostname != "" and 

  tty is not null and tty!="" 


let cmd_line="rsh " ||mach_name||" ""echo'"||meg_str||"'

"||tty_name||""""

   system cmd_line; 

   end foreach 

end procedure -- public address; 


运行上例中的存储过程 

因为上面例子中的存储过程在运行中用到了sysmaster数据库中的信息,执行起来就相当简明。为了准备并运行下列存储过程,要做以下工作: 

1.启动dbaccess,连接到一个常规数据库上(不要选择sysmaster) 

2.在“Query Language"菜单下运行上述语句 

3.Online例程会在屏幕上向用户发”消息“ 

4.EXECUTE PROCEUDRE public_address("Hi Vern"

确认”Hi Vern"被发送给所有用户-不论是本地用户,还是远程用户。 

结论 

本文展示了关于SMI的一个表的简单应用,利用SMI表所能提供的信息,以及强有力的SQL工具,以及各种前后端工具,我们能作得更多的工作。SMI表可以提供许多极有帮助的信息,这完全取决于你的具体需求。
阅读(655) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~