数据集成平台V3.0
FAQ
编制人员:熊广
编制部门:软件工程研发中心模版文件版本:V1.3.0
适用项目范围:研发项目
文件修改记录表
目录
1引言 (3)
1.1编写目的 (3)
1.2术语定义 (3)
1.3参考资料 (3)
2ODI使用过程常见问题记载 (4)
2.1O RACLE SID改写问题 (4)
2.2N V A VIGATOR的配置、使用问题 (5)
2.3M YSQL远程访问授权问题 (6)
2.4BLOB同步问题 (7)
2.5数据类型转换错误 (7)
2.6目标表某字段的长度小于实际长度 (8)
2.7A GENT配置问题 (8)
3ODI对中文命名支持情况 (14)
4常见数据库系统连接URL示例 (15)
1引言
1.1编写目的
本文档记录了ODI数据集成过程中的常见问题、错误原因及其解决办法,通过整理此FAQ可以为其他开发人员总结相关开发经验,为其他开发人员所用。,
1.2术语定义
1.3参考资料
版权所有?江苏金智科技股份有限公司,保留所有权利。第 3 页,共13 页
2ODI使用过程常见问题记载
2.1Oracle SID改写问题
?错误描述:在Topology Manager插入类型为Oracle数据服务器时,在添写实例
/dblink时直接填写为Oracle的SID(如下图),执行时会抱错:
?错误原因:实例/dblink的取名不能和SID相同
?解决方法:为Oracle增加一个service name。修改oracle目录oracle\
product\10.1.0\Db_1\NETWORK\ADMIN下的tnsnames.ora文件,增加一个service name,如以下修改增加了一个名为orcl_server的服务名
orcl_server=
(DESCRIPTION =
版权所有?江苏金智科技股份有限公司,保留所有权利。第 4 页,共13 页
版权所有?
江苏金智科技股份有限公司,保留所有权利。第 5 页,共13 页
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.13.178)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICA TED)
(SERVICE_NAME =tsolaris)
)
)
2.2Nvavigator的配置、使用问题
在安装、配置好TOMCAT、Navigator后,进入服务器页面,如http://localhost:8080/*****,浏览器不是进入Nvavigator的起始页,而是显示:
请位于的XDB输入用户名和密码用户名
?错误原因:安装Nvavigator的服务器上也同时安装了Oracle数据库,Oracle占用
了TOMCA T默认的8080端口作为http服务端口,导致TOMCAT与Oracle的http
服务端口冲突
?解决办法:更改TOMCAT的端口号,打开TOMCAT安装目录/ conf下的server.xml
文件,如以下代码修改端口为8090
port="8090" maxHttpHeaderSize="8192" maxThreads="150"minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" d isableUploadTimeout="true" /> 2.3Mysql远程访问授权问题 ?错误描述:在对MYsql数据源远程集成时,若未对操作节点进行授权,集成时会抱错 j ava.sql.SQLException: Access denied for user: 'root@172.18.14.20' (Using password: YES) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2975) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:798) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1256) at com.mysql.jdbc.Connection.createNewIO(Connection.java:2572) at com.mysql.jdbc.Connection. ………………. ……………… ?错误原因:Mysql网络授权问题,ODI所在的用户结点不具有远程操作Mysql结点的权 限 ?解决办法:为ODI服务器所在结点赋予权限 格式:grant 权限on 数据库名.表名用户@登录主机identified by "用户密码"; grant select,update,insert,delete on *.* to xuys@192.168.88.234 identified by "xuys1234"; 将host字段的值改为%就表示在任何客户端机器上能以xuys用户登录到mysql服务器,建议在开发时设为% 版权所有?江苏金智科技股份有限公司,保留所有权利。第 6 页,共13 页 2.4BLOB同步问题 ?错误描述:同步的过程中存在BLOB字段,若直接调用系统KM,会抱错 932 : 42000 : java.sql.SQLException: ORA-00932: inconsistent datatypes: expected - got BLOB java.sql.SQLException: ORA-00932: inconsistent datatypes: expected - got BLOB at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:316) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:282) at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:639) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:185) at oracle.jdbc.driver.T4CPreparedStatement.execute_for_describe(T4CPreparedStatement.java:503) ?错误原因:ODI无法直接对BLOB字段进行同步处理(源与目标同为Oralce情况除外), 需要改写相关KM,同步过程才能正确运行 ?解决办法:参见《BLOB字段同步解决方法说明书.doc》,内有详细说明 2.5数据类型转换错误 ?错误描述:ORA-1722 : java.sql.SQLException: ORA-01722: 无效数字 java.sql.SQLException: ORA-01722: 无效数字 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:316) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:282) at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:639) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:185) ………………… ………………… …………………. 版权所有?江苏金智科技股份有限公司,保留所有权利。第7 页,共13 页 ?错误原因:视图将字符串类型的值填入数字型而造成的,在sql语句中,字符数字类型 转换错误,无法将字符串转化成有效数字 2.6目标表某字段的长度小于实际长度 ?错误描述:目标表某字段的长度小于实际长度,抱错 12899 : 72000 : java.sql.BatchUpdateException: ORA-12899: 列"SNPM"."C$_0stuuuuuuu"."C2_SNAME" 的值太大(实际值: 6, 最大值: 4) 12899 : 72000 : java.sql.SQLException: ORA-12899: 列"SNPM"."C$_0stuuuuuuu"."C2_SNAME" 的值太大(实际值: 6, 最大值: 4) java.sql.BatchUpdateException: ORA-12899: 列"SNPM"."C$_0stuuuuuuu"."C2_SNAME" 的值太大(实际值: 6, 最大值: 4) at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:367) at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:9119) at com.sunopsis.sql.SnpsQuery.executeBatch(SnpsQuery.java) at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execCollOrders(SnpSessTaskSql.java) ?错误原因:目标表中字段SNAME长度设置太小,源中SNAME的实际长度大于目标中 映射字段的长度,因此抱错 ?解决办法:修改目标表结构,增大该字段的长度 2.7Agent配置问题 ?错误描述:Agent未正确配置时运行时抱错 com.sunopsis.sql.c: at com.sunopsis.sql.SnpsConnection.a(SnpsConnection.java) at com.sunopsis.sql.SnpsConnection.connect(SnpsConnection.java) at com.sunopsis.dwg.cmd.e.h(e.java) at com.sunopsis.dwg.cmd.e.g(e.java) 版权所有?江苏金智科技股份有限公司,保留所有权利。第8 页,共13 页 版权所有 ? 江苏金智科技股份有限公司,保留所有权利。 第 9 页,共 13 页 at com.sunopsis.dwg.cmd.e.y(e.java) at com.sunopsis.dwg.DwgJv.treatCmd(DwgJv.java) at com.sunopsis.dwg.DwgJv.main(DwgJv.java) ? 错误原因:Agent 还未正确配置。Agent 的配置需要改动以下三点:JDBC 驱动、创建 工资资料库时填写实例DB/LINK 的填写、 ODIPARAMS 的参数设置 ? 解决办法:针对以上三点依次解决 2.8 临时对象无法创建问题 ? 错误描述:创建接口时先使用了Oracle to Oracle (DBLINK )的KM ,接口执行过后换用KM ,重新执行时报错: 错误代码: 955 : 42000 : java.sql.SQLException: ORA-00955: name is already used by an existing object java.sql.SQLException: ORA-00955: name is already used by an existing object …… ?错误原因:先前使用的Oracle to Oracle(DBLINK)的KM,在数据库中保留了同义词, 换用KM 之后导致命名冲突。 ?解决方法:检索数据库,查找synonyms文件下同义词文件,手动删除。 2.9SQL server 2005 JDBC 问题 ?错误描述:在SQL server 2005上做CDC时,用的是原来SQL server 2000的JDBC驱动,执行时出错: 版权所有?江苏金智科技股份有限公司,保留所有权利。第10 页,共13 页 版权所有 ? 江苏金智科技股份有限公司,保留所有权利。 第 11 页,共 13 页 ? sql server 2005 报错代码: 8009 : HY000 : java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 1 (\\\"\\\"): 数据类型 0x38 未知。 ? 错误原因: SQL server 2000的JDBC 驱动在SQL server 2005上不能用,需要下载更新SQL server 2005的JDBC 驱动。 ? 解决方法: (1) 首先,到ODI 安装目录\drivers 目录下删除原来的SQL Server 2000 JDBC 驱动,一共四个: 版权所有 ? 江苏金智科技股份有限公司,保留所有权利。 第 12 页,共 13 页 (2) 下载Microsoft SQL Server 2005 JDBC Driver ,解压缩,将驱动复制到刚才的\drivers 目录下。 (3) 在ODI 的Toplogy 定义数据服务器中修改JDBC 驱动程序和URL 。 2.10Linux下代理无法发布的问题 ?错误描述:在Linux上将代理发布为服务不成功,代理没有自动启动。一切步骤正常,在etc/rc.d下也可以看服务应经启动,但是代理仍然没有启动。 ?错误原因:自己在etc/init.d下写的脚本没有执行权限。 ?解决办法:到etc/init.d下把自己写的代理脚本授予执行权限。 版权所有?江苏金智科技股份有限公司,保留所有权利。第13 页,共13 页 3ODI对中文命名支持情况 版权所有?江苏金智科技股份有限公司,保留所有权利。第14 页,共13 页 4常见数据库系统连接URL示例 ?Oracle数据库 oracle.jdbc.driver.OracleDriver url:jdbc:oracle:thin:@[IP]:[端口]:[SID] 例如:jdbc:oracle:thin:@172.168.18.20:1521:orcl ?SQL Server数据库 com.microsoft.jdbc.sqlserver.SQLServerDriver url:jdbc:microsoft:sqlserver://[IP]:[端口];DatabaseName=[库名] 例如:jdbc:microsoft:sqlserver://172.18.14.20:1433;DatabaseName=pubs ?MySQL数据库 com.mysql.jdbc.Driver jdbc:mysql://172.18.14.50:3306/student?user=root$password=wiscom ?DB2数据库 com.ibm.db2.jcc.DB2Driver dbc:db2://localhost:50000/sample ?Sybase数据库 com.sybase.jdbc2.jdbc.SybDriver jdbc:sybase:Tds:localhost:5007/myDB 版权所有?江苏金智科技股份有限公司,保留所有权利。第15 页,共13 页