从BIEE 11g开始,oracle提供了xml api以供我们来修改RPD,这是一个很强大的功能。
下面就给出一个通过修改xml文件来修改rpd内容的例子。
背景:
有一个rpd以前是使用的mysql作为数据源,现在数据源被迁移到了oracle上,所以我们需要修改物理层的内容以切换数据源。
基本上就是修改数据库类型、连接池调用接口,连接串以及用户密码等,等等,这些就够了吗?
当然不够了,由于数据库在处理用户及schema上的差异(oracle的用户名就等于schema名称,mysql的用户名和schema却是分离的),导致
物理层mysql的表是挂在物理目录下,而oracle的物理表是挂在schema下,差异如下图所示:
管理工具并不能直接把物理目录变成schema,那我们能不能新建一个schema然后在把物理表剪切过去呢?
很遗憾这种方法表是过去了,但是表与表之间的连接关系却不能剪切过去,而表也比较多,如果重新连接的话会显得比较麻烦。
那我们有没有办法直接将物理目录的类型改变而维持他的id呢?
答案是修改mds xml
具体步骤如下:
1、将RPD存为mds xml
文件-另存为- mds xml文档 将xml文件存到一个目录下,如D:\xml
解压后的目录结构如下:
可以看到基本上每个对象都有一个文件夹,大家可以和RPD里的对象一一对应,如本例关注的PhysicalCatalog和Schema
其中每个PhysicalCatalog对应一个xml文件(如:d25c9e23-0c42-1000-8567-ac1601cf0000.xml),内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <PhysicalCatalog mdsid="md25c9e23-0c42-1000-8567-ac1601cf0000" name="ecom_wc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.oracle.com/obis/repository" containerRef="/oracle/bi/server/base/Database/d25c9e20-0c42-1000-8567-ac1601cf0000.xml#md25c9e20-0c42-1000-8567-ac1601cf0000" />
Schema的xml文件
<?xml version="1.0" encoding="UTF-8" ?> <Schema mdsid="m056c1691-0c40-1000-95db-ac16018a0000" name="ECOM_WC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.oracle.com/obis/repository" containerRef="/oracle/bi/server/base/Database/a38e3981-0c3f-1000-afa2-ac16018a0000.xml#ma38e3981-0c3f-1000-afa2-ac16018a0000" />
大家可以看到主要区别在标签上,物理目录的标签是<PhysicalCatalog></PhysicalCatalog>,而schema的标签是<Schema></Schema>,
所以我们要把物理目录改成schema只需要把标签改了就可以了,其它的为了维护对象之间的关联关系我们不要去改他们的mdsid!!!!
修改后的xml文件如下:
<?xml version="1.0" encoding="UTF-8" ?> <Schema mdsid="md25c9e23-0c42-1000-8567-ac1601cf0000" name="ecom_wc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.oracle.com/obis/repository" containerRef="/oracle/bi/server/base/Database/d25c9e20-0c42-1000-8567-ac1601cf0000.xml#md25c9e20-0c42-1000-8567-ac1601cf0000" />
修改完比之后记得把该xml文件从PhysicalCatalog目录下移动到Schema目录下(注意是移动,不是复制!因为要确保每个id只对应一个对象)。
还没有完,还需要修改每个表的xml文件让他们指向新的schema,表的xml文件(部分内容)如下:
<PhysicalTable mdsid="m4d009a60-0c42-1000-86c8-ac1601cf0000" name="WC_SRC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.oracle.com/obis/repository" type="none" maxConn="0" containerRef="/oracle/bi/server/base/PhysicalCatalog/a8650400-0c41-1000-86c8-ac1601cf0000.xml#ma8650400-0c41-1000-86c8-ac1601cf0000">
大家注意containerRef的内容,有一部分是PhysicalCatalog,这里标明了该表所属的PhysicalCatalog,而我们现在把PhysicalCatalog改成了schema,所以这里的
关键字也得跟着改,把PhysicalCatalog改成Schema即可!
对所有该物理目录下的表都进行同样的操作!
最后将修改之后的mds xml生成新的rpd
方法如下:
打开管理工具,按照如下方法新建RPD
完!