Array
(
)

problema ao criar linked server no sql server para oracle

Etspaz
   - 05 ago 2009

Boa tarde pessoal,

Estou precisando criar um linked server de um banco no sql server 2000 para o oracle 9i.
Seguindo alguns exemplos da net, fiz o sequinte:
#Código

EXEC sp_addlinkedserver ´CRC´,´Oracle´,´MSDAORA´,´IP SERVIDOR´
EXEC sp_addlinkedsrvlogin ´CRC2´, ´false´, NULL, ´USUARIO´, ´SENHA´


ele até cria, mas não funciona, quando tento acessar da o seguinte erro:
#Código
Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider ´MSDAORA´ reported an error.  
[OLE/DB provider returned message: ORA-12514: TNS:listener não conseguiu resolver o SERVICE_NAME fornecido no descitor de conexão
]
OLE DB error trace [OLE/DB Provider ´MSDAORA´ IDBInitialize::Initialize returned 0x80004005:   ].


segue a query de teste utilizada:

#Código
select * from CRC..CRCOW.TB_RECEITATRAFEGO 
WHERE UF = ´PA´ AND CICLO=´71´ AND COMPETENCIA = ´200904´ AND DTCHAM =´8/4/2009´
AND CSP = ´´ AND TARIFA=´CHAMADA LOCAL´ AND DIRECAO = ´MMO´ AND SENTIDO = ´S´
AND HORARIO=´N´ AND AREAORIGEM = ´PAH037´ AND PLANO = ´PLANO NAC6 100 MIN´ 
AND INDICADORFATURADO=´0´ AND VALORLIQUIDO=´0´ AND VALORBRUTO=´7,04´ 
AND DURACAOFRANQUEADA=´0´ AND DURACAOTARIFADA=´1326´ AND DURACAOREAL=´1272´
AND QUANTIDADE=15 AND INSERT_DT=´10/4/2009´ AND CONTA=´200904´


A configuração no tsnames.ora:

#Código
# CRC
CRCPR1 =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = ip servidor)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = crcpr1)

    )

  )


Etspaz
   - 05 ago 2009

consegui criar o linked server e acessar corretamente, seguindo o exemplo que encontrei num bolg:

#Código

EXEC sp_addlinkedserver
@server = ‘ORA’,
@srvproduct = ‘Oracle’,
@provider = ‘OraOLEDB.Oracle’,
@datasrc = ‘(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))’
GO


EXEC sp_addlinkedsrvlogin
@rmtsrvname = ‘ORA’,
@useself = ‘FALSE’,
@rmtuser = ‘orausr’,
@rmtpassword = ‘orapass’
GO


o exemplo usa o oracle xe, mas serviu para o 9i que é o que uso.
Porém, agora estou com um problema de conversão entre os tipos number do oracle.
Este problema já foi relatado pelo autor do exemplo, mas a solução que ele deu não me serve.
usar openquery e dar um to_char no campo number. mas preciso fazer join com uma tabela do sql server, aí ele reclama:

[tagcod]
Server: Msg 7356, Level 16, State 1, Line 1
OLE DB provider ´MSDAORA´ supplied inconsistent metadata for a column. Metadata information was changed at execution time.
OLE DB error trace [Non-interface error: Column ´QUANTIDADE´ (compile-time ordinal 13) of object ´´CRCOW´.´TB_RECEITATRAFEGO´´ was reported to have a DBTYPE of 130 at compile time and 5 at run time].