Tramadol hcl 50mg Buy amoxicillin Slot machine High stakes poker Online cialis Cialis viagra Phones Videos Phentermine 37 5 Keflex No exam life insurance Clindamycin Bank foreclosure Board of cosmetology Adipex-p Cytotec Football pool pick Buy cialis Education degree Buy tenuate Buy avandia Emergency medicine Life insurance no medical exam Homes Consolidating debt Ohio Acyclovir Pictures House Buy tramadol Cheap viagra Auto insurance rate Ultram online Big tits Cheap cialis Business credit cards Yahoo Buy viagra online Soma Allergy Best casino Cheap levitra Debt negotiation Biaxin Ionamin Bank Bad credit loan Clopidogrel Attorney Affordable life insurance Paramedic Buy levitra online Buy levitra Adult dating Order avandia Order soma online Cymbalta Zocor Lortab Chiropractor 
Home > Oracle Applications > Learning ODI – Sybase to Oracle

Learning ODI – Sybase to Oracle

August 21st, 2008

这几天,在客户处实施Sybase ASE到Oracle 10g的变化数据捕获以及数据转换的前期测试工作,问题此起彼伏,但最终效果圆满,感觉上仿佛遇神杀神,遇鬼杀鬼。不拽了,总结一下遇到的问题以及相应的解决方法。

一. ODI连接数据库阶段

1. JDBC版本 – jConnect 5.5
ODI自带的JDBC驱动无法正常连接Sybase ASE数据库。

解决方法:需要去Sybase站点上下载jConnect 5.5版本,然后将其中的jconn2.jar文件拷贝进ODI安装目录的drivers文件夹中,之后再次选择com.sybase.jdbc2.jdbc.SybDriver,才可以连接。

2. 为什么不选择jConnect 6.05
因为在jConnect 6版本以后,”getColumnName”方法返回的是列的COLUMN Name,而之前的版本都是返回列的ALIAS,而ODI使用的都是列ALIAS,因此如果选用jConnect 6.05,那么在最后执行Interface的时候,将会碰到下面的错误:
com.sunopsis.sql.SnpsMissingParametersException: Missing parameter…

解决方法:使用jConnect 5.5,这也是Oracle lab test时推荐的JDBC驱动版本。

3. JDBC连接串的写法
如果写法如下:
Driver是:com.sybase.jdbc2.jdbc.SybDriver
连接串是:jdbc:sybase:Tds:172.22.224.106:4100/dbemp1

连接时将碰到JZ00L错误,已经确保用户名和密码一定正确:
java.sql.SQLException: JZ00L: Login failed. Examine the SQLWarnings chained to this exception for the reason(s).

解决方法:添加charset属性,修改连接串为 jdbc:sybase:Tds:172.22.224.106:4100/dbemp1?charset=eucgb
最后Physical Schema的设置应该类似如下界面(点击以后放大)。

二. Datastore创建阶段

1. Sun JDBC-ODBC Bridge驱动无法实施反向工程(Reverse Engineering)
因为一开始配置jConnect驱动的时候死活无法连通,因此尝试了Sun JDBC-ODBC Bridge驱动,这种方法需要首先在机器上创建一个ODBC连接,因此也就需要Sybase客户端,所以实际上是不推荐的,而且通过JDBC-ODBC Bridge连接进数据库以后,发现无法执行反向工程。

解决方法:放弃这种方法,换用jConnect连接Sybase ASE。

2. Changed Data Capture
对于创建了唯一聚簇索引的Sybase表也无法启动Journal,必须需要Primary Key。没有主键在启动Journal的时候会碰到如下错误:
com.sunopsis.tools.core.exception.SnpsSimpleMessageException: Journalizing requires a Primary Key on the Table:ODI_TEST

解决方法:在表上创建Primary Key。

三. Interface执行阶段

1. Oracle端表中包含Date或者Timestamp类型的字段时,执行时报ORA-30088错误
如果包含DATE或者TIMESTAMP类型字段的Datastore是由反向工程直接从数据库中reverse生成的,那么对于DAYE字段,默认的Logical Length是7,对于TIMESTAMP字段默认的Logical length是11,那么这样在执行阶段的create work table步骤中,将会按照这些Logical Length来在目标数据库端创建C$_表,而DATE(7)或者TIMESTAMP(11)这样的语法都会报ORA-30088错误。
java.sql.SQLException: ORA-30088: datetime/interval precision is out of range

解决方法:在reverse生成Datastore以后,手工修改DATE和TIMESTAMP类型的字段,将Logical length改为空,Scale也改为空。

2. 执行时,Loading data步骤时报7725错误
在执行Interface的时候,到Loading data这一步,报如下错误:
7725 : ZZZZZ : com.sybase.jdbc2.jdbc.SybSQLException: Cursor ‘jconnect_implicit_2′ was declared with a FOR UPDATE clause. This cursor was found to be read only.
这是花费了最长时间解决的错误,十分感谢Rich Ho何致亿,帮我发邮件到OracleDI的邮件列表中去提问。

解决方法:在Topology Manager中将Data Server的Array Fetch Size和Batch Update Size设置为0,默认是30。

到今天为止,ODI的大致架构和基本功能算是掌握了,更加深入的学习还要看以后这个项目是不是会继续下去了。

kamus Oracle Applications , ,


  1. No comments yet.
  1. No trackbacks yet.
o-o >:) >:( :D :? :-S :) :( :! *(
Proudly using Dynamic Headers by Nicasio Design