社内基幹システムのDBのデータを利用したシステムをphp+MySQLで作成しています。
「データを利用」と言っても直接基幹システムのDB(Oracle)に接続しにいかず、毎晩バッチ処理で一旦いくつかのテーブルをCSV出力&インポートして使用するという感じです。

ところがあるテーブルだけレコード数が膨大で、MySQLへのCSVインポートがうまくいきません。
php.iniでアップロードできるサイズの変更など試しましたが、1回でインポートは完了しませんでした。

そこで調べたところ「BigDump」という複数回にわけてインポートが自動実行されるソフトがあることを知りました。
ところがこれは、準備した「sqlファイル」が複数回に分けて実行されるというものでした。

sqlファイルを準備したいのですが、Oracleより特定のテーブルのみをsqlファイルとして
出力する方法などありますか?また、これでsqlファイルを生成したものは直接MySQLへのインポート用に使用可能でしょうか?

また、上記以外でも何かよい方法がありましたらご教示願います。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/01/01 15:36:35
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:taroe No.2

回答回数1099ベストアンサー獲得回数132

ポイント50pt

行数が30万件ほどあるCSVから、PHP経由でMysqlにデータを投入

行数が30万件ほどあるCSVから、PHP経由でMysqlにデータを投入しようとしています。
2000件ごとにファイルを分割し、再度各ファイルを読み込みなおして、insertしようと考えました。
http://okwave.jp/qa/q5930015.html

その他の回答1件)

id:degucho No.1

回答回数281ベストアンサー獲得回数75

ポイント50pt

CSVがすでにあるのでしたら10000行づつとかに切ってやればいいと思います
unix環境ならsplit、Windows環境ならsplit互換ツールか下記のようなソフトで
http://handcraft.blogsite.org/Memo/Article/Archives/258

CSVはどうやって出力しているのでしょうか。そこで分割制御できませんか?

SQLを作る場合はSQL*Plusで
SELECT 'INSERT INTO xxxx VALUES('''||COL1||''','',||COL2||''','''||・・・・
FROM xxxx WHERE ~ ORDER BY ~
の結果をSPOOLするとかで対応したりしますが・・・

id:taroe No.2

回答回数1099ベストアンサー獲得回数132ここでベストアンサー

ポイント50pt

行数が30万件ほどあるCSVから、PHP経由でMysqlにデータを投入

行数が30万件ほどあるCSVから、PHP経由でMysqlにデータを投入しようとしています。
2000件ごとにファイルを分割し、再度各ファイルを読み込みなおして、insertしようと考えました。
http://okwave.jp/qa/q5930015.html

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません