Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wstawianie danych SQL Server za pomocą Oracle® SQL*Loader

Typową drogą, którą wybierają nasi klienci podczas integracji danych Oracle® i SQL Server, jest korzystanie z usług Oracle® Heterogenous Services z naszym sterownikiem ODBC SQL Server. To podejście jest opisane w naszym samouczku DG4ODBC.

Alternatywną metodą jest użycie bcp narzędzie zawarte w dystrybucji sterowników ODBC SQL Server w połączeniu z Oracle® SQL*Loader . Możesz użyć nazwanego potoku jako kanału danych między bcp i SQL*Loader tzn. nie musisz używać bcp aby zapisać dane SQL Server w fizycznym pliku, a następnie użyć tego pliku jako źródła danych dla SQL*Loader (chociaż możesz, jeśli wolisz).

  1. Utwórz przykładowe dane w 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. Utwórz tabelę w Oracle® do przechowywania danych SQL Server:
    SQL> create table bcptest (c1 int, c2 varchar(20))
    
  3. Utwórz nazwany potok:
    $ mknod /tmp/bcp-pipe p
    
  4. Utwórz i wypełnij SQL*Loader plik kontrolny:
    $ cat /tmp/bcp.ctl
    
    load data
     append
     into table bcptest
     fields terminated by "\t"
     ( c1, c2 )
    
  5. Uruchom SQL*Loader w tle, gdzie będzie czekał na przybycie danych:
    $ cd /u01/app/oracle/product/11.2.0/xe/bin
    $ ./sqlldr myuser/password data=/tmp/bcp-pipe control=/tmp/bcp.ctl &
    
  6. Użyj bcp pisać do potoku:
    $ cd /usr/local/easysoft/sqlserver/bcp/
    $ ./bcp test.dbo.bcptest out /tmp/bcp-pipe -c -S myserver:1433 -U sa -P password
    

Program ładujący SQL* proces odczytuje dane z potoku, wstawia rekordy do Oracle® i kończy:

$ 
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 &

Rekordy znajdują się teraz w Oracle®, jak pokazano w następującym zapytaniu w SQL*Plus :

$ ./sqlplus

SQL> select * from bcptest;

        C1 C2
---------- --------------------
         1 Hello
         2 World

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 12c Autopopulacja kolumny z wartością sekwencji

  2. Porady dotyczące korzystania z tabeli przestawnej w Oracle

  3. Trzeba zresetować wartość sekwencji w Oracle

  4. Znaczenie bajtów dump(systimestamp) Oracle

  5. praca z json w Oracle