分類: 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,不一定是一個。