sql >> データベース >  >> RDS >> Oracle

Oracle®SQL*Loaderを使用したSQLServerデータの挿入

    Oracle®とSQLServerのデータを統合する際にお客様が採用する一般的なルートは、SQLServerODBCドライバーでOracle®HeterogeneousServicesを使用することです。このアプローチは、DG4ODBCチュートリアルで説明されています。

    別の方法は、 bcpを使用することです。 Oracle®SQL* Loaderと組み合わせてSQLServerODBCドライバー配布に含まれるツール 。 bcp間のデータコンジットとして名前付きパイプを使用できます およびSQL* Loader つまり、 bcpを使用する必要はありません SQL Serverデータを物理ファイルに書き込み、このファイルを SQL * Loaderのデータソースとして使用します。 (必要に応じて可能ですが)

    1. 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>
      
    2. SQL Serverデータを保持するためにOracle®でテーブルを作成します:
      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 &
    

    SQL * Plus の次のクエリで示されているように、レコードはOracle®にあります。 :

    $ ./sqlplus
    
    SQL> select * from bcptest;
    
            C1 C2
    ---------- --------------------
             1 Hello
             2 World
    

    1. ユーザー設定のためのデータベース設計

    2. SQLServerの「intをデータ型numericに変換する算術オーバーフローエラー」を修正しました

    3. MySQLiプリペアドステートメントエラーレポート

    4. SQLのスキーマとは何ですか?それを作成する方法は?