Pessoal,

Olha o que achei, estava procurando algumas coisas no google.
Achei a pergunta feita na Oracle_Br do Yahoo! sobre acessar informações entre Oracle e MS SQL Server, na íntegra (com correção ortográfica)! Detalhe para a data: 13/06/2007!

Segue abaixo o questionamento e a minha resposta:

Dúvida:
On 6/13/07, marcio_pelarin wrote:
> Bom dia !
>
> É possível acessar informações do MS_SQL_Server 2000 de dentro do
> Oracle e, estando os bancos em servidores diferentes numa mesma rede??
> Se for possível alguém tem exemplo ou algum tutorial de como realizar
> este acesso?
> Utilizo o Oracle 10.2.0.1.0 64 Bits em ambiente MS_Windows_2003 Server.
> Grato,
> Márcio

Resposta:

Marcio,
Eu andei fazendo isso, só que de versões diferentes de MS Sql Server e Oracle, só que esbarrei em um problema, somente conseguia fazer do MS SQL SERVER para o ORACLE, e não o contrario, pois o contrario
necessita de uma ferramenta da própria Oracle.
A conexão do SQL SERVER com ORACLE foi feita via LINKED SERVER.
Abaixo mais detalhes:

Título : Como criar um LINKED SERVER acessando o ORACLE.
Autor : Fernando Franquini (# = Meus comentários sobre o documento do Nilton Pinheiro)
Data : 30/06/2006
Fonte : http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=494758&SiteID=21

Abaixo informações do Nilton Pinheiro (http://www.mcdbabrasil.com.br) retiradas do link forums.microsoft.com.


Segue um exemplo de como criar o LINKED SERVER com uma instancia Oracle.

To create a linked server to access an Oracle database instance

1) Ensure the Oracle client software on the server running SQL Server is at the level required by the provider. The Microsoft OLE DB Provider for Oracle requires Oracle Client Software Support File version 7.3.3.4.0 or later, and SQL*Net version 2.3.3.0.4.
# Como já havia uma instalação do Oracle XE neste computador, os clients do Oracle ja estavam instalados.

2) Create an SQL*Net alias name on the server running SQL Server that points to an Oracle database instance. For more information, see the Oracle documentation.
# Já estavam criadas as configurações padrão para acessar o Oracle XE local, foram alteradas adicionando as informações, conforme esta mostrando abaixo:

#ALTERANDO tnsnames.ora
#XE_CAPIN =
# (DESCRIPTION =
# (ADDRESS = (PROTOCOL = TCP)(HOST = 172.19.34.120)(PORT = 1521))
# (CONNECT_DATA =
# (SERVER = DEDICATED)
# (SID = XE)
# )
# )
#
#Conforme dados retirados do servidor de destino.

3) Execute sp_addlinkedserver to create the linked server, specifying MSDAORA as provider_name, and the SQL*Net alias name for the Oracle database instance as data_ source. This example assumes that an
SQL*Net alias name has been defined as OracleDB.

#sp_addlinkedserver ‘OrclDB’, ‘Oracle’, ‘MSDAORA’, ‘OracleDB’ (DEFAULT DO EXEMPLO)
# ‘OrclDB’ = NOME DO LINKED SERVER, MANTIVE O MESMO, MAS PODE SER ALTERADO COFORME NECESSIDADE.
# ‘Oracle’ = SERVIDOR DESTINO, MANTIVE O MESMO.
# ‘MSDAORA’ = SERVIDOR ORIGEM, MANTIVE O MESMO.
# ‘OracleDB’ = ALTERADO PARA ‘XE_CAPIN ‘ CONFORME FOI CONFIGURADO NO tnsnames.ora (ACIMA)

sp_addlinkedserver ‘OrclDB’, ‘Oracle’, ‘MSDAORA’, ‘XE_CAPIN ‘

4) Use sp_addlinkedsrvlogin to create login mappings from SQL Server logins to Oracle logins. This example maps the SQL Server login Joe to the linked server defined in Step 3 using the Oracle login and
password OrclUsr and OrclPwd:

#sp_addlinkedsrvlogin ‘OrclDB’, false, ‘Joe’, ‘OrclUsr’, ‘OrclPwd’ (DEFAULT DO EXEMPLO)
# ‘OrclDB’ = NOME Do LINKED SERVER REGISTRADO ACIMA
# ‘Joe’ = USUARIO LOCAL DO SQL SERVER, NO MEU CASO ‘ciram’
# false = MANTIVE o MESMO
# ‘OrclUsr’ = ALTERADO PARA O USUARIO ‘system’, MAS PODE SER QUALQUER OUTRO, COFORME NECESSIDADE e PRIVILEGIOS EXIGIDOS
# ‘OrclPwd’ = ALTERADO PARA A SENHA DO USUARIO ‘******’

sp_addlinkedsrvlogin ‘OrclDB’, false, ‘ciram’, ‘system’, ‘******’

Each Oracle database instance has only one catalog with an empty name. Tables in an Oracle linked server must be referenced using a four-part name of the form OracleLinkedServerName..OwnerUserName.TableName. For
example, this SELECT statement references the table SALES owned by the Oracle user MARY in the server mapped by the OrclDB linked server:

# SELECT * FROM OrclDB..MARY.SALES (DEFAULT DO EXEMPLO)

SELECT * FROM OrclDB..CORP.USUARIO;
INSERT INTO OrclDB..CORP.USUARIO VALUES (4,’Fernando’);
#Ok! FUNCIONANDO.

— Acabou aqui o documento!

Após esta etapa de criação do LINKED SERVER tem-se que criar uma procedure, uma trigger ou uma função para preencher as tabelas do Oracle, tendo como origem os dados do SQL Server.

Abaixo um exemplo de uma função, retirada do mesmo fórum, feita por Daniel Teixeira.


1) Consultar Oracle e Preencher SQl Server através de linked Server, realmente aplicável através do exemplo abaixo:

Com uma função:

CREATE FUNCTION ConsultaOracle(@depatamento int) RETURNS TABLE
AS RETURN (SELECT * FROM OPENQUERY(OracleLinkedServ,’select * from oradb..SCOTT.departamento WHERE deptno
= @depatamento’)

1.1)SELECT * into tabelasql FROM ConsultaOracle(10)

1.2)SELECT * into tabelasql FROM OPENQUERY(OracleLinkedServ,’select * from oradb..SCOTT.departamento WHERE deptno = 20′)

2) Preencher Oracle consultando o SQL.

Acredito que a melhor técnica seja usando o DTS se for o SQL Server 2000 ou SSIS se for 2005.

Ambiente criado para os testes:

Server1 (Origem): SQL Server Express (FREE v. e Instalação FULL) e Oracle Express Edition (FREE) ambos em um Windows 2000 Professional.

Server2 (Destino): Oracle Express Edition (FREE) em um Windows XP

– Versão do Oracle Express Edition:
Oracle Database 10g Express Edition Release 10.2.0.1.0 – Beta
PL/SQL Release 10.2.0.1.0 – Beta
CORE 10.2.0.1.0 Beta
TNS for 32-bit Windows: Version 10.2.0.1.0 – Beta
NLSRTL Version 10.2.0.1.0 – Beta

– Versão do SQL Server Express
Microsoft SQL Server Management Studio Express 9.00.2047.00
Microsoft Data Access Components (MDAC) 2000.081.9053.00
Microsoft MSXML 2.6 3.0 4.0 6.0
Microsoft Internet Explorer 6.0.2800.1106
Microsoft .NET Framework 2.0.50727.42
Operating System 5.0.2195

O que eu pensei na época era criar uma procedure e atualizar uma tabela no Oracle, mas como as minhas informações não eram de locais fixos, eram muito variadas não resolveu assim e a solução encontrada foi via aplicar mesmo, fazendo acesso as duas bases diferentes via ODBC, pois estava sendo desenvolvido um sistema para fazer os acessos, ai foi resolvido assim.

Espero ter ajudado.

— Aqui acabou! 😀

sem mais,
capin