Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Inserindo dados do SQL Server com Oracle® SQL*Loader


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).
  1. 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>
    
  2. Crie uma tabela no Oracle® para armazenar os dados do SQL Server:
    SQL> create table bcptest (c1 int, c2 varchar(20))
    
  3. Crie um pipe nomeado:
    $ mknod /tmp/bcp-pipe p
    
  4. 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 )
    
  5. 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 &
    
  6. 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