Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

etspaz

problema com linked server entre sql server com oracle

Recommended Posts

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:

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:

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:

 

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:

 

# CRC
CRCPR1 =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = crcpr1)

    )

  )

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

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:

 

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].

Compartilhar este post


Link para o post
Compartilhar em outros sites

etspaz

 

Existem tipos de dados no SQL Server que são diferentes do ORACLE mesmo. Acredito que somente convertendo a coluna no join irá resolver o seu problema, pois você está fazendo uma seleção que envolve dados de ambos.

 

[]'s

 

Fernando Silveira

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.