• 締切済み
  • 困ってます

OracleのIMPについて

Oracle8iからOracle11gへのIMPについて教えてください。 現在、Oracleデータを8iから11gに移す作業を行っているのですが、特定のテーブルのみIMPの時間がかかっています。 4000万件のデータのIMPは1時間くらいで終わりますが特定のテーブルはデータ量が400万件にもかかわらず4時間くらいかかります。 原因等ありますでしょうか? ちなみに、IMPは、 imp XXXX/XXXX@XXXX file=TEST.DMP tables = TESTTABLE log = d:\test.log commit = Y ignore = Y の形式で行っています。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数7526
  • ありがとう数2

みんなの回答

  • 回答No.2

移行元が8iだからデータパンプは使えないんですね。 impだと時間がかかりますね。 テーブルサイズは、件数で決まるものではなく、「レコード件数×レコード長」なので、 4000万件のテーブルよりも400万件のテーブルのほうがデータ量で上回っていてもおかしくはないです。長大な文字列型を有していたり、列数が非常に多かったりなどすると、やはり時間はかかります。 対策1. 以下のパラメータを追加 recordlength=65535 buffer=20971520 (あと、commit=Nでもいいと思います) 対策2. もしDBがARCHIVE LOGモードであったならば、 インポート前に、DBをNO ARCHIVE LOGモードにし、インポート完了後にARCHIVE LOGモードに戻す。 (REDO書き出しもオーバヘッドになりますので) 他には、当該テーブルに多数(もしくは長大な)インデックスが定義されているか、トリガーが定義されていることが考えられます。 対策3. 当該テーブルのインデックスをDROPしておき、 以下のパラメータを追加してインポート。 indexes=N インポート完了後にcreate indexする。 対策4. (当該テーブルにトリガーが定義されていて、インポート時に起動しなくて良い場合) インポート前に、トリガー無効化 alter table 当該テーブル disable all triggers; インポート後にトリガー有効化 alter table XXXXX enable all triggers; こんなところかなと思います。 あとは、AWRを使ってそれぞれのインポート中の時刻をFROM・TOに指定して、レポーティングすると、何にどれだけ時間がかかったのか分かると思います。AWRはOracle Enterprise Managerから起動できますので、トライしてみると良いです。(Diagnostics Packライセンスが要りますが)

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 順序のEXP/IMPについて

    Oracle9i 9.2.0 テーブルのデータも権限もなく、順序のみをEXPしてIMPしたいのですが、どのようにしたらよいでしょうか? //EXP C:\oracle\ora92\bin\EXP.EXE ユーザ/パス@サービス file='C:\DB移行作業 \SEQUENCE_EXP.DMP' ROWS=N INDEXES=N TRIGGERS=N //IMP C:\oracle\ora92\bin\imp.exe toshi/toshi@grjctc2 file='DB移行作業\SEQUENCE_EXP.DMP' FEEDBACK=100000 IGNORE=Y ROWS=N INDEXES=N CONSTRAINTS=N ANALYZE=N TABLES=(住所テーブル) 上記で一応うまく登録されたようですが、 よくわかりません。 どなたかアドバイスお願いします。

  • Oracle の imp コマンドについて

    oracle(8.1.6) のフルダンプから、指定したテーブルのみDBにインポートする為、imp コマンドを使います。 ---------------------------------------------------------------- $imp (Enterキーを押す) 1. ユーザー名: userid 2. パスワード: ****** 接続: Oracle8i Enterprise Edition Release 8.1.6.1.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production 3. インポート・ファイル: expdat.dmp > ---------------------------------------------------------------- 3.行目のインポート・ファイルのところで、複数のファイルを指定したい場合はどうすればいいでしょうか。 expdat01,expdat02 (expdat01,expdat02) \(expdat01,expdat02\) expdat01.dmp,expdat02.dmp と色々試してみましたが、どれもうまく行きませんでした。 なお、impのコマンドに入ったあと、普通のコマンドプロンプトに戻る方法も教えて頂けないでしょうか。exit、bye、Ctrl+C のどれも試したが、出来ませんでした。 どうぞよろしくお願いいたします。

  • oracleのimpdpでORA-39166

    ORALCEのexpdpおよびimpdpの勉強のために自宅環境で操作していたところ、 impdpにてORA-39166(オブジェクトが見つからない)が発生してしまいした。 いろいろ調べてみたのですが、解決に至ってないためお力添えをお願いいたします。 【環境】 OS : linux ※CentOS(64bit) ORALCE11gXE 【やりたいこと】 studyスキーマのTEST1テーブルをexpdpでエクスポート(content=data_only)し、 同じスキーマ内のTEST2テーブルにimpdpにてデータを入れる。 【発生までの操作】 1.expdp system/パスワード@XE directory=test_dir tables=study.TEST1 log=test_exp.log content=data_only 2.impdp system/パスワード@XE directory=test_dir dumpfile=expdat.dmp log=test_imp.log tables=study.TEST2 content=data_only 2の操作をしたタイミングで以下のメッセージ。 ORA-39002: invalid operation ORA-39166: Object STUDY.TEST2 was not found. 【備考】 ・TEST1およびTEST2はまったく同じテーブル構造です。studyユーザで作成してます。 ・STUDY.TEST2は存在します。 (「sqlplus study/パスワード@XE」でログインしdesc TEST2で確認できるため) ・exdpは正常に終了しており、dumpファイルは「expdat.dmp」で作成されています。 以上です。 ご教授のほどよろしくお願いいたします。

  • 回答No.1

IMPは基本的に「CREATE TABLE」「CREATE INDEX」してから「INSERT」が実行されます。 INDEXの数が多いと処理時間がかなりかかります。 EXPする際に必要なINDEXの作成情報(DDL)を取得しておいて、 ・INDEX削除 ・テーブル単位でEXP DIRECT=Y を実行 ・IMP (BUFFERサイズを調整 windowsでの最大は不明だが20MBで実行した例があった) http://norainu.net/mt/archives/2005/07/oracleexpimpbuf.html  COMMITはYでいいと思います。 ・データの格納がすんだら「CREATE INDEX」を行う。参考になるのは http://www.insight-tec.com/mailmagazine/ora3/vol186.html alter system set "_pga_max_size"=バイト数;(隠しパラメータ 10g以降で有効かは不明) alter session set workarea_size_policy = MANUAL; alter session set sort_area_size = バイト数;  でINDEX作成セッションのソートメモリを増やして実行。 てな、感じでやってみてはいかがでしょうか?

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • インポートについて

    初歩的な質問ですみません・・・ ユーザモードでエクスポートした [ data.dmp ] があるのですが、このデータを、同じユーザが作成されている別のデータベースに、インポートしたいと思っています。その時、 [ data.dmp ] にある全テーブルのデータを(テーブルの作成と合わせて)インポートしたいのですが、 IMP USERID=****/**** FILE=user.dmp LOG=imp.log FULL=y IGNORE=y で大丈夫でしょうか? 「FULL」というパラメータが良く分かっていません。「全体をインポート」「全ファイルをインポート」という説明があったのですが、「全部」とは何を意味しているのか良く理解できていません。 よろしくお願いします。

  • imp コマンドに関して

    OS:winXp オラクル バージョン:10.2 ◎作業 1.testユーザをexpでバックアップ(BK1.dmp)を作成しました。 2.testユーザのテーブルのレコードを変更、削除追加などを行う 3.testユーザにimpでバックアップ(BK1.dmp)を行ったところ『一意制約エラーが発生します』のエラーが出ます。 (1)そのままのエラーだと思うのですが、この場合testユーザを再作成した方がいいのでしょうか? (2)1の状態に戻す方法が、他にもあるのでしょうか?

  • Oracle9iでのサーバー移行時のpublicユーザーの移行方法について

    移行元はOracle8iかOracle9i 移行先はOracle9iで、 EXP と IMP でデータの移行を行いたいのですが、 ●EXPの例 EXP TBL/TBL@SERVER FILE=E:\EXP_USER.DMP,FULL= Y,LOG=E:\EXP_USER.log ●IMPの例(AAAユーザーをインポートする) IMP TBL/TBL FILE=E:\EXP_USER.DMP LOG=E:\EXP_USER_COM.LOG FROMUSER=AAA TOUSER=AAA ROWS=YES しかしDATABASE LINKとSYNONYMはpublicユーザーで、 IMP文のAAAをPUBLICにしてもインポートされません。 ・PUBLIC DATABASE LINK データベースリンク ・PUBLIC SYNONYM publicユーザーの移行にはどのしたらいいのでしょうか?

  • oracle ダンプファイルのサイズとインポート先の表領域の使用サイズ

    oracle ダンプファイルのサイズとインポート先の表領域の使用サイズの関係 あるダンプファイル(2.5GB)をオラクルDBへimportしたら、 そのDBの表領域が10GBほど使用されました。 2.5GBのものをimportしたのに、なぜここまで表領域を消費するのでしょうか? (これまでこのようなことはありませんでした。) 表領域の使用サイズをもっと少なくするにはどうすればよいのでしょうか? エクスポート時のコマンド exp aaaa/aaaa file=bbbb.dmp log=exp_cccc.log consistent=y インポート時のコマンド imp aaaa/aaaa file=bbbb.dmp log=imp_cccc.log エクスポート時に「compress=n」をつけたり、 インポート時に「ignore=y」をつけたりしたのですが、 とくに変化はありませんでした。

  • フルインポートで警告が発生します

    はじめまして。 OracleDBをfull=yでエクスポートして(壊れる前のものをエクスポートしています) 新しくDBを作成して full=yでインポートすると警告が多数発生します。 以下の通りにバッチファイルを作成して実行しています。 ※exp.bat d:\oracle\ora92\bin\exp.exe system/xxx@xxx FULL=Y STATISTICS=NONE file=e:\exp.dmp log=e:\exp.log ※imp.bat D:\oracle\ora92\bin\imp.exe system/xxx@xxx commit=y IGNORE=y full=y file=e:\exp.dmp log=e:\imp.log 上記を実行すると下記の警告が複数発生します。 IMP-00017: 次の文は、Oracleエラー1919で失敗しました: IMP-00003: Oracleエラー1919が発生しました。 ORA-01919: ロール'SYS'は存在しません ORA-06512: "SYS.DBMS_RMIN", 行56 IMP-00061: 警告: オブジェクト型"SYSTEM"."REPCAT$_OBJECT_NULL_VECTOR"は、別の識別子ですでに存在します IMP-00019: Oracleエラー1により、行のインポートは拒否されました IMP-00003: Oracleエラー1が発生しました。 ORA-00001: 一意制約(SYSTEM.HELP_TOPIC_SEQ)に反しています OracleDBが壊れてしまい、戻そうとしても警告が出るので 現在はシステムバックアップを戻して対処しています。 出来れば、フルインポートでOracleを元に戻したいのです。 ご存知の方ご教示頂けないでしょうか。宜しくお願いします。

  • selectの単純繰り返し

    oracle11gで sqlplusで接続して、とあるテーブルのselectを100回繰り返したいのですが for文はどう書けばよいのでしょうか ↓selectはこんなのでOKです select * from testtable;

  • oracleの順序のexp/impにつて

    oracleの順序のEXP/IMPについてです。 oracle 11gでlinuxなのですが、別サーバ上にあるAというスキーマ(例:hon1)の シーケンスを、別サーバ上にあるBというスキーマ(例:dev1)に、expdp/impdp コマンドで、sequenceのみを、export/importをしようとしています。 expdpコマンドでsequenceのみはexportできたのですが、impdpコマンドで、sequence をimportするとエラーがでて失敗します。 SEQUENCEの処理はできるのですが、OBJECT_GRANTの作成でエラーで失敗します。 別環境の別スキーマに入れようとしているので、権限の作成で失敗するのは当たり前 かもしれませんが。 回避する方法、grantを実行しない方法はないのでしょうか。 また、表のimportみたいに、記述したテーブルのみをimportするような、ターゲットの sequenceのみをimportするような記述はできないのでしょうか。 宜しくお願い致します。 環境:oracle 11g、Linux

  • oracleのテーブルExportについて

    oracle10gを使用しております。 テーブルに億桁のレコードが登録してある場合、 テーブルExportを行うと時間がかかってしまう&出力dumpファイルが 大きくなってしまうといった弊害があると思うのですが、 テーブルレコードを数万単位に分割してExportすることは可能でしょうか? また、その分割したファイルをImportする際は、Export前と同じく 一つのテーブルでレコードを管理することが可能でしょうか。 大雑把な質問で申し訳ありませんが、宜しくお願いします。 また、今回Export時に使用するコマンドは以下になります。 exp スキーマ名/パスワード constraints=y grants=y indexes=y tables=テーブルA file= テーブルA.dmp log=テーブルA.log

  • importについて

    こんばんは。 exportしたダンプファイルを頂いたので oracleにimportしようと思っています。 色々調べて以下のようにわかったのですが、 間違っていないか、パラメータで追加した方が よいものがあれば、ご指摘お願いします。 1) 既に同じ内容のテーブルが存在するが、それは気にせずimportを行う。既存のテーブルデータは新しくimportするもので更新されている??? 2) SQL*PLUSでコマンドを叩く。 コマンド内容は以下の通り。 imp system/manager fromuser=test1 touser=test2 file=db_data.dmp log=implog.log test1 ← DBA権限あり。 test2 ← このユーザーの表領域にデータを作成したい。

  • oracle DMPファイルのインポートについて

    あるシステムのDB管理を行うにあたり、 Oracleを使用しているのですが、 Oracleのバージョンの違いにより、 DMPファイルのインポートが行えない事はございますでしょうか? 詳細は以下です。 ローカル環境のシステム Oracle 10g / 10.2.0.1.0 社内環境のシステム Oracle 11g / 11.2.0.1.0 社内環境システムよりバックアップを行い出力されたDMPファイルを ローカル環境へインポートを試みたところ、 以下のエラーが発生し、インポートができません。 ********************************************************** IMP-00058: Oracleエラー12154が発生しました。 ORA-12154: TNS: 指定された接続識別子を解決できませんでした IMP-00000: エラーが発生したためインポートを終了します。 ********************************************************** システムの構成はローカル環境、システム環境ともに同様です。 差異があるのはOracleのバージョンとなります。 基本的なご質問かもしれませんが ご教示頂けると大変助かります。 宜しくお願い申し上げます。