OBIEE 12.2.1.3.0未使用数据表排查及关联对象查询方法咨询
嘿,针对你在OBIEE 12.2.1.3.0里做知识库清理的需求,我给你整理几个实用的实操方法,都是平时做运维清理常用的:
这里分两种场景,一种是基于元数据引用排查,一种是基于实际访问统计定位:
方法1:通过Repository Documentation工具排查元数据引用
这是最直观的方式,能帮你快速判断表是否被BI层对象引用:- 打开OBIEE Administration Tool,加载你的RPD文件
- 点击菜单栏的
Tools > Utilities > Repository Documentation - 在弹窗里选择整个RPD作为生成范围,然后勾选Tables、Columns、Subject Areas、Reports、Agents这些对象,同时确保勾选
Relationships下的关联选项 - 生成HTML或PDF文档后,搜索目标表名,如果没有任何关联的分析、仪表盘、代理等对象,那这个表很大概率是未被使用的
方法2:查询RCU数据库的访问统计(需启用Usage Tracking)
如果你的OBIEE已经启用了使用统计,直接查RCU里的日志表就能精准定位从未被访问过的表:
先确认已经启用Usage Tracking:在EM控制台里找到BI Instance,配置Usage Tracking参数开启统计。然后执行以下SQL:-- 查询从未被访问过的数据表 SELECT t.table_name FROM S_NQ_DB_TABLE t LEFT JOIN S_NQ_ACCT a ON t.table_id = a.table_id WHERE a.acct_id IS NULL AND t.table_type = 'TABLE'; -- 只过滤实体表,排除视图等这个结果里的表就是实际业务中从未被查询过的,可以优先清理
要拿到完整的关联映射,同样有几个高效方法:
方法1:Repository Documentation生成完整关联文档
还是用这个工具,生成时务必勾选Relationships下的所有选项(比如Table→Column→Logical Column→Presentation Column→Report/Agent的全链路关联),生成的文档里会有清晰的层级结构,你可以直接看到某个表的字段被哪些分析、代理引用,甚至能追踪到具体的仪表盘组件方法2:Administration Tool的Dependency Analysis功能
如果你只想查单个表的关联情况,这个方法更快捷:- 在RPD里找到目标数据表,右键点击它
- 选择
Object > Dependency Analysis - 在弹窗里选择
Show Dependencies,可以切换向上依赖(查看哪些BI对象引用了这个表)或向下依赖(查看表依赖的其他对象),结果会直观展示所有关联的分析、代理、仪表盘提示等对象
方法3:批量查询RCU元数据表
如果你需要批量导出关联列表做分析,可以直接查RCU的元数据表,比如:-- 查询数据表对应的分析、代理对象 SELECT obj1.name AS 数据表名称, obj2.name AS BI对象名称, CASE obj2.type WHEN 'REPORT' THEN '分析' WHEN 'AGENT' THEN '代理' ELSE obj2.type END AS 对象类型 FROM S_NQ_DEPENDENCY dep JOIN S_NQ_REPOS_OBJECT obj1 ON dep.object_id = obj1.object_id JOIN S_NQ_REPOS_OBJECT obj2 ON dep.dependent_object_id = obj2.object_id WHERE obj1.type = 'TABLE' AND obj2.type IN ('REPORT', 'AGENT');这个SQL能直接输出所有数据表和关联分析、代理的对应关系,方便你批量整理
- 如果没启用Usage Tracking,那访问统计的方法就用不了,这时候优先结合Repository Documentation和Dependency Analysis的结果,排查元数据里无任何引用的表
- 有些表可能是ETL过程用到但没在BI层暴露的,这类表也属于可清理范围,建议和ETL团队确认后再操作
内容的提问来源于stack exchange,提问作者Hilário Ferreira

