Oracle Enterprise Managerでの表のインポート

このQ&Aのポイント
  • Oracle Enterprise Managerを使用して表をエクスポートし、削除してからインポートする際にデータが戻らないエラーが発生します。ログにはORA-39111エラーが表示されており、オブジェクトの依存関係が原因であることが分かります。
  • ORA-39111エラーは、Data Pumpインポートジョブの実行中に依存オブジェクトがスキップされるため、ベースオブジェクトが既に存在するという理由で発生します。解決方法としては、ベースオブジェクトと依存オブジェクトを削除し、適切なフィルタを使用してインポートを再試行することです。
  • 以上のエラーを解決するためには、Oracle Enterprise Managerでインポートジョブを設定し、オブジェクトの依存関係をクリアしてから再度実行する必要があります。
回答を見る
  • ベストアンサー

【oracle10g 】Oracle Enterprise Managreでの表のインポート

資格取得の為に、体験版を操作しながら勉強しています。Oracle Enterprise Managreで、表をエクスポートし、一度表を削除(truncate)して、インポートしようとしています。 画面上、インポートは正しく行われているみたいですが、データが戻ってません。 ログには ORA-39111: Dependent object type TABLE_STATISTICS skipped, base object type TABLE:"TOSHIHIRO"."PERSON" already exists Job "TOSHIHIRO"."IMPORT000252" completed with 2 error(s) at 20:11 と、あります。 ネットで検索すると、以下を見つけましたが、具体的にどのような処理をすれば良いのかわかりません。 ORA-39111: 依存オブジェクト型stringはスキップされ、ベース・オブジェクト型stringはすでに存在します。 原因: ベース・オブジェクトがすでに存在するため、Data Pumpインポート・ジョブの実行中に依存オブジェクトがスキップされています。 処置: ダンプ・ファイルからのオブジェクトを必要とする場合は、ベース・オブジェクトと依存オブジェクトを削除し、適切なフィルタを使用してインポートを再試行してください。 よろしくお願いします。

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

No.1でも書いたのですがimpdpコマンドのパラメータでTABLE_EXISTS_ACTIONがあります。 TABLE_EXISTS_ACTION=APPENDで表が存在してもインポートすることが可能です。(デフォルトは通常SKIP) 資格取得の為の勉強なら、oracleのマニュアルを参照されたほうが良いと思います。 OTN(参考URL参照、要ユーザ登録(無料))でマニュアルがダウンロードできるので、見てはどうでしょうか?

参考URL:
http://otn.oracle.co.jp/

その他の回答 (1)

回答No.1

EMなどからインポートしたことが無いので間違えているかも知れませんが、インポートする場合にインポートするテーブルが存在すると、デフォルトではエラー(スキップ)になります。 truncateではデータが切り捨てられますが、テーブルは残ったままです。 これが原因ではないでしょうか? テーブルを削除(drop table PERSON purge)などをしてから行えばできると思います。 #コマンドだとTABLE_EXISTS_ACTIONパラメータがあるんですが・・・。

tosshi_1978
質問者

お礼

表を削除するとインポートできました。 表が残ったままだとインポートできないのですね。 表を残したままインポートするコマンド等はありますでしょうか? ありがとうございました。

関連するQ&A

  • datapumpの実行方法について

    いつもお世話になっております。 datapumpの実行方法(expdp/impdp)について、ご存知の方がいらっしゃいましたら、ご教授の程お願い致します。 ------------------------------ ●環境  Oracle 11g (11.2.0.3) 以下の手順で、エクスポート/インポート テストを行ったのですが、 expdpで"tables"を指定するとエラーとなり実行できませんでした。 full=y(データベース全体)は動きました。 tablesで指定するものは、"CREATE TABLE"で作成したテーブル名ではないのでしょうか。 また、テーブルスペースを削除"drop tablespace tbl01"したのですが、 expdpでデータベース全体をエクスポートしたものから、impdpしても 削除したものが戻せませんでした。 impdpのコマンドに誤りがあるのでしょうか。 ●expdp実行 ----- ・tablespace作成 $ sqlplus / as sysdba SQL> create tablespace tbl01 datafile '+data/testdb/datafile/tblsp1' size 10m autoextend off; ----- ・sequence作成 SQL> create sequence seq1; ----- ・TABLE作成 SQL> CREATE TABLE TEST_TBL(USER_ID VARCHAR2(8) NOT NULL, DEPT_NO VARCHAR2(8)) tablespace tbl01; ----- ・INSERT実行(5件分) begin for i in 1..5 loop INSERT INTO TEST_TBL (USER_ID, DEPT_NO) VALUES (seq1.nextval, '1234') ; commit; end loop; end; / ----- ・expdp使用する為の準備 ディレクトリの作成と read/write 権限の付与 $ sqlplus / as sysdba SQL> create directory expdp_dir as '/u01/tpump'; SQL> grant read,write on directory expdp_dir to system; ----- ・expdb実行 $ expdp system/pass dumpfile=TEST_DIR:expdp_all.dmp logfile= TEST_DIR:expdp_all.log full=y ===== "SYSTEM"."SYS_EXPORT_FULL_01"を起動しています: system/******** dumpfile=TEST_DIR:expdp_all.dmp logfile= full=y BLOCKSメソッドを使用して見積り中です... オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATAの処理中です -中略- SYSTEM.SYS_EXPORT_FULL_01に設定されたダンプ・ファイルは次のとおりです: /u01/tpump/expdp_all.dmp ジョブ"SYSTEM"."SYS_EXPORT_FULL_01"が11:31:19で正常に完了しました ===== $ expdp system/pass tables=TEST_TBL dumpfile=TEST_DIR:expdp_tbl.dmp logfile= TEST_DIR:expdp_tbl.log ===== "SYSTEM"."SYS_EXPORT_TABLE_01"を起動しています: system/******** tables=TEST_TBL dumpfile=TEST_DIR:expdp_tbl.dmp logfile= BLOCKSメソッドを使用して見積り中です... BLOCKSメソッドを使用した見積り合計: 0 KB ORA-39166: オブジェクトSYSTEM.TEST_TBLが見つかりません。 ORA-31655: ジョブに対してデータまたはメタデータ・オブジェクトが選択されていません ジョブ"SYSTEM"."SYS_EXPORT_TABLE_01"が完了しましたが、2エラーが11:33:54で発生しています ===== ●impdp実行 $ impdp system/pass dumpfile=TEST_DIR:expdp_all.dmp logfile= TEST_DIR:impdp_all.log ===== マスター表"SYSTEM"."SYS_IMPORT_FULL_01"は正常にロード/アンロードされました "SYSTEM"."SYS_IMPORT_FULL_01"を起動しています: system/******** dumpfile=expdp_dir:expdp_all.dmp logfile= full=y オブジェクト型DATABASE_EXPORT/TABLESPACEの処理中です ORA-31684: オブジェクト型TABLESPACE:"UNDOTBS1"はすでに存在します ORA-31684: オブジェクト型TABLESPACE:"TEMP"はすでに存在します ORA-31684: オブジェクト型TABLESPACE:"USERS"はすでに存在します ORA-39083: オブジェクト型TABLESPACEの作成が次のエラーで失敗しました: ORA-01119: データベース・ファイル'+DATA/testdb/datafile/tblsp1'の作成中にエラーが発生しました。 ORA-17502: ksfdcre:4 ファイル+DATA/testdb/datafile/tblsp1の作成に失敗しました ORA-15005: name "testdb/datafile/tblsp1" is already used by an existing alias -中略- ※以下のORAエラーが多数発生 例:ORA-31684: オブジェクト型TABLESPACE:"UNDOTBS1"はすでに存在します 例:ORA-39151: 表"SYSTEM"."REPCAT$_PRIORITY_GROUP"が存在します。スキップのtable_exists_actionのため、すべての依存メタデータおよびデータはスキップされます 例:ORA-39111: 依存オブジェクト型OBJECT_GRANT:"SYSTEM"はスキップされ、ベース・オブジェクト型VIEW:"SYSTEM"."SCHEDULER_PROGRAM_ARGS"はすでに存在します -中略- オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/REF_CONSTRAINTの処理中です オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICSの処理中です オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/POST_TABLE_ACTIONの処理中です オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/TRIGGERの処理中です オブジェクト型DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCACT_SCHEMAの処理中です オブジェクト型DATABASE_EXPORT/AUDITの処理中です ジョブ"SYSTEM"."SYS_IMPORT_FULL_01"が完了しましたが、146エラーが20:14:48で発生しています =====

  • データのインポートについて

    インポートしようとしたところ以下のエラーが表示されました。 「IMP-00003: Oracleエラー942が発生しました ORA-00942: 表またはビューが存在しません。 IMP-00023: インポート・ビューがインストールされていません。DBAに連絡してください」 サイトで検索してもあまり情報が載ってなく、困り果ててます。どなたかアドバイスお願い致します。

  • 既にテーブルが存在する場合のインポート

    インポート対象のテーブルが既に存在する場合、次のエラーが発生します。 IMP-00015: オブジェクトがすでに存在するため次の文は失敗しました: "CREATE TABLE ... SQL Loaderではデータにスペースや改行が含まれているとdatの作成がめんどうですし、dmpファイルでcreate文を削除するようなこともできればしたくありません。 データを追記したいのでテーブルを削除せずにインポートしたいのですが、どうすればよいでしょうか?

  • [MySQL]LOAD DATA INFILE一部レコードがスキップさ

    [MySQL]LOAD DATA INFILE一部レコードがスキップされてしまう。 いつもお世話になっております。selfesteemです。 今回はMySQLについての質問です。 仕事である機関が提供するデータをMySQLで扱うのですが、上手くいかなくて困っています。 テキスト形式での提供で、読み込み用スクリプトが付属していました。 LOAD DATA LOCAL INFILE "ファイル名" INTO TABLE "テーブル名" ~ で読み込むのですが、一部の行がスキップされてしまいます。 Query OKとは出てきているのですが、すべてのレコードがどうしてもインポートできず、 Skipped: ~ のようにスキップされた旨のメッセージが表示されています。 いろいろ試行錯誤してみたのですが、どこに問題があるのかいまいちつかめないでいます。 このLOAD DATA INFILE~で読み込む場合にスキップされるケースというのはどのような場合が考えられるのでしょうか? また、何行目がスキップされたのかや、スキップされた理由を詳しく調べることはできますでしょうか? 無知ですみませんが、本当に困っているので教えていただけると助かります。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • SQL*Loaderで「オブジェクトが存在しない」というエラーが出ます

    SQL*Loaderでデータをインサートしたいのですが、 オブジェクトがあるのに、 「SQL*Loader-941: 表~の記述中にエラーが発生しました。 ORA-04043: オブジェクト~は存在しません。」というエラーが出力されます。 何が原因なのでしょうか? すみませんが教えて下さい!お願いします!

  • Oracle Database 10g Express Editionを使いたい

    と思いDLしてインストールして SQLPLUSで ユーザ:usr1 パスワード:psswd1 でOracleに入り SQL> CREATE TABLE "PROJECT" ( "ID" NUMBER NOT NULL ENABLE, "PJNAME" VARCHAR2(100) NOT NULL ENABLE, CONSTRAINT "PROJECT_PK" PRIMARY KEY ("ID") ENABLE ) / 2 3 4 5 6 表が作成されました。 SQL> describe project; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER PJNAME NOT NULL VARCHAR2(100) SQL> とテーブルを作り以下のJavaアプリを作り実行しましたが 動きませんでした。getConnectionの引数の "jdbc:oracle:thin:@localhost:1521:ORCL" の中のORCLの部分に何を入れてよいのか分からなかったので 根拠なしにORCLを使ったのが悪かったと思います。 ORCLの部分には何を入れたらいいのでしょうか? package pack; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JdbcTest { public static void main(String args[]) throws SQLException,ClassNotFoundException { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","usr1","psswd1"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select ip,pjname from project"); while (rset.next()) { System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } rset.close(); stmt.close(); conn.close(); } } エラー:Exception in thread "main" java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was: localhost:1521:ORCL

    • ベストアンサー
    • Java
  • Oracle 10g standardへのJDBC接続にてDataba

    Oracle 10g standardへのJDBC接続にてDatabaseMetaData.getTablesメソッドが上手く機能しません。 以下のコードにてOracleに接続してテーブル一覧をコンソールに表示したいのですがgetTables()メソッドで返されるResultSetの中身が無い(レコードが0行)ようです。 プログラム内に記述した接続情報(URL、スキーマ、カタログ、ユーザー、パスワード)でNaviCatから当該Oracleに接続すると問題なくテーブルなどが表示される事は確認済みです。 また同じプログラムで別に用意したOracle 10g Expressを接続先として設定すると問題なくコンソールにテーブル名一覧が表示されます。 プログラムに使用しているドライバはOracle 10g Expressの中に同梱されていたojdbc14.jarです。 これでは standard 版へは正常にメソッドが機能しないケースがあるのでしょうか? どうぞ宜しくお願いします。 import java.sql.*; public class OracleConTest { public static void main(String[] args) { try{ // ドライバクラスをロード Class.forName("oracle.jdbc.driver.OracleDriver"); // データベースへ接続 Connection con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:XXXX", "XXXXUSR", "XXXXPWD"); // ステートメントオブジェクトを生成 DatabaseMetaData meta = con.getMetaData(); ResultSet rs = meta.getTables( "XXXX", "XXXX", null, new String[] {"TABLE"}); while (rs.next()) { String tableName = rs.getString("TABLE_NAME"); System.out.println(tableName); } rs.close(); }catch( Exception e){ e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • 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 参照用ユーザー作成

    Oracle 9i で新規で参照専用のユーザーを作成しています。 が、うまく作成できなかったため質問したいと思います。 現在、下記のようなデータベース、ユーザー名となっています。 データベース :A ユーザー :A これに対して、以下のユーザーを作成しました。 ユーザー :B ロール :CONNECT システム権限 :select any table execute any procedure この状態で、データベースAに対してユーザーBへ接続はできますが、 SELECT文を実行しても、”ORA-00942:表またはビューが存在しません”メッセージが表示されます。 そこで、BのロールをDBAにしたり、オブジェクト権限に、データベースAの表に対して 使用可能な権限としてSELECTを指定したりしたのですが、やはり同様のメッセージが表示されました。 データベースAの表を見れていない状況だと思うのですが、どのように、Aの表を参照するよう 設定してやるのかがわかりません。 何が不足しているのかご教授下さい。 よろしくお願い致します。

  • サーバーの移行について(エクスポートとインポート)

    ご覧頂きありがとうございます。 サーバーの移行がうまくいかず困っているのでご質問させていただきます。 やりたいことは、本サーバーにあるOracleデータベースのデータをエクスポートして、開発環境にインポートさせようと思っています。 以下、行った作業です。 windowsのコマンドプロンプトから以下のコマンドを実行してエクスポート C:\>emp sadmin/password@sid file=C:\ora_data\empsid.dmp consistent=y owner=sadmin 開発環境にて、表領域の作成とユーザの作成、権限の付与を行う。 SQL>CREATE TABLESPACE HOGE datafile 'C:\temp\HOGE1.dbf' size 800M reuse logging online segment space management auto; SQL>CREATE TEMPORARY TABLESPACE HOGE_TEMP tempfile 'C:\temp\HOGE_TEMP1.dbf' size 800M extent management local uniform size 10M; SQL>CREATE USER sadmin IDENTIFIED BY hogehoge DEFAULT TABLESPACE HOGE TEMPORARY TABLESPACE HOGE_TEMP QUOTA UNLIMITED ON HOGE; SQL>GRANT DBA TO sadmin; GRANT IMP_FULL_DATABASE TO sadmin; 以下のコマンドを実行して、windowsのコマンドプロンプトからインポート。 C:\>imp sadmin/password@sid file=C:\ora_data\empsid.dmp log=C:\ora_data\impsid.log fromuser=sadmin touser=sadmin ignore=y 状況としましては、エクスポートは問題なく終了しています。(確信はありませんが(汗)) インポート実行時、トリガーの箇所だと思うのですが処理が止まってしまいインポートが完了しません。 画面上では、「制約を使用可能にします・・」と表示されて止まってしまいます。 ログには以下のようなエラーが出ています。 IMP-00003: Oracleエラー439が発生しました。 ORA-00439: 機能は有効ではありません: Partitioning IMP-00041: 警告: オブジェクト作成の際、コンパイル・エラーが発生しました。 DBを見てみると、データのインポートはできているようなのですが、トリガーのインポートができていないみたいです。 当方Oracleを触るのは初めてで、書籍やGoogle検索などで調べているのですが、原因解明できず途方にくれています。 どなたかご助言頂けないでしょうか? 宜しくお願いします。