Tivoli 资产管理体系结构


概述

DB_TRAN 事务

资产类别及模型

资产信息分组

主键及备用键

有向非循环图


概述

“Tivoli 资产管理”是作为生命周期管理的管理工具而设计的。在该文档中,该产品的体系结构是在数据库级别上访问的,应用程序编程接口(API)是为定制目的而提供的。


DB_TRAN 事务

无论是通过包含相关数据的单个表还是通过一组表访问数据,都要通过称为 'DB_TRAN'(数据库处理)的类属函数来管理。各个表都具有更新记录列表的函数调用,以及检索给定搜索子句的记录列表的读取函数。例如:

FUNCTION UpdateListOfContractTypes(VAL InTran: Boolean,REF BeforeList: LIST OF ContractTypes,
REF AfterList: LIST OF ContractTypes) : INTEGER; 

SQL 语句使用 InTran 函数以标识结果是否应当认为是事务的一部分。下面是一般的应用程序指导。

代码地区 InTran
从用户接口事件组中检索隐藏主键的计数值。 FALSE
检索隐藏主键(一般)的计数值。 TRUE
从用户接口事件组中添加记录(计数检索作为 InTran = TRUE 的子集) FALSE
更新记录列表(在 InTran 等于 TRUE 时单个插入、删除、更新) FALSE
UpdateListsofRecords 组(例如,“移植”) TRUE

BeforeListAfterList 代表记录列表。两个列表需要同步化,以使各个列表中的相同元素代表事务之前及之后的记录状态。

事务 状态之前 状态之后
插入 空(空白) 具有数据的记录
更新 具有旧数据的记录 具有新数据的记录
删除 具有数据的记录 空(空白)

用于信息检索的函数的实例是:

FUNCTION GetSomeContractList(REF kList: LIST OF ContractRec, 
VAL where: STRING): INTEGER; 

该记录列表包含匹配在 where 子句中指定的搜索准则的记录。在函数中嵌入了表名称,所以只有 where 子句需要作为参数传送。返回值指示查询的成功或失败。

“Tivoli 资产管理”的公用 APIs 是在 TSD 脚本程序 KB 文件集中定义的,此文件以'i_db'前缀标识。一个文件可能包含多个表的引用。典型情况是,该集合数据库处理文件包含访问和更新相关表中记录的方法。下列实例是从 i_db_hst.kb 文件中摘录的:

KNOWLEDGEBASE I_DB_HST; 
USES
	I_RECORD; -- 记录 defns
	I_NXTNUM; -- I_GetNextNumber
	I_STRING;
	I_DB_TRN; -- 错误定向函数
	SERVICES; 
CONSTANTS
TYPES
VARIABLES
	hstEventList: LIST OF EventRec; 
 ROUTINES
------------------------------------------------------------
-- PUBLIC - EVENTS
------------------------------------------------------------ 
FUNCTION UpdateListOfEventRec(VAL InTran: Boolean,	REF BeforeList: LIST OF EventRec,
	REF AfterList: LIST OF EventRec): INTEGER; 
FUNCTION GetEventID(VAL Event_name: STRING): INTEGER; 
FUNCTION GetEventName(VAL Event_id: STRING): STRING; 
FUNCTION GetEventList(REF ktypeList: LIST OF EventRec,
	REF EventNameList: LIST OF STRING): INTEGER;
------------------------------------------------------------
-- PUBLIC - HISTORY
------------------------------------------------------------ 
FUNCTION InsertHistRec(VAL InTran: Boolean,	REF InsertRec: HistRec): INTEGER; 
FUNCTION UpdateListOfHistRec(VAL InTran: Boolean,	REF BeforeList: LIST OF HistRec,
	REF AfterList: LIST OF HistRec): INTEGER; 
FUNCTION GetInvHist(REF histList: LIST OF HistViewRec,
	VAL is_inventory_id: INTEGER): INTEGER; 
FUNCTION GetSomeInvHist(VAL where: STRING, 
	REF lst: LIST OF HistViewRec): INTEGER; 
FUNCTION GetHist(REF lst: LIST OF HistRec,
	VAL iid: INTEGER): INTEGER;

资产分类及模型

可以为各个分类定义一个属性可变长度列表。在相关的数据库中实现该概念要求在单个表中属性不作为列使用,而是作为多相关记录描述各个属性。

处理属性的 APIs 在 i_db_atr.kb 文件中维护。

“Tivoli 资产管理”允许用户维护对与资产分类相关联的属性缺省值的引用。可以以某种设备类型为基础,使用想要跟踪的特定固定特征设计模型。这些特征称为属性。例如,在称为“监视器”的资产分类中,可以定义称为 NEC 3FGe 的模型,有一个属性叫做“大小”,缺省值为 14。因此任何分类为 NEC 3FGe 监视器的资产都有与之相关联的大小值 14。

同一分类中的全部模型具有同一属性,但是可以指定以模型为基础的不同缺省值。如果一个值可以描述为销售特征(非选项),那么应当将其作为缺省值对待。


资产信息分组

由于可以将资产与资产分类相关联,并且和类别中的任何模型相关联,所以 API 提供访问和更新全部相关表的机制。用来执行这些更新的 API 的集合广泛分布在“Tivoli 资产管理”的应用程序中。

使用 API 要求熟悉数据库结构及有关的数据库完整性(RI)。数据库结构要求按顺序次序执行特定记录更新以维护数据库完整性 RI。例如,要在新的资产分类中插入资产记录,用来创建记录的 API 必须按照下列顺序:

  1. 插入新的分类记录。
  2. 插入资产分类的属性记录。
  3. 插入资产记录。
  4. 更新物理对象表。
  5. 更新物理属性表。

i_asset.kb 文件中的单个函数执行全部相关表的更新顺序。

FUNCTION UpdateListOfInventoryItems(VAL InTran: Boolean,    REF updateList: LIST OF InvUpdateRec): INTEGER; 

UpdateList 是记录结构的列表,它包括更新进程中作为记录的嵌套子列表的全部数据。返回值指示成功或失败。


主键及备用键

在“Tivoli 资产管理”中,主键对用户是隐藏的。例如,当用户添加资产时,自动植入 is_inventory_id 字段(主键)。用户指定的资产标记实际上是备用单独键。
主健值是自动指定的通常是 COUNTERS 表中的整数。对于数据管理器或分级表,如 ORGANIZATION_TREE 表,主键是代表父表中相关记录的整数值的字符串。

LOCATION 表和 VENDOR 表不使用主键。
其它的以备用键为基础检索单个记录的函数是 API 的一部分。这些函数已定义,如下例:

PROCEDURE GetContractType( REF type_id: INTEGER,
    REF contract_type: STRING); 

在该过程中,返回的类型标识有第二个参数合同类型的备用键。


有向非循环图

“Tivoli 资产管理”数据管理器使用称为有向非循环图或简称 DAG 的数据结构。DAG 为有箭头的部分树和部分图,其箭头总是指定向一个方向。没有循环或回路。有关 DAG 的详细信息,请参见下列内容:

Algorithms in C, Robert Sedgewick, Addison-Wesley 1990, ISBN 0-2-1-51425-7, p. 479 (Topological Sorting)
Fundamental Algorithms, Donald Knuth, Addison-Wesley 1973, p. 371 (Directed Graphs)

有向非循环图表

下列表是使用 DAG 方法构造的:

“Tivoli 资产管理”在 i_br_gl.kb 文件中包含一个称为 CheckCircularity 的函数,该函数检测并阻止 DAG 表中的循环。

有向非循环图程序文件

“Tivoli 资产管理”使用下列 KB 文件以实现 DAG 数据结构:

i_browsr.kb: 通过用户接口和有基础表的事务处理剪切和粘贴。
i_br_gl.kb: 显示树的展开版本。

多个父级

“Tivoli 资产管理 DAG”允许节点具有多个父节点。

graphic6.gif(5603 字节)

在该实例中,每当通过节点 C 或 E 的路径交叉时列出节点 D。由于节点 D 具有两个父级,当通过节点 C 或 E 交叉时,更改到节点 D 也可见。

副本命名

“Tivoli 资产管理”分层允许复制节点命名。

graphic7.gif(5742 字节)


在该实例中,两个 D 节点是不同的,分离具有相同名称的记录(例如“场所”管理器中的“第二层”。修改一个记录不会影响第二个。