SQLServerガイドデータはOracleになります.
5642 ワード
SQLServerからOracleに行くには、次のような方法があります.は、SSMSの導出データガイドを用いて、Microsoft ODBC for OracleまたはOracle Provider for One DBを用いてOracle に接続されている.は、プレーンファイル に導出される.は、データを含むSQLスクリプトを導出する. はETLツールを使用する. 自分でソフトウェアを開発します. 以下、第2の方法を用いてデータの移動を行う.
BCPを使用して大容量データを適切に導出する.ここで千万レベルのデータをエクスポートしても、すぐに成功します.
エクスポートする場合は、複数のテーブル関連、文字処理など、より複雑な論理が必要です.保存プロセスを作成し、BCPは直接にメモリプロセスを起動しても良いです.
OracleのSQL*LOADERを使って平面ファイルを導入します.Oracleに作成済みのテーブルがあれば、導入ファイルに対応します.
以下の内容をviでimport-t.1.ctlに書きます.文字コード フィールドセパレータ 行終了符 日付または時間フォーマット 特殊文字 フィールドを導入する順序 ガイドファイルのテーブルフィールドタイプと長さは適切ですか?
sqlldrコマンドを使って、データをOracleに導入します.
エラーがあると、導入ファイルと同名の
以下はログファイルで、データ導入のいくつかの情報を表示します.1895032行の記録の導入に成功しましたが、導入失敗の記録はありませんでした.
しかし、エクスポートから導入する速度は一番速くて、平面ファイルは異なるデータベースにまたがって移動できます.データが紛失を容認しないなら、ツールでしか導き出せませんが、速度は比較的遅いです.
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
平面ファイルを使ってデータを移動します.最大の迷惑は特殊文字です.またはゴミデータがあります.元のデータに文字区切りと同じ文字が含まれている場合、この中の「𞓜𞓜」や、エコーや改行などの見えない文字があります.これらの文字は導入時にフィールドを分割してビットがずれ、導入エラー、データガイドが不完全になり、インポートに失敗します.しかし、エクスポートから導入する速度は一番速くて、平面ファイルは異なるデータベースにまたがって移動できます.データが紛失を容認しないなら、ツールでしか導き出せませんが、速度は比較的遅いです.