- PR -

「LOAD DATA INFILE」が失敗する要因は?

1
投稿者投稿内容
もけけ
会議室デビュー日: 2003/11/07
投稿数: 7
投稿日時: 2005-06-08 14:30
皆さんこんにちわ。
「LOAD DATA INFILE」が失敗するので、原因を探しています。

自分でも以下の質問の仕方は酷いと思うのですが、エラーが拾えないので
的を絞った質問を書けませんでした。
そこで、皆さんが「OAD DATA INFILE」を使用された時に、はまった失敗が
ありましたら、その内容と要因、対処方法を教えて頂ければ幸いです。

取り合えず、今の状況を簡単に説明させて頂きます。

【環境】
・solaris8 & MySQL

【やりたい事】
・同じDBが正副存在し、定期的に比較し、差分があれば解消します。
 解消とは、両DBともに内容を同じにする事。足りない情報があれば
 一方から、もう一方へデータを複写します。

【条件】
・ODBC/JDBC/DBD/DBI等をインストールしてはいけない環境なので、
 cronとshellで対処します。

【やっている事】
・cronでshellを定期的に起動し、一定期間内に更新されたレコードを
 両DBからSELECTし、Diffで差分を調査します。
・差分があれば、その内容のみを「SELECT * INTO OUTFILE」でファイル
 に出力し、その内容をもう一方のDBに「LOAD DATA INFILE」で書き込み
 ます。(←これが失敗している)
・「LOAD DATA INFILE」の成否は、再度DBを比較することで確認しています。

【備考】
・shellでは以下の様にSQLの書かれたテキストファイルを渡し、バッチ
 で処理しているのですが、エラーを拾えません。
 シェルでなく、コマンドラインからバッチ処理を実行した場合にも、
 処理結果は出力されませんでした。
(mysql user password db < spl-file >> errfile) >>& errfile
・shellからのバッチ処理に失敗した後に、時間を置いて、リトライする
 処理にしているのですが、同じロジック・ファイルなのに成功する場合
 もありますが殆どは失敗します。
・何故か、mysqlにログインした状態で、shell実行時に出力された
 「SELECT * INTO OUTFILE」のファイルを使用して、「LOAD DATA INFILE」
 を行なうと成功します。
・バッチのSQLの内容は以下になります。(別々のファイルに以下の
 内容が記述されています)
SELECT * INTO OUTFILE file FROM table WHERE ID = 'XXXXX' or ID = 'XXXXX' ....;
LOAD DATA INFILE file IGNORE INTO TABLE table;
1

スキルアップ/キャリアアップ(JOB@IT)