• 締切済み

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 の形式で行っています。

  • Oracle
  • 回答数2
  • ありがとう数2

みんなの回答

  • uresiiwa
  • ベストアンサー率45% (49/107)
回答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ライセンスが要りますが)

  • nora1962
  • ベストアンサー率60% (431/717)
回答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

  • 順序の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のimp-00002エラーについて

    こんにちは shohei3728と申します。 会社にてoracleのシステムの一部を担当している者です。 現在、顧客先に導入しているシステムにて、エラーが発生し困っております。 知恵をお借りしたくこちらに相談させて頂きます。 具体的には下記の現象が発生しております。 ----------------------------------------------------------- バッチ処理にて下記のoracleのimportを行うと下記のエラーが発生しました。 imp user/password@sid file=filename full=y imp-00002:読み取り用のfilenameのopenに失敗しました。 インポート・ファイル:EXPDAT.DMP > ----------------------------------------------------------- また、現状わかっている内容は以下になります。 ・ファイルはバッチと同じ階層にあり、パスが間違っている事はありませんでした。 ・oracle9i cl と oracle 10g express editionの同居 ・windows XP(32bit) 遠方の顧客なため、実際のコンソールを操作する事は難しいです。 (現状わかっている情報は顧客に電話にて操作して貰った内容になります。) 質問内容のレベルは低いかもしれませんが、顧客先にてトラブルが発生しているため、 藁をも掴む思いで書かせて頂いています。 当方の技術レベルもそこまで高くないので、噛み砕いてご助言いただければ幸いです。 ご教授の程、よろしくお願い致します。

  • 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ユーザーの移行にはどのしたらいいのでしょうか?

  • インポートについて

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

  • オラクルのインポートについて

    はじめまして。 12時前に質問したのですが、私の質問がWebから 見えないので、心配になってもう一度登録しています。 質問ですが、オラクルのDBサーバー移行作業を 3日前から進めているのですが、テーブルの インポートが出来なくて困っています。 インポート時のエラーは以下の通りです。 --------------------------------------------- C:\Temp>imp user/user@test file=C:\Temp\imp.dat log=C:\Temp\TBCIXBA.imp tables=tablename Import: Release 9.2.0.1.0 - Production on 金 Jun 18 11:43:46 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 接続先: Oracle9i Release 9.2.0.1.0 - Production JServer Release 9.2.0.1.0 - Production エクスポート・ファイルはEXPORT:V09.02.00によって従来型パス経由で作成されました IMP-00013: DBAのみ別のDBAがエクスポートしたファイルをインポートできます。 IMP-00000: エラーが発生したためインポートを終了します。 --------------------------------------------- お忙しいところすいませんが、手を貸して下さい。 失礼します。

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

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

  • 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の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」で作成されています。 以上です。 ご教授のほどよろしくお願いいたします。

  • Oracleで空きがあるのにimportできない

    4年程前から稼動しているLinuxシステム(Oracle8i使用)があります。そのシステムでexpしたデータを、別のサーバ(同じくOracle8i)にimpしたいのですが、エラーになってしまいます。 IMP-00003: ORACLE error 1237 encountered ORA-01237: cannot extend datafile 1 ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf' ORA-19502: write error on file "/u01/app/oracle/oradata/orcl/system01.dbf", bloc kno 202993 (blocksize=8192) ORA-27072: skgfdisp: I/O error Linux Error: 9: Bad file descriptor Additional information: 202993 Import terminated successfully with warnings. いろいろ調べたら SYSTEM にデータを入れるのは良くないということがわかりましたが、このサーバは本番サーバではないので表の中身を select で見れれば十分なので、このままの構成で行かれればと思います。 ディスク容量が不足しているようですが、DBA Studio で調べてみると、SYSTEM 1,608,576KB(1,570MB)中、800,992KB(782MB)使用中と表示されます。 imp したいファイルは 158,880KB(155.2MB)なので空き容量の部分に余裕で入ると思うのですが、データファイルを拡張しようとしているみたいです。 df コマンドの出力は /dev/sda6 2909420 2745980 15644 99% /u01 となり、確かにパーティションの空き容量はないのですが、SYSTEM領域の残り800MBの部分にはインポートできないのでしょうか。