SQLServerガイドデータはOracleになります.

5642 ワード

SQLServerからOracleに行くには、次のような方法があります.
  • は、SSMSの導出データガイドを用いて、Microsoft ODBC for OracleまたはOracle Provider for One DBを用いてOracle
  • に接続されている.
  • は、プレーンファイル
  • に導出される.
  • は、データを含むSQLスクリプトを導出する.
  • はETLツールを使用する.
  • 自分でソフトウェアを開発します.
  • 以下、第2の方法を用いてデータの移動を行う.
    BCPを使用して大容量データを適切に導出する.ここで千万レベルのデータをエクスポートしても、すぐに成功します.
    エクスポートする場合は、複数のテーブル関連、文字処理など、より複雑な論理が必要です.保存プロセスを作成し、BCPは直接にメモリプロセスを起動しても良いです.
    BCP "exec TestDB.dbo.export_t1 " queryout d:\export\t1.txt -c -t"||" -S"192.168.1.100" -Urpt -Prpt123
    pause
    USE TestDB
    GO
    
    CREATE PROC [dbo].[export_usercar]
    AS
        SELECT  [carId]
               ,CONVERT(NVARCHAR(30), [addTime], 120)
               ,CONVERT(NVARCHAR(30), [lastSearchTime], 120)
               ,CONVERT(NVARCHAR(30), [updateTime], 120)
               ,[carType]
               ,[userTelephone]
               ,[isCorrect]
               ,[userId]
               ,[validFlag]
               ,[Channel]
               ,[carCode]
               ,[engineNumber]
               ,[carNumber]
        FROM    [TestDB].[dbo].[t1] WITH ( NOLOCK )
        WHERE   validFlag = 1
                AND isCorrect = 1;
    CentOSの下など、Oracleのホストにエクスポートファイルをアップロードします.
    OracleのSQL*LOADERを使って平面ファイルを導入します.Oracleに作成済みのテーブルがあれば、導入ファイルに対応します.
    以下の内容をviでimport-t.1.ctlに書きます.
    load data
    CHARACTERSET 'ZHS16GBK'
    infile '/data/import/t1.txt' "str '\r
    '" into table SCOTT.T1 fields terminated by '||' TRAILING NULLCOLS ( carId, addTime DATE "YYYY-MM-DD HH24:MI:SS", lastSearchTime DATE "YYYY-MM-DD HH24:MI:SS", updateTime DATE "YYYY-MM-DD HH24:MI:SS", carType , userTelephone , isCorrect , userId , validFlag , Channel , carCode , engineNumber , carNumber )
    SQL*LOADERを使っていくつかの問題に注意します.
  • 文字コード
  • フィールドセパレータ
  • 行終了符
  • 日付または時間フォーマット
  • 特殊文字
  • フィールドを導入する順序
  • ガイドファイルのテーブルフィールドタイプと長さは適切ですか?
    sqlldrコマンドを使って、データをOracleに導入します.
    sqlldr user/"user_password" control=import-t1.ctl
    デフォルトで作成したログファイルは現在のディレクトリの下にあります.成功するかどうかにかかわらず、必ず日誌を調べます.導入が成功したり失敗したり、部分的に成功したりしますか?導入された問題は普通ログファイルから見つけられます.
    エラーがあると、導入ファイルと同名のt1.badファイルが生成されます.
    以下はログファイルで、データ導入のいくつかの情報を表示します.1895032行の記録の導入に成功しましたが、導入失敗の記録はありませんでした.
    [oracle@ttoracle /data/import]$ cat import-t1.log 
    
    SQL*Loader: Release 11.2.0.1.0 - Production on Fri Jun 15 12:46:09 2018
    
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    
    Control File:   import-t1.ctl
    Character Set ZHS16GBK specified for all input.
    
    Data File:      /data/import/t1.txt
      File processing option string: "str '
    '"
      Bad File:     t1.bad
      Discard File:  none specified
     
     (Allow all discards)
    
    Number to load: ALL
    Number to skip: 0
    Errors allowed: 50
    Bind array:     64 rows, maximum of 256000 bytes
    Continuation:    none specified
    Path used:      Conventional
    
    Table SCOTT.T1, loaded from every logical record.
    Insert option in effect for this table: INSERT
    TRAILING NULLCOLS option in effect
    
       Column Name                  Position   Len  Term Encl Datatype
    ------------------------------ ---------- ----- ---- ---- ---------------------
    CARID                               FIRST     *           CHARACTER            
        Terminator string : '||'
    ADDTIME                              NEXT     *           DATE YYYY-MM-DD HH24:MI:SS
        Terminator string : '||'
    LASTSEARCHTIME                       NEXT     *           DATE YYYY-MM-DD HH24:MI:SS
        Terminator string : '||'
    UPDATETIME                           NEXT     *           DATE YYYY-MM-DD HH24:MI:SS
        Terminator string : '||'
    CARTYPE                              NEXT     *           CHARACTER            
        Terminator string : '||'
    USERTELEPHONE                        NEXT     *           CHARACTER            
        Terminator string : '||'
    ISCORRECT                            NEXT     *           CHARACTER            
        Terminator string : '||'
    USERID                               NEXT     *           CHARACTER            
        Terminator string : '||'
    VALIDFLAG                            NEXT     *           CHARACTER            
        Terminator string : '||'
    CHANNEL                              NEXT     *           CHARACTER            
        Terminator string : '||'
    CARCODE                              NEXT     *           CHARACTER            
        Terminator string : '||'
    ENGINENUMBER                         NEXT     *           CHARACTER            
        Terminator string : '||'
    CARNUMBER                            NEXT     *           CHARACTER            
        Terminator string : '||'
    
    
    Table SCOTT.T1:
      18495032 Rows successfully loaded.
      0 Rows not loaded due to data errors.
      0 Rows not loaded because all WHEN clauses were failed.
      0 Rows not loaded because all fields were null.
    
    
    Space allocated for bind array:                 214656 bytes(64 rows)
    Read   buffer bytes: 1048576
    
    Total logical records skipped:          0
    Total logical records read:      18495032
    Total logical records rejected:         0
    Total logical records discarded:        0
    
    Run began on Fri Jun 15 12:46:09 2018
    Run ended on Fri Jun 15 12:55:58 2018
    
    Elapsed time was:     00:09:48.90
    CPU time was:         00:03:37.62
    平面ファイルを使ってデータを移動します.最大の迷惑は特殊文字です.またはゴミデータがあります.元のデータに文字区切りと同じ文字が含まれている場合、この中の「𞓜𞓜」や、エコーや改行などの見えない文字があります.これらの文字は導入時にフィールドを分割してビットがずれ、導入エラー、データガイドが不完全になり、インポートに失敗します.
    しかし、エクスポートから導入する速度は一番速くて、平面ファイルは異なるデータベースにまたがって移動できます.データが紛失を容認しないなら、ツールでしか導き出せませんが、速度は比較的遅いです.