A rota típica que nossos clientes fazem ao integrar seus dados Oracle® e SQL Server é usar o Oracle® Heterogeneous Services com nosso driver ODBC do SQL Server. Essa abordagem é descrita em nosso tutorial DG4ODBC.
Um método alternativo é usar o
bcp
ferramenta incluída na distribuição do driver ODBC do SQL Server em conjunto com o Oracle® SQL*Loader
. Você pode usar um pipe nomeado como o canal de dados entre bcp
e SQL*Loader
ou seja, você não precisa usar bcp
para gravar os dados do SQL Server em um arquivo físico e, em seguida, usar esse arquivo como fonte de dados para SQL*Loader
(embora você possa se preferir). - Crie alguns dados de exemplo no SQL Server:
$ cd /usr/local/easysoft/unixodbc/bin $ ./isql.sh -v SQLSERVER_SAMPLE +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> create table bcptest (c1 int, c2 varchar(20)) SQLRowCount returns -1 SQL> insert into bcptest values (1, 'Hello'),(2,'World') SQLRowCount returns 2 SQL> select * from bcptest +------------+---------------------+ | c1 | c2 | +------------+---------------------+ | 1 | Hello | | 2 | World | +------------+---------------------+ SQLRowCount returns -1 2 rows fetched SQL>
- Crie uma tabela no Oracle® para armazenar os dados do SQL Server:
SQL> create table bcptest (c1 int, c2 varchar(20))
- Crie um pipe nomeado:
$ mknod /tmp/bcp-pipe p
- Crie e preencha um
SQL*Loader
arquivo de controle:$ cat /tmp/bcp.ctl load data append into table bcptest fields terminated by "\t" ( c1, c2 )
- Execute o
SQL*Loader
em segundo plano, onde permanecerá aguardando a chegada dos dados:$ cd /u01/app/oracle/product/11.2.0/xe/bin $ ./sqlldr myuser/password data=/tmp/bcp-pipe control=/tmp/bcp.ctl &
- Usar
bcp
para gravar no pipe:$ cd /usr/local/easysoft/sqlserver/bcp/ $ ./bcp test.dbo.bcptest out /tmp/bcp-pipe -c -S myserver:1433 -U sa -P password
O
SQL*Loader
processo lê os dados do pipe, insere os registros no Oracle® e termina:$ SQL*Loader: Release 11.2.0.2.0 - Production on Fri Nov 4 07:18:53 2016 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. -bash-4.1$ Commit point reached - logical record count 2 [1]+ Done ./sqlldr myuser/mypassword data=/tmp/bcp-pipe control=/tmp/bcp.ctl &
Os registros agora estão no Oracle®, conforme mostrado pela consulta a seguir em
SQL*Plus
:$ ./sqlplus SQL> select * from bcptest; C1 C2 ---------- -------------------- 1 Hello 2 World