分类: Linux
最近,做了几个ODI项目的部署,发现ODI agent所在的位置对整个E-LT工作的影响还是比较大的,根据Oracle的官方说法,agent一般需要部署在目标端的数据库服务器上,或者repository数据库服务器上(如果repository直接采用目标服务器就更简单了),但在实际的使用中,建议尽量还是将agent部署在目标端所在的服务器上。
一、agent的分类
在ODI中,有三类agent,一是/bin目录下直接运行agent.sh或agent.bat,该类agent只能被动调用。
二是/bin目录下的agentscheduler.sh/agentscheduler.bat,从名字可以看出,它可以自动执行计划好的工作,第三类是designer.bat设计界面,该界面在调试时可以自己作为一个agent来运行。其中第一类和第三类agent不需要修改任何东西。第一类直接运行agent.sh/agent.bat就可以了,第三类什么都不用起,只是在测试interface或者package时才会用到。
二、agent不同部署方式带来的区别
如上图所示,如果agent部署在repository(以下简称元数据服务器)上,而元数据服务器又和目标数据库不在一个服务器上,那么命令的流向(途中红色线)为:agent首先登录到源数据库,抽取数据,取到元数据库所在的服务器,然后agent再登录到目标服务器,将数据加载到目标数据库。数据的流向为:源数据库到元数据服务器到目标数据库。
如果我们将agent部署在目标服务器,如下图所示,此时,数据流会从源直接流向目标,agent在目标端可以利用目标端数据库的内置客户端工具直接将数据加载到数据库,从而避开JDBC调用。
Agent说白了就是一个java小程序,既可以通过jdbc driver作为源和目标数据库的客户端登录到数据库服务器操作,也可以调用本地操作系统的命令,因此odi在数据的E-LT过程中,最简单但效率最低的方法是完全采用JDBC方式抽取、加载数据。最快的方式是采用数据库的内置客户端命令抽取加载数据,如DB2的load,sqlserver的bcp,oracle的sqlloader。当然要调用数据库客户端,agent所在的机器必须有相应数据库的客户端软件。下面是几个agent部署的例子:
- 1. AS400上文件加载到DB2:
具体解释请参见上面的英文,这是在oracle openworld的pdf里面截出来的。
- 2. 远程文件入库:
此时agent应该安装在文件所在的服务器,而且该机器需要安装目标端数据库的客户端。
- 3. 远程同构数据库,该方式下,数据一般是在数据库内部流动,如oracle的dblink,sqlserver的linked server,sybase的CIS,agent的位置无所谓,但仍建议在目标端。
- 4. 远程异构数据库集成,此时agent的配置是比较讲究的,如果数据的抽取和加载都采用数据库的内置客户端,那么如果agent在源数据库端,则源数据库端需要安装目标数据库的客户端,反之亦然。当然ODI内置了一个基于JDBC数据库抽取工具sqlunload,如果目标端是生产系统,客户不允许部署任何东西,建议采用该工具,效率还是不错的。
三、如何安装agent
ODI的agent安装比较简单:
- 1. 将安装ODI机器设计界面的服务器上ODI目录下/bin,/drivers和/lib目录直接拷贝到目标或者源服务器上。
- 2. 在服务器上如果没有jdk1.5或以上,建议安装jdk1.5或以上。
- 3. 指定ODI_JAVA_HOME环境变量,或者修改odiparams.bat/odiparams.sh到JDK的安装目录。
- 4. 如果不需要schedule的工作,直接执行 /bin目录下的agent.sh/agent.bat即可,该程序默认端口为20910,如果需要指定别的端口,则运行agent.bat –name= -port=
- 5. 如果需要运行schedule的工作,则首先需要修改odiparams.bat/odiparams.sh文件,把其中连接master repository的一段修改成您自己的driver和url,如下所示:
JDBC driver to access the Master Repository:
set ODI_SECU_DRIVER=oracle.jdbc.driver.OracleDriver
JDBC URL to access the Master Repository:
set ODI_SECU_URL=jdbc:oracle:thin:@1.128.5.52:1521:ORADB
Database Username to access the Master Repository:
set ODI_SECU_USER=odi1013m
Database Password to access the Master Repository:
set ODI_SECU_ENCODED_PASS=b9yHYSNunqZvoreC6aoF0Vhef
Name of the Work Repository:
set ODI_SECU_WORK_REP=WORKREP1
ODI Username for ODI Security:
set ODI_USER=SUPERVISOR
ODI Password for ODI Security:
set ODI_ENCODED_PASS=LELKIELGLJMDLKMGHEHJDBGBGFDGGH
特别注意这是链接master repository的信息,和您启动designer登录时的信息一模一样,您可以从designer的登录界面里面copy过来。
这些参数中有两个加密过的密码,具体的加密方法为,到您刚才copy过来的/bin目录下,运行 ./agent.sh encode <您的密码>,然后将加密过的字符copy到odiparams.sh中相应的位置即可。
另外要特别注意的是copy的/drivers目录下是连接所有源、目标以及元数据库服务器的jdbc driver,如果您的整个架构中加入了新的数据源,千万别忘了把相应的jdbc文件copy到所有agent所在服务器的drivers目录下。
在一个ODI生产环境中,可以根据需要配置多个agent,不一定是一个。