Der typische Weg unserer Kunden bei der Integration ihrer Oracle®- und SQL Server-Daten ist die Verwendung von Oracle® Heterogeneous Services mit unserem SQL Server ODBC-Treiber. Dieser Ansatz wird in unserem DG4ODBC-Tutorial beschrieben.
Eine alternative Methode ist die Verwendung von bcp
Tool, das in der SQL Server ODBC-Treiberverteilung in Verbindung mit Oracle® SQL*Loader
enthalten ist . Sie können eine benannte Pipe als Datenleitung zwischen bcp
verwenden und SQL*Loader
d.h. Sie müssen bcp
nicht verwenden um die SQL Server-Daten in eine physische Datei zu schreiben und diese Datei dann als Datenquelle für SQL*Loader
zu verwenden (obwohl Sie können, wenn Sie es vorziehen).
- Erstellen Sie einige Beispieldaten in 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>
- Erstellen Sie eine Tabelle in Oracle®, um die SQL Server-Daten zu speichern:
SQL> create table bcptest (c1 int, c2 varchar(20))
- Erstellen Sie eine benannte Pipe:
$ mknod /tmp/bcp-pipe p
- Erstellen und füllen Sie einen
SQL*Loader
Steuerdatei:$ cat /tmp/bcp.ctl load data append into table bcptest fields terminated by "\t" ( c1, c2 )
- Führen Sie
SQL*Loader
aus im Hintergrund, wo es auf das Eintreffen von Daten warten wird:$ cd /u01/app/oracle/product/11.2.0/xe/bin $ ./sqlldr myuser/password data=/tmp/bcp-pipe control=/tmp/bcp.ctl &
- Verwenden Sie
bcp
um in die Pipe zu schreiben:$ cd /usr/local/easysoft/sqlserver/bcp/ $ ./bcp test.dbo.bcptest out /tmp/bcp-pipe -c -S myserver:1433 -U sa -P password
Der SQL*Loader
Der Prozess liest Daten aus der Pipe, fügt die Datensätze in Oracle® ein und beendet:
$ 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 &
Die Datensätze befinden sich nun in Oracle®, wie die folgende Abfrage in SQL*Plus
zeigt :
$ ./sqlplus SQL> select * from bcptest; C1 C2 ---------- -------------------- 1 Hello 2 World