我有一个包含30个映射的ODI 12c项目。我需要检查每个数据存储对象(源或目标)上的每个“组件上下文”是否都设置为“执行上下文”(不是强制)。 有没有一种方法可以通过查询ODI底层数据库来实现,所以我不必手动进行操作并避免可能的错误?
我有一个ODI 12c存储库表的列表和从Oracle支持网站获得的表列注释,经过数小时的数据库挖掘,我仍然看不到任何表中存储的信息。
我的程序包位于SNP_PACKAGE中,SNP_MAPPING具有有关映射的信息,而SNP_MAP_COMP描述了映射中的对象。 我也搜索了许多不同的表格。
答案 0 :(得分:1)
有点晚了,但对于其他寻找的人
对表的访问是不行的。 API更好。特别是如果您要修改任何东西。 https://docs.oracle.com/en/middleware/data-integrator/12.2.1.3/odija/index.html
在ODI中运行以下groovy脚本(工具/ Groovy /新脚本)。应该足够简单地进行修改。如果您设法在IntelliJ或其他Java IDE中设置完整的开发环境,则使用SDK会容易得多。 ODI中的Groovy开拓了一个全新的世界。
//Created by DI Studio
import oracle.odi.domain.mapping.Mapping
import oracle.odi.domain.mapping.finder.IMappingFinder
tme = odiInstance.getTransactionalEntityManager()
IMappingFinder mapf = (IMappingFinder) tme.getFinder(Mapping.class)
Collection<Mapping> mappings = mapf.findByProject("PROJECT","FOLDER")
println("Found ${mappings.size()} mappings")
mappings.each { map ->
map.physicalDesigns.each{ phys ->
phys.physicalNodes.each{ node ->
println("${map.project.name}...${map.parentFolder.parentFolder?.name}.${map.parentFolder.name}.${map.name}.${phys.name}.${node.name}.defaultContext=${(node.context.defaultContext) ? "default" : node.context.name}")
}
}
}
它打印默认或设置(强制)上下文。似乎强制上下文已在12c中弃用。 Physical.node.context.defaultContext似乎反映了ODI Studio 12.2.1.3中的组件上下文(强制)。 https://docs.oracle.com/en/middleware/data-integrator/12.2.1.3/odija/index.html
更新2019-12-20-包括getExecutionContextName 以下脚本以分层的方式列出,可能更易于阅读代码。不知道您是否能获得原先的状态,而不必进行精确的设置映射。
//Created by DI Studio
import oracle.odi.domain.mapping.Mapping
import oracle.odi.domain.mapping.finder.IMappingFinder
import oracle.odi.domain.mapping.component.DatastoreComponent
tme = odiInstance.getTransactionalEntityManager()
String project = "PROJECT"
String parentFolder = "PARENT_FOLDER"
IMappingFinder mapf = (IMappingFinder) tme.getFinder(Mapping.class)
Collection<Mapping> mappings = mapf.findByProject(project, parentFolder)
println("Found ${mappings.size()} mappings")
println "Project: ${project}"
mappings.each { map ->
println "\tMapping: ..${map.parentFolder.parentFolder?.name}/${map.parentFolder.name}/${map.name}"
map.physicalDesigns.each{ phys ->
println "\t\tPhysical: ${phys.name}"
phys.physicalNodes.each{ node ->
println "\t\t\tNode: ${node.name}"
println "\t\t\t\tdefaultContext: ${(node.context.defaultContext)}"
println "\t\t\t\tNode context name: ${node.context.name}"
println "\t\t\t\tDatastoreComponent ExecutionContextName: ${DatastoreComponent.getDatastoreComponent(node)?.getExecutionContextName(node).toString()}"
}
}
}
答案 1 :(得分:0)
答案 2 :(得分:0)
这里也是直接从数据库检索此信息的查询。
-映射中数据存储上的强制上下文
SELECT MAPP.NAME MAP_NAME, MAPP_COMP.NAME DATASTORE_NAME,
MAPP_REF.QUALIFIED_NAME FORCE_CONTEXT
FROM SNP_MAPPING MAPP
INNER JOIN SNP_MAP_REF MAPP_REF
ON MAPP_REF.I_OWNER_MAPPING = MAPP.I_MAPPING
INNER JOIN SNP_MAP_PROP MAPP_PROP
ON MAPP_REF.I_MAP_REF = MAPP_PROP.I_PROP_XREF_VALUE
INNER JOIN ODIW12.SNP_MAP_COMP MAPP_COMP
ON MAPP_COMP.I_MAP_COMP = MAPP_PROP.I_MAP_COMP
WHERE
MAPP_REF.ADAPTER_INTF_TYPE = 'IContext'
and MAPP.NAME like %yourMapping%