sql >> Database teknologi >  >> RDS >> Oracle

Indsættelse af SQL Server-data med Oracle® SQL*Loader

Den typiske rute, vores kunder tager, når de integrerer deres Oracle®- og SQL Server-data, er at bruge Oracle® Heterogeneous Services med vores SQL Server ODBC-driver. Denne tilgang er beskrevet i vores DG4ODBC tutorial.

En alternativ metode er at bruge bcp værktøj inkluderet i SQL Server ODBC driver distribution sammen med Oracle® SQL*Loader . Du kan bruge et navngivet rør som datakanalen mellem bcp og SQL*Loader dvs. du behøver ikke bruge bcp at skrive SQL Server-dataene til en fysisk fil og derefter bruge denne fil som datakilde for SQL*Loader (selvom du kan, hvis du foretrækker det).

  1. Opret nogle eksempeldata i 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. Opret en tabel i Oracle® til at indeholde SQL Server-dataene:
    SQL> create table bcptest (c1 int, c2 varchar(20))
    
  3. Opret en navngivet pipe:
    $ mknod /tmp/bcp-pipe p
    
  4. Opret og udfyld en SQL*Loader kontrolfil:
    $ cat /tmp/bcp.ctl
    
    load data
     append
     into table bcptest
     fields terminated by "\t"
     ( c1, c2 )
    
  5. Kør SQL*Loader i baggrunden, hvor den vil blive ved med at vente på, at data ankommer:
    $ cd /u01/app/oracle/product/11.2.0/xe/bin
    $ ./sqlldr myuser/password data=/tmp/bcp-pipe control=/tmp/bcp.ctl &
    
  6. Brug bcp for at skrive til røret:
    $ cd /usr/local/easysoft/sqlserver/bcp/
    $ ./bcp test.dbo.bcptest out /tmp/bcp-pipe -c -S myserver:1433 -U sa -P password
    

SQL*Loader processen læser data fra røret, indsætter posterne i Oracle® og afslutter:

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

Posterne er nu i Oracle®, som vist ved følgende forespørgsel i SQL*Plus :

$ ./sqlplus

SQL> select * from bcptest;

        C1 C2
---------- --------------------
         1 Hello
         2 World

  1. Sådan bruger du indekser til at forbedre MySQL-forespørgselsydeevnen

  2. Oprettelse af en elevdatabase med Microsoft Access

  3. MySQL - Denne version af MySQL understøtter endnu ikke 'LIMIT &IN/ALL/ANY/SOME underforespørgsel

  4. Hvordan får jeg det aktuelle tidszonenavn i Postgres 9.3?