Oracle
 sql >> база данни >  >> RDS >> Oracle

Вмъкване на данни от SQL Server с Oracle® SQL*Loader

Типичният път, по който нашите клиенти използват, когато интегрират своите Oracle® и SQL Server данни, е да използват Oracle® Heterogeneous Services с нашия SQL Server ODBC драйвер. Този подход е описан в нашия урок за DG4ODBC.

Алтернативен метод е да използвате bcp инструмент, включен в дистрибуцията на драйвери на SQL Server ODBC във връзка с Oracle® SQL*Loader . Можете да използвате наречена тръба като канал за данни между bcp и SQL*Loader т.е. не е необходимо да използвате bcp за да запишете данните на SQL Server във физически файл и след това да използвате този файл като източник на данни за SQL*Loader (въпреки че можете, ако предпочитате).

  1. Създайте примерни данни в 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. Създайте таблица в Oracle®, която да съхранява данните на SQL Server:
    SQL> create table bcptest (c1 int, c2 varchar(20))
    
  3. Създайте канал с име:
    $ mknod /tmp/bcp-pipe p
    
  4. Създайте и попълнете SQL*Loader контролен файл:
    $ cat /tmp/bcp.ctl
    
    load data
     append
     into table bcptest
     fields terminated by "\t"
     ( c1, c2 )
    
  5. Изпълнете SQL*Loader във фонов режим, където ще остане в очакване на пристигане на данните:
    $ cd /u01/app/oracle/product/11.2.0/xe/bin
    $ ./sqlldr myuser/password data=/tmp/bcp-pipe control=/tmp/bcp.ctl &
    
  6. Използвайте bcp за да запишете в канала:
    $ cd /usr/local/easysoft/sqlserver/bcp/
    $ ./bcp test.dbo.bcptest out /tmp/bcp-pipe -c -S myserver:1433 -U sa -P password
    

SQL*Loader процесът чете данни от канала, вмъква записите в Oracle® и прекратява:

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

Записите вече са в Oracle®, както е показано от следната заявка в 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. GTT таблица статистика и SYS.WRI$_OPTSTAT_TAB_HISTORY

  2. Възможно ли е да се запита колона, разделена със запетая, за конкретна стойност?

  3. Управление на обработката на грешки при изпълнение на sqlplus от скриптове на обвивката

  4. Създавайте PDF файлове с PLSQL в Oracle

  5. Извличане на списък с частни процедури/функции от тялото на пакета