La ruta típica que toman nuestros clientes cuando integran sus datos de Oracle® y SQL Server es utilizar Oracle® Heterogeneous Services con nuestro controlador ODBC de SQL Server. Este enfoque se describe en nuestro tutorial DG4ODBC.
Un método alternativo es usar el bcp
herramienta incluida en la distribución del controlador ODBC de SQL Server junto con Oracle® SQL*Loader
. Puede usar una canalización con nombre como conducto de datos entre bcp
y SQL*Loader
es decir, no necesita usar bcp
para escribir los datos de SQL Server en un archivo físico y luego usar este archivo como fuente de datos para SQL*Loader
(aunque puedes hacerlo si lo prefieres).
- Cree algunos datos de muestra en 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>
- Cree una tabla en Oracle® para almacenar los datos de SQL Server:
SQL> create table bcptest (c1 int, c2 varchar(20))
- Cree una canalización con nombre:
$ mknod /tmp/bcp-pipe p
- Cree y complete un
SQL*Loader
archivo de control:$ cat /tmp/bcp.ctl load data append into table bcptest fields terminated by "\t" ( c1, c2 )
- Ejecutar
SQL*Loader
en segundo plano, donde quedará esperando que lleguen los datos:$ cd /u01/app/oracle/product/11.2.0/xe/bin $ ./sqlldr myuser/password data=/tmp/bcp-pipe control=/tmp/bcp.ctl &
- Usar
bcp
para escribir en la canalización:$ cd /usr/local/easysoft/sqlserver/bcp/ $ ./bcp test.dbo.bcptest out /tmp/bcp-pipe -c -S myserver:1433 -U sa -P password
El SQL*Loader
proceso lee datos de la tubería, inserta los registros en Oracle® y 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 &
Los registros ahora están en Oracle®, como lo muestra la siguiente consulta en SQL*Plus
:
$ ./sqlplus SQL> select * from bcptest; C1 C2 ---------- -------------------- 1 Hello 2 World