内容


浅谈 Cognos 中的 Audit DB 和 Content Store DB

Comments

Cognos Audit DB 介绍

众所周知,Cognos 的日志文件是存储在 c8_locations/logs 目录下,名为 cogserver.log 的用逗号分隔的文本文件里面的。日志文件里面包含了各种各样的日志信息,通常用于追踪 Cognos 错误。当然,日志数据的详细程度是可以配置的,通过在 Cognos Administration 中配置不同的日志级别来控制日志文件的详细程度。通过查看日志信息,可以用来跟踪 Cognos 服务器上报表的运行状态和性能瓶颈等。但是通过检索大量的文本文件,查找出有价值的日志信息,是十分耗时耗力的。

因此,为了更方便的访问日志数据 , Cognos 允许直接将日志数据导入到一个关系数据库中,这便是 Cognos Audit DB,又称作 Cognos Logging DB。主要记录了 Cognos 平台上面的日志信息;Cognos 用户的登陆或者注销信息;报表 / 任务的运行信息,报表 / 任务的查看信息;报表 / 任务的调度信息等。

这样以来,通过查看存放在关系数据库里面的 Audit 日志信息,利用其存储在关系数据库表中的条件,可以很方便的创建基于 Audit DB 的 Cognos Audit 报表,然后通过运行报表方便的查看运行细节,监控其状态。相对于,在大量繁琐的日志文本文件里面查找错误信息和追踪错误细节,大大地提高了效率,并且能够很直观的查询到需要的结果。

当然,为了帮助读者更好的了解 Audit DB,IBM Cognos 提供了一个 Audit Model 示例。在这个示例中,已经附有一些简单的 Audit Report 供用户参考。 但是对于真正的 Cognos 开发项目来说,只有这些报表是远远不够的。我们应该利用 Audit DB 里面存储的很多重要的数据信息,开发出更具有实际应用价值的 Cognos Audit 报表。

比如一个简单的业务示例:利用 Audit DB,可以开发列举出当前服务器上运行时间最长的 Top 10 报表。这样,系统管理员就可以通过运行查看此报表,快速地找到究竟是那些报表运行时间最长,对系统资源的消耗最为严重,可以方便追踪服务器上的负载的瓶颈,然后及时通知报表用户或者开发人员去更新调优报表,提高业务报表的运行效率。进而提高当前服务器上的整体运行效率。

在下面的图中,我们列举了开发过程中经常会使用到的简单的 Audit 报表。读者可以借助与这些报表作进一步的开发。

图 1. Cognos Audit Report 示例
Cognos Audit Report 示例
Cognos Audit Report 示例

Cognos Content Store DB 介绍

Cognos Content Store DB 也是一个关系型数据库。区别于 Audit DB 的是,它里面存储了 IBM Cognos 的操作对象数据。这些数据包括 Cognos 上的文件夹,报表及其之间的继承层次关系;Cognos FM 上发布的包,模型,甚至细节到模型里面使用的存储过程等数据;Cognos 上的各种部件,比如 Query Studio, Analysis Studio, Event Studio 等,以及各种服务信息,如 LogService, MonitorService, ReportService, SystemService, JobService 等。

因此,可以这么说,Content Store DB 在一定程度上实时的反映了整个 Cognos 系统上的对象信息及相互关系,Cognos 上发布的重要模型信息,包信息,数据源及其之间的连接信息,以及报表的调度信息,都是可以通过查看 Cognos Content Store DB 了解到的。

关于选择什么样的关系型数据库作为 Content Store DB 那?其实在 Cognos 安装过程中有一个默认的 IBM Cognos Content 数据库,是 Apache Derby 数据库。如果读者不想重新配置 Content Store DB,可以直接使用这个自带的默认 Content Store DB 数据库。当然,我们也可以使用其他类型的商用数据库,比如说 Oracle,Microsoft SQL Server, IBM DB2, or Sybase,配置它们作为 Content Store DB。一般情况下,在实际的商用 Cognos 项目开发中,系统管理员大都会使用商用的大型数据库重新配置 IBM Cognos Content DB,比如说 DB2, Oracle 等。这是因为商用的数据库可以更稳定,更高效的支持整个 Cognos 服务器的运行。

另外,读者会关心 Content Store DB 是如何获取的那?实际上它是通过 Content Manager 服务来获取 Content Store 数据的。Content Manager 作为 Cognos 的服务来管理和使用 Content Store。它通过 JDBC API 来访问 Content Store。

在下面的图中,我们可以很直观的看到 Content Manager 和 Content Store DB 之间的关系。

图 2. Cognos Content Manager 和 Content Store 之间的关系
Cognos Content Manager 和 Content Store 之间的关系
Cognos Content Manager 和 Content Store 之间的关系

如何创建 Audit DB 和 Content Store DB

初步认识了 Audit DB 和 Content Store DB 的内容以后,就可以着手准备创建和配置项目需要的 Audit DB 和 Content Store DB 了。

下面,分别介绍 Audit DB 和 Content Store DB 的创建和配置细节。

1.Audit DB 的创建脚本

如下所示,首先给出了创建 Audit DB 的脚本。运行该脚本,在 DB 命令行提供相应的数据库参数即可完成初始的 DB 创建。

清单 1. Audit DB 的创建脚本
    #!/bin/ksh 
    if [ -n "${1}" ] 
    then 
        # set base variables 
        BIDB=${1} 
        db2 create database ${BIDB} using codeset UTF-8 territory CA 
        db2 update db cfg for ${BIDB} using buffpage 25000 
        db2 update db cfg for ${BIDB} using dbheap 2400 
        db2 update db cfg for ${BIDB} using logbufsz 64 
        db2 update db cfg for ${BIDB} using applheapsz 1024 
        db2 update db cfg for ${BIDB} using locktimeout 240 

        db2 connect to ${BIDB} 
        db2 alter bufferpool ibmdefaultbp size -1 
        db2 create regular tablespace USERSPACE4K pagesize 4k managed by system 
        using "('USERSPACE4K')" EXTENTSIZE 8 PREFETCHSIZE 8 
        dropped table recovery on 
        db2 grant use of tablespace USERSPACE4K to public 
        db2 create user temporary tablespace TMP4K pagesize 4k managed by system 
        using "('TMP4K')" EXTENTSIZE 8 PREFETCHSIZE 8 
        db2 grant use of tablespace TMP4K to public 
        db2 create bufferpool BP32K size 1000 pagesize 32k not extended storage 
        db2 create system temporary tablespace TMP32K pagesize 32k managed by 
        system using "('TMP32K')" 
        EXTENTSIZE 8 PREFETCHSIZE 8 bufferpool BP32K 
        db2 create bufferpool BP8K size 1000 pagesize 8k not extended storage 
        db2 create regular tablespace USERSPACE8K pagesize 8k managed by 
        system using "('USERSPACE8K')"
        EXTENTSIZE 8 PREFETCHSIZE 8 bufferpool BP8K dropped table recovery on 
        db2 grant use of tablespace USERSPACE8K to public 
        db2 connect reset 

    else 
        echo "Please enter a database name as a parameter !"
        exit 
    fi

2. 在 Cognos Configuration 中配置 Audit DB

DB 创建完成以后,如下图所示,我们需要在 Cognos Configuration 里面配置相应的 Audit DB。

图 3. 配置 Audit DB 示例
配置 Audit DB 示例
配置 Audit DB 示例

3.Create Content DB 的创建脚本

如下,给出了创建 Content Store DB 的脚本。运行该脚本,在 DB 命令行提供相应的数据库参数即可完成 DB 的创建。

清单 2. Create Content DB 的创建脚本
    #!/bin/ksh 
    if [ -n "${1}" ] 
    then 
        # set base variables 
        BIDB=${1} 
        db2 create database ${BIDB} using codeset UTF-8 territory CA 
        db2 update db cfg for ${BIDB} using buffpage 25000 
        db2 update db cfg for ${BIDB} using dbheap 2400 
        db2 update db cfg for ${BIDB} using logbufsz 64 
        db2 update db cfg for ${BIDB} using applheapsz 4096 
        db2 update db cfg for ${BIDB} using locktimeout 240 

        db2 connect to ${BIDB} 
        db2 alter bufferpool ibmdefaultbp size -1 
        db2 create regular tablespace USERSPACE4K pagesize 4k managed by system 
        using "('USERSPACE4K')" EXTENTSIZE 8 PREFETCHSIZE 8 
        dropped table recovery on 
        db2 grant use of tablespace USERSPACE4K to public 
        db2 create user temporary tablespace TMP4K pagesize 4k managed by 
        system using "('TMP4K')" EXTENTSIZE 8 PREFETCHSIZE 8 
        db2 grant use of tablespace TMP4K to public 
        db2 create bufferpool BP32K size 1000 pagesize 32k 
        db2 create system temporary tablespace TMP32K pagesize 32k managed by 
        system using "('TMP32K')" EXTENTSIZE 8 PREFETCHSIZE 8 bufferpool BP32K 
        db2 connect reset 

    else 
        echo "Please enter a database name as a parameter !"
        exit 
    fi

4. 在 Cognos Configuration 中配置 Content Store DB

与配置 Audit DB 类似,我们也需要在 Cognos Configuration 里面配置相应的 Content Store DB。这里我们介绍如何重新配置商用的大型数据库作为 Content Store DB。下面给出了详细的配置步骤:

步骤一:打开 Cognos Configuration 窗口

图 4. Cognos Configuration 窗口示例
Cognos Configuration 窗口示例
Cognos Configuration 窗口示例

步骤二:在 Content Manager 下删除默认的 Content Store

图 5. 删除默认的 Content Store 图示
删除默认的 Content Store 图示
删除默认的 Content Store 图示

步骤三:在 Content Manager 创建新的 Content Store

图 6. 创建新的 Content Store 图示 I
创建新的 Content Store 图示 I
创建新的 Content Store 图示 I
图 7. 创建新的 Content Store 图示 II
创建新的 Content Store 图示 II
创建新的 Content Store 图示 II
图 8. 创建新的 Content III
创建新的 Content Store 图示 III
创建新的 Content Store 图示 III

步骤四:编辑新的数据库名并测试数据库连接

图 9. 测试数据库图示 I
测试数据库图示 I
测试数据库图示 I
图 10. 测试数据库图示 II
测试数据库图示 II
测试数据库图示 II

测试成功以后,选择 Local Configuration 并且保存所有的配置,然后点击绿色的箭头开始启动服务器就可以了。至此,我们就完成了 Audit DB 和 Content Store DB 的创建与配置了。

Audit DB 和 Content Store DB 的表结构分析

通过前面的介绍,相信读者对 Audit DB 和 Content Store DB 有了初步的了解。那么接下去本文将重点对两个数据库中的表结构进行详细的说明。因为只有对数据库中的关键表有了认识,才可能从根本上帮助读者了解和充分利用数据库中存储的实际有价值的内容。

这里,我们也将分别说明 Audit DB 和 Content Store DB 的表结构信息。

1.Audit DB 的表结构分析

了解到 Audit DB 的大体内容以后,下面我们着重关注 Audit DB 中的表信息,以及表与表之间的关联关系等信息。只有弄清了表的结构,每个表中都存储了什么数据,才能最终从根本上,基于表数据开发出适合业务系统或者对系统管理员有实际利用价值的 Audit Report。

借助于 DB2 客户端工具,我们可以方便的连接上前面创建好的 Audit DB,查看该数据库上的重要的 Audit 表及其数据。

如下图所示,列出了 Audit DB 上一些关键的 Audit 表。对于实际的项目应用开发来讲,认识这些关键的日志表是很有必要的。

表 1. Audit DB 数据库表说明

Table NameTable Description
cogipf_action记录了对象上的操作
cogipf_agentbuild记录了 Agent 投递的相关信息
cogipf_agentrun记录了 Agent 运行情况,包括 host 信息和 Agent 运行状态,运行时间信息
cogipf_editquery记录了查询运行情况,包括 host 信息和运行状态,查询路径,所属的 Model 和 Package
cogipf_nativequery记录了原始的查询信息
cogipf_parameter记录了参数信息
cogipf_runjob记录了 job 运行情况,包括 host 信息和 job 运行状态,运行时间信息
cogipf_runjobstep一个 job 可以拆分成多个 job step,该表记录了 job step 的运行信息
cogipf_runreport记录了 report 运行情况,包括 host 信息和 report 运行状态,运行时间信息,错误信息等
cogipf_sysprops记录日志版本的细节信息
cogipf_userlogon记录了 Cognos 用户的登录信息
cogipf_viewreport记录 report 查看情况,包括 host 信息和 report 查看状态,错误信息,Package

当然,Audit DB 表与表之间是存在关联关系的。借助于 Cognos Framework Manger,可以很直观的查看这些表之间的关联关系。另外,用户也可以根据具体的业务需要,修改现在已有的关联关系或者添加新的关联关系。

图 11. Audit DB 表关系
Audit DB 表关系
Audit DB 表关系

2.Content Store DB 表结构分析

了解了 Cognos Content Store 数据库的目的以后,接下去着重看一下该数据库里面的表信息以及关键表里面存储的数据内容信息。

类似于 Audit DB,首先给出 Content Store DB 中的关键表分析。通过下面的列表,读者可以了解 Content store DB 中大部分表的内容和作用

表 2. Content Store DB 数据库表说明

Table NameTable Description
CMSYSPROPS记录了 Content Store 的版本信息
CMOBJECTS对象表,Cognos 中所有 objects 都对应表中一条记录,若某 objects 被删除,表中相对应的数据也将被删除
CMOBJNAMES对象名称表
CMOBJPROPS1存储了用户,角色,组分布信息,邮件,电话,传真等联系信息
CMOBJPROPS2报表调度详细信息,当对象有调度的时候,表中生成一条记录
CMOBJPROPS3存储对象的屏幕提示和对象描述
CMOBJPROPS4存储打印设置信息
CMOBJPROPS6存储 FM 发布的细节的包(Package)信息
CMOBJPROPS7存储报表和模型的 XML 信息
CMOBJPROPS10联系信息,包括联系和联系的 email
CMOBJPROPS11数据源配置信息,包括连接字符串和 cube 的位置等
CMOBJPROPS13传递给范围提示符的参数信息
CMOBJPROPS14对象的版本和创建时间信息
CMOBJPROPS16Cognos 服务的状态信息表,比如 LogService, MonitorService, ReportService, SystemService, JobService
CMOBJPROPS17Cognos 部件的性能细节,比如 Query Studio, Analysis Studio, Event Studio
CMOBJPROPS18存储源到目的的钻取路径信息
CMOBJPROPS20报表的提示信息和默认的报表选项信息
CMOBJPROPS24存储打印配置细节
CMOBJPROPS25存储对象部署,如部署的文件夹,报表,在部署归档中的文件数
CMOBJPROPS26存储所有导入 \ 导出的包数据和属性
CMOBJPROPS27Cube 创建的数据源的细节信息
CMOBJPROPS30存储注册,服务描述信息
CMOBJPROPS31存储了 Cognos 服务的日志级别
CMOBJPROPS32存储了 FM 模型里面使用的存储过程的细节信息
CMOBJPROPS33存储了用户,组信息
CMOBJPROPS34存储了 Drill though 操作的参数信息,以及参数的值信息
CMOBJPROPS36FM 发布的模型列表
CMOBJPROPS37服务器的路由设置,以及发布在 content store 里面的包的负载平衡信息
CMOBJPROPS38Studios 里面个项的配置细节信息
CMOBJPROPS39报表和视图的属性信息,可以使用 PROPID 联接 CMPROPERTIES 表获取属性名
CMOBJPROPS52连接的属性信息
CMOBJPROPS55Cognos Connection 里面图标的 URL 信息
CMLOCALESCognos 8 语言支持的本地标识信息

为了帮助读者更好的理解关键表的数据,下面对其中重要的几个表给出更为详细的表结构分析和表定义。

1. CMOBJECTS 对象表

Cognos 中所有 objects 都对应表中一条记录,若某个 objects 被删除,表中相对应的数据也将被删除。

表 3. CMOBJECTS 对象表说明

NameData TypeLengthComments
CMIDINTEGER4Key,新建 object 时顺序累加,当某一 object 被删除时,对应的 CMID 也被删除,下一个新建 object 将填补上前一被删除的 CMID
PCMIDINTEGER4当前 object 的父 object 对应的 CMID,若没有父 object,则 PCMID=CMID
VERSIONINTEGER4版本信息
CREATEDTIMESTAMP10Object 创建时间
MODIFIEDTIMESTAMP10Object 更新时间
DISABLEDSMALLINT2
CLASSIDSMALLINT2Object 种类,参照 CMCLASSES
DISPSEQINTEGER4
OWNERINTEGER4
HIDDENDECIMAL1

2. CMCLASSES 类别表

记录 Cognos 中所有 objects 的种类。

表 4. CMCLASSES 类别表说明

NameData TypeLengthComments
CLASSIDSMALLINT2Key,对应 CMOBJECTS 中的 CLASSID
NAMEVARCHAR50CLASSID 对应的种类名,例如:root,folder,report …
USAGESMALLINT2
DEFBLOB102400

3. CMPOLICIES 权限表

记录每一个对象的访问权限是否受限

表 5. CMPOLICIES 权限表说明

NameData TypeLengthComments
CMIDINTEGER4Key,对应 CMOBJECTS 中的 CMID
POLICIESBLOB102400若 CMID 对应的 object 继承父 object 权限,则为 NULL 若不继承父 object 权限,则记录该 object 的访问权限信息

4. CMDATA 输出对象信息表

当生成 output objects 时(class:Page, output, graphic, documentContent),与 CMOBJECTS 同时插入一条新数据,但当生成其他种类 objects 时不插入新数据。

表 6. CMDATA 输出对象信息表说明

NameData TypeLengthComments
CMIDINTEGER4Key,当生成 output object 时顺序累加,当某 output object 被删除时,对应 CMID 也被删除
CONTENTTYPEVARCHAR256
DATASIZEINTEGER4
DATACOMPDECIMAL1
DATAPROPBLOB1073741824Output object 属性信息

Audit DB 和 Content Store DB 在实际项目中的使用

至此,我们介绍了 Audit DB 和 Content Store DB 的内容,表结构,以及创建和配置细节。那么如何在实际项目中利用这两个重要的数据库就迫在眉睫了。接下来,就介绍一下这部分的内容。

1.Audit DB 的使用

访问和追踪 Cognos 的日志数据信息,是 Audit DB 的一个关键的作用。通过它,可以很方便的监控当前 Cognos 服务器上报表 / 任务的运行细节,可以很快的查看到有哪些报表运行失败。进而分析失败的根源。最终报告给最终的报表开发人员去解决问题。

下面举例给出一个如何利用 Auidt DB 监控调度报表失败的示例。

方法一:我们可以查询 Audit DB 中的 C8CONT.COGIPF_RUNREPORT 表,因为该表中存储了 Cognos 上所有运行报表的信息数据。通过查询该表,可以查询得出那些报表目标类型是调度的报表,以及最终状态是失败的详细信息数据。

清单 3. SQL 示例 I
    SELECT * 
    FROM COGIPF_RUNREPORT 
    where cogipf_target_type like 'Report BatchReportService'
    and cogipf_status like 'Failure'
    order by cogipf_localtimestamp desc 
    with ur;

方法二:利用 Audit DB 开发出 Audit 报表,可以方便用户直观的查询一段时间参数内的失败的调度报表信息。

图 12. Cognos 失败的调度报表创建图示
Cognos 失败的调度报表创建图示
Cognos 失败的调度报表创建图示
图 13. Cognos 失败的调度报表演示图示
Cognos 失败的调度报表演示图示
Cognos 失败的调度报表演示图示

由于篇幅限制,这里只有简单介绍了 Audit DB 中的一个表的用途,读者可以访问 Cognos 的官方文档,来进一步了解 Audit DB 其他表的作用。

2.Content Store DB 的使用

Cognos Connection 上的所有对象都存在于 Content Store DB 中,因此充分了解 Content Store DB 有利于搞清楚整个 Cognos 中对象之间的关联关系,对象间的继承关系。例如 CMOBJECTS 表中就存储了对象 ID,以及父对象的 ID,对象的种类信息。通过递归地查询 CMOBJECTS 表就可以找出对象与对象之间存在的继承关系。

举例说明,读者可以利用下面的查询 SQL,了解当前 Cognos 服务器上的'BP Usage Reports' 及其子对象对象之间的继承关系。

清单 4. SQL 示例 II
    with RPL( 
        RECURSION_LEVEL, 
        cmid, 
        pcmid, 
        name, 
        classname 
    ) 
    as ( 
       select 0, 
       objtable.cmid, 
       objtable.pcmid, 
       objname.name, 
       classtable.NAME 
       from c8devdb.CMOBJECTS as objtable, c8devdb.CMOBJNAMES as objname, 
       c8devdb.CMCLASSES classtable 
       where objtable.CMID=objname.CMID and objtable.CLASSID= classtable.CLASSID 
       and  classtable.CLASSID in ('1') and objname.NAME='BP Usage Reports'

       union all 

       select 
       post.RECURSION_LEVEL +1, 
       objtable.cmid, 
       objtable.pcmid, 
       objname.name, 
       classtable.NAME 
       from RPL post,c8devdb.CMOBJECTS as objtable, c8devdb.CMOBJNAMES 
       as objname,c8devdb.CMCLASSES classtable 
       where post.cmid=objtable.pcmid and objtable.CMID=objname.CMID and 
       objtable.CLASSID= classtable.CLASSID and  classtable.CLASSID in ('1','10') 
       and objtable.cmid != objtable.pcmid 
    ) 
    select distinct * from RPL with ur;

查询结果如下所示

图 14. SQL 查询结果图示
SQL 查询结果图示
SQL 查询结果图示

所以通过查询 Content Store DB,可以得到很多有用的 Cognos 上的数据信息。再如,在实际的业务需求中,往往会有这样的应用,我们需要查询出当前 Cognos 上的某个用户或者组有哪些权限信息。这里就示例给出如何查询用户为'Cognos CoC Support'的权限数据,读者可以参考下面的查询语句。

清单 5. SQL 示例 III
   	 select usertable.CMID,usertable.NAME,objtable.PCMID,poltable.POLICIES 
   	 from c8devdb.CMOBJPROPS33 as usertable, c8devdb.CMPOLICIES as poltable, 
   	 c8devdb.CMOBJECTS as objtable 
   	 where usertable.CMID=objtable.CMID and poltable.CMID=usertable.CMID 
   	 and usertable.NAME='Cognos CoC Support' 
   	 with ur;

结果如下所示:

图 15. SQL 查询结果 II 图示
SQL 查询结果 II 图示
SQL 查询结果 II 图示

当然,对于 Cognos 系统管理员来说,也通过查看 Content Store DB 来了解在当前的 Cognos 服务器上存储了多少对象,对象间是如何组织的。当然这里的对象不局限于报表,还包括文件夹,模型,用户,组等信息。进而,系统管理员可以通过查看 Content Store 里面的表数据来粗略评估当前整个 Content Store DB 的大小。这样就可以监控 Content Store DB 的增长状态,有利于管理员很快的掌握当前的 Cognos 服务器的稳定情况。特别是当整个 Cognos 服务器运行了一段时间以后,了解 Content Store DB 的增长,对于 Cognos 系统管理员来说是一个挑战性的工作。当然,过大的 Cognos Store DB 本身并不是一个问题,但是它会影响整个 Cognos 服务器运行的性能。

因此,Cognos 系统管理员应该根据实际情况实时的监控 Content Store DB,并且控制它的过分增长。例如,定期备份不是经常使用的用户数据,或者报表,视图数据到文件系统等等。做到定期备份 Content Store 是非常有必要的,其中的一个好处就是可以用它来恢复损坏的 Content Store。

另一方面,IBM Cognos 也提供了 Content Manager Browser Tool 来帮助管理员评估 Content Store DB 的大小。从这一点,也可以充分看出了解 Cognos Content Store 的大小对稳定 Cognos 环境有关键的影响。Cognos Content Manager Browser Tool 提供了一个树状的 Content Store 存储的对象视图,用户可以利用它查看 Content Store 中存储的对象,例如展示公共文件夹下面的对象,以及对象包含的报表,查询,视图,包,版本信息等。下面就给出了 Cognos Content Manager Browser 工具的一个截图。如果读者对此感兴趣,可以通过阅读它的官方文档获取更详细的信息。

图 16. Content Manager Browser Tool 图示
Content Manager Browser Tool 图示
Content Manager Browser Tool 图示

相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=958639
ArticleTitle=浅谈 Cognos 中的 Audit DB 和 Content Store DB
publish-date=11272013