ODI 执行到Insert flow into I$ table步骤报错
先贴错误:
12154 : 66000 : java.sql.SQLException: ORA-12154: TNS: 无法解析指定的连接标识符
java.sql.SQLException: ORA-12154: TNS: 无法解析指定的连接标识符
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_rows(T4CPreparedStatement.java:633)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1086)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2984)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3057)
at com.sunopsis.sql.SnpsQuery.executeUpdate(SnpsQuery.java)
at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execStdOrders(SnpSessTaskSql.java)
at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)
at com.sunopsis.dwg.dbobj.SnpSessTaskSqlI.treatTaskTrt(SnpSessTaskSqlI.java)
at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java)
at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java)
at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java)
at com.sunopsis.dwg.cmd.DwgCommandSession.treatCommand(DwgCommandSession.java)
at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)
at com.sunopsis.dwg.cmd.e.i(e.java)
at com.sunopsis.dwg.cmd.g.y(g.java)
at com.sunopsis.dwg.cmd.e.run(e.java)
at java.lang.Thread.run(Unknown Source)
下面是执行出错的步骤:
以下是该步骤的SQL语句:
/* DETECTION_STRATEGY = NOT_EXISTS */
insert /*+ APPEND */ into ODITRG.I$_EMP
(
EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,IND_UPDATE
)
select
C1_EMPNO EMPNO,
C2_ENAME ENAME,
C3_JOB JOB,
C4_MGR MGR,
C5_HIREDATE HIREDATE,
C6_SAL SAL,
C7_COMM COMM,
C8_DEPTNO DEPTNO,
'I' IND_UPDATE
from ODITRG.C$_0EMP
where (1=1)
and not exists (
select 'X'
from ODITRG.EMP T
where T.EMPNO = C1_EMPNO
and ((C2_ENAME = T.ENAME) or (C2_ENAME IS NULL and T.ENAME IS NULL))
and ((C3_JOB = T.JOB) or (C3_JOB IS NULL and T.JOB IS NULL))
and ((C4_MGR = T.MGR) or (C4_MGR IS NULL and T.MGR IS NULL))
and ((C5_HIREDATE = T.HIREDATE) or (C5_HIREDATE IS NULL and T.HIREDATE IS NULL))
and ((C6_SAL = T.SAL) or (C6_SAL IS NULL and T.SAL IS NULL))
and ((C7_COMM = T.COMM) or (C7_COMM IS NULL and T.COMM IS NULL))
and ((C8_DEPTNO = T.DEPTNO) or (C8_DEPTNO IS NULL and T.DEPTNO IS NULL))
)
我是按照官方的教程进行的实验
数据库是oracle 11g Enterprise Edition Release 11.2.0.1.0 ODI 是10.1.3.5
我的两个数据服务器都是建立在一个主机上,使用的实例也是相同的,如下图:
我按照教程一步一步走的 其他的都和教程上的几乎一样,在网上看过一些问题的解决方法,都试过了 不行
数据库正常启动,无论是别人连我的库 还是我连其他机器的数据库 我的ORACLE却是重装过 不过都能正常连上。
DB LINK 也只有一个(开始的时候有2个,后来出现这个问题 我改过本机的HOSTNAME,删除了以前的那个DB_LINK 可以依然是这个问题)
这个是DB LINK的查询结果:
ODITRG ORCL.LOOPBACK SCOTT orcl.LOOPBACK 25-6月 -12
小弟才学习ODI ,处于新手阶段,ODI相关资料又很少,再次诚请各位高手解决问题,不甚感激...
[解决办法]
建 dblink 的问题,同一数据库 dblink使用的连接串一定要与oracle server上tnsname.ora中定义的一致。
在 ODIORG 用户下执行以下语句重建dblink。
-- Drop existing database link
drop database link ORCL.LOOPBACK;
-- Create database link
create database link ORCL.LOOPBACK
connect to SCOTT identified by tiger
using 'orcl';--orcl换成你本地的连接串即可。