sql >> Base de Datos >  >> RDS >> Oracle

Inserción de datos de SQL Server con Oracle® SQL*Loader

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

  1. 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>
    
  2. Cree una tabla en Oracle® para almacenar los datos de SQL Server:
    SQL> create table bcptest (c1 int, c2 varchar(20))
    
  3. Cree una canalización con nombre:
    $ mknod /tmp/bcp-pipe p
    
  4. 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 )
    
  5. 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 &
    
  6. 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