何となく歩いた結果

デジカメを持って色々な場所に出没し撮影した写真を公開。最近は東京の夜と里山をメインテーマに撮影中。システム開発の話題も。

SQL Server との格闘

2007-05-30 14:23:14 | ソフトにまつわる話
最近、色々なデータベースと格闘している。Oracle、Access、MySQLそして今回はSQL Serverだ。

Oracleから10万件~60万件を超えるデータをSQL Serverに移行を行っている。
テーブルフォーマットはほぼ同じ。
最初は、Enterprise Managerのインポート機能を使ってOracleからSQL Serverにデータ変換を行った。前に実行した時には全く問題が無かったが今回は途中で異常終了してしまった。データ中にエラーがあるのだろうか。
メッセージの意味が良くわからないし、仮にそのエラーデータを修正してもその先に同じようなエラーがあれば再度やり直しになるだろう。
今後もテストで何度か行う作業なので別の方法を考えたほうが良いかもしれない。

次に変換用のアプリケーションをAccessで開発してみた。ODBC接続でOracleに接続をして全件取得のSQL文(select * from テーブル名)を発行した後に、ODBC接続でSQL Serverに接続したテーブルに1件ずつレコードを書込みを行う。
100件ずつ画面に処理メッセージを表示して進行状況を確認できる。どこまで進んだか一目瞭然でなかなか良い………でも遅い!あたりまえだけど…orz
3時間実行して5万件しか処理できていない。

CSVに出力してインポート、という手も考えた。これなら上の方法よりは早いかもしれない。

でも、とりあえずAccessにOracleのテーブルを全てインポートしてみる事にした。専用線を介してOracleサーバと接続されているので処理速度が遅いが4時間ちょっとでインポートは終了した。Accessのファイル(mdb)は700MB近くになっている。
この容量でもテーブルの終端までのスクロールやクエリは結構早い。なかなかAccessもやるではないか。見直したぜ。

次にSQL Serverへの変換。追加クエリを作って実行すると…
SQL ServerはLAN環境にあるが、これもかなりの速さでインポートしている。
さすがに60万件のデータは途中で「メモリエラー」というのが表示されたので、データの登録日でクエリを何個かに分割して実行したら正常に終了した。

作業開始から5時間近くかかったけど、データセンターで直接インポートしてくれば移動時間を考えてももっと早いかも。

データベースについて専門的に教わったことが無いので表面的にしか知らないが、データ移行についてはなかなか詳しくなってきた(自信過剰…)データ移行とかでお悩みな方は相談に乗りますよ。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする