De typische route die onze klanten volgen bij het integreren van hun Oracle®- en SQL Server-gegevens is het gebruik van Oracle® Heterogene Services met onze SQL Server ODBC-driver. Deze aanpak wordt beschreven in onze DG4ODBC-zelfstudie.
Een alternatieve methode is om de bcp
. te gebruiken tool opgenomen in de SQL Server ODBC-stuurprogrammadistributie in combinatie met Oracle® SQL*Loader
. U kunt een named pipe gebruiken als datakanaal tussen bcp
en SQL*Loader
d.w.z. u hoeft bcp
. niet te gebruiken om de SQL Server-gegevens naar een fysiek bestand te schrijven en dit bestand vervolgens te gebruiken als gegevensbron voor SQL*Loader
(hoewel je dat wel kunt als je dat liever hebt).
- Maak enkele voorbeeldgegevens 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>
- Maak een tabel in Oracle® om de SQL Server-gegevens op te slaan:
SQL> create table bcptest (c1 int, c2 varchar(20))
- Maak een named pipe:
$ mknod /tmp/bcp-pipe p
- Maak en vul een
SQL*Loader
control-bestand:$ cat /tmp/bcp.ctl load data append into table bcptest fields terminated by "\t" ( c1, c2 )
- Voer
SQL*Loader
uit op de achtergrond, waar het blijft wachten tot de gegevens arriveren:$ cd /u01/app/oracle/product/11.2.0/xe/bin $ ./sqlldr myuser/password data=/tmp/bcp-pipe control=/tmp/bcp.ctl &
- Gebruik
bcp
om naar de pijp te schrijven:$ cd /usr/local/easysoft/sqlserver/bcp/ $ ./bcp test.dbo.bcptest out /tmp/bcp-pipe -c -S myserver:1433 -U sa -P password
De SQL*Loader
proces leest gegevens uit de pijp, voegt de records in Oracle® in en beëindigt:
$ 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 &
De records bevinden zich nu in Oracle®, zoals blijkt uit de volgende query in SQL*Plus
:
$ ./sqlplus SQL> select * from bcptest; C1 C2 ---------- -------------------- 1 Hello 2 World