Oracle®とSQLServerのデータを統合する際にお客様が採用する一般的なルートは、SQLServerODBCドライバーでOracle®HeterogeneousServicesを使用することです。このアプローチは、DG4ODBCチュートリアルで説明されています。
別の方法は、 bcp
を使用することです。 Oracle®SQL* Loader
と組み合わせてSQLServerODBCドライバー配布に含まれるツール 。 bcp
間のデータコンジットとして名前付きパイプを使用できます およびSQL* Loader
つまり、 bcp
を使用する必要はありません SQL Serverデータを物理ファイルに書き込み、このファイルを SQL * Loader
のデータソースとして使用します。 (必要に応じて可能ですが)
- SQLServerでサンプルデータを作成します。
$ 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>
- SQL Serverデータを保持するためにOracle®でテーブルを作成します:
SQL> create table bcptest (c1 int, c2 varchar(20))
- 名前付きパイプを作成します:
$ mknod /tmp/bcp-pipe p
-
SQL * Loader
を作成してデータを入力します 制御ファイル:$ cat /tmp/bcp.ctl load data append into table bcptest fields terminated by "\t" ( c1, c2 )
-
SQL * Loader
を実行します バックグラウンドで、データの到着を待機し続けます:$ cd /u01/app/oracle/product/11.2.0/xe/bin $ ./sqlldr myuser/password data=/tmp/bcp-pipe control=/tmp/bcp.ctl &
-
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 &
SQL * Plus
の次のクエリで示されているように、レコードはOracle®にあります。 :
$ ./sqlplus SQL> select * from bcptest; C1 C2 ---------- -------------------- 1 Hello 2 World