• ベストアンサー
  • すぐに回答を!

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 ← このユーザーの表領域にデータを作成したい。

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

  • 回答数3
  • 閲覧数5183
  • ありがとう数4

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

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

>上記オプションで、既存のテーブルは古いデータが削除され、 ignore=yにしてもimpコマンドではデータの削除は行われません。 一意制約違反となります。 あらかじめ不要なデータは消しておきましょう。 truncate table テーブル名; でデータを切り捨てるのがいいかと。 >新規に増えたテーブルは >新規に作成(データ込み)と考えて正しいでしょうか? はい。こちらはこうです。

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

質問者からのお礼

お返事が遅くなってすいません。 アドバイス頂いたおかげで、成功しました。 ありがとうございました。

関連するQ&A

  • IMPORT処理速度 

    EXPORTされたダンプファイルをそのままIMPORTすると 数時間もかかってしまいます。(ORACLE9i)(エラーは出ません) 原因はあるテーブルの件数がかなりの件数に達しているためのようなのですが、IMPORT処理を速くする方法というのは何かあるのでしょうか? もしくはIMPORTする際にデータの範囲指定のようなことはできるのでしょうか?

  • 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 ダンプファイルのサイズとインポート先の表領域の使用サイズ

    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」をつけたりしたのですが、 とくに変化はありませんでした。

その他の回答 (2)

  • 回答No.2

>1) >既に同じ内容のテーブルが存在するが、それは気にせずimportを行う。 >既存のテーブルデータは新しくimportするもので更新されている??? 一意制約違反でエラーとなるでしょう。 あらかじめテーブルをdropしてあった場合は、インポート時にcreateされますが、レイアウトが違う場合は注意が必要です。 >2) >SQL*PLUSでコマンドを叩く。 >コマンド内容は以下の通り。 >imp system/manager fromuser=test1 touser=test2 file=db_data.dmp log=implog.log impはSQL*Plusのコマンドではありません。外部コマンドです。 Windowsであれば、コマンドプロンプトから実行してください。 テーブルをあらかじめdropしておかないのであれば、ignore=yを追加してください。 >大量の表がある場合、どのようにして削除するのが >よいでしょうか? drop table テーブル名1; drop table テーブル名2; ・ ・ と記述したテキストファイルを準備し、 SQL*Plusでファイル名を指定して実行すればよろしいかと。 >olacle7は間違いなく使えません。 使用可能なオプションは、 imp ユーザ名/パスワード help=y で表示されます。確認してください。

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

質問者からの補足

ありがとうございます。 >テーブルをあらかじめdropしておかないのであれば、 >ignore=yを追加してください。 上記のオプションを見てみたのですが、処理が続行される ことは分かりました。 やりたいこととしては、大量のテーブル&データがある状態で、最新のものを頂いたので、最新の状態にしたいと 思っています。 既存のテーブルも大量にあり、新規のものが少し混ざった 状態です。上記オプションで、既存のテーブルは古いデータが削除され、新しいデータが入った状態となり、新規に増えたテーブルは 新規に作成(データ込み)と考えて正しいでしょうか?

  • 回答No.1

1) 更新されずにエラーになると思います。 中身はInsert文なので。 2) olacleはtouser使えたっけ? olacle7は間違いなく使えません。

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

質問者からの補足

まず、表を削除しないといけないのですね。 この場合、test2のユーザーのスキーマに作成 されている表を削除することになると思うのですが、 大量の表がある場合、どのようにして削除するのが よいでしょうか?

関連するQ&A

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

  • インポートコマンドが認識されません

    環境は、windows2000プラットフォームに、oracle9iです。 上記環境に、初期データベースを作成し、エクスポートされたダンプファイル(もらいもの)をインポートしようとしたんですが以下メッセージが出力され、ダンプファイルの取り込みができません。 インポートの方法は、以下です。 imp system/xxxxx@SID file=xxx.dmp fromuser=xxx touser=xxx 尚、toに指定しているユーザも作成してあります。 付与した権限は、connect、resourceです。 あと、インポートコマンド発行時に出力されるメッセージは次のようなものです。 SP2-0734: "imp system..."が開始するコマンドが不明です -残りの行は無視されました。 と出力されます。 上記メッセージから、impコマンドが認識されていないようにおもわれるのですが、ちょっと調べては見たのですが分からなかったので、ご教授ねがいます。

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

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

  • テーブル自体のバックアップ

    教えてください。 今オラクルのDBにTEST1テーブルが存在するとします。 ------TEST1--------------------- id varchar(5) Primary Key name varchar(20) old int -------------------------------- 今このテーブルとまったく同じデータを持ち、同じ構成のテーブルTEST2を 作成したいと考えています。 (1)create table TEST2( id varchar(5) primary key, name varchar(20), old int ); (2)insert into TEST2( id, name, old) values (select id, name, old from TEST1); としてTEST2テーブルを作成して、TEST1のデータを格納していますが、 他の方法はないでしょうか? たとえばこんなコマンドはありませんが、 COPY TEST1 TEST2 とか、 オラクルマネージャみたいなもので、 コピペして、名前をTEST2にする とかなんでもいいです。 TEST1のバックアップをとりたいのですが・・・・ すみません、わかりづらい説明で。 宜しくお願い致しますm(_ _)m

  • Oracleで上書きImportはできますか?

    DBサーバーA(以下A)のデータを毎月Exportし、DBサーバーB(以下B)にImportしていきます。 二回目以降は先月のImportでBにはAと同じテーブル定義がされています。 二回目以降にBの定義(データも含め)を削除せずにAのデータを追加及び上書きしたいのですが増分Expなどで出来るのでしょうか? Oracleのバージョンは8.0.5.2.1です。 宜しくお願いします。

  • Linux cpコマンドの使い方がわかりません

    ファイルをコピーしたいのですが home/test1/test2 こんなディレクトリになってます。 test1のディレクトリにあるlog1ファイルを test2にコピーしたいのですが、 cp log1 test2 とすると、test1のディレクトリの中にtest2という 名前の、log1をコピーしたファイルができます。 test2というのをディレクトリ名として認識してくれません。 cp log1 test2/ もできません。 "log1/test2"のファイルかディレクトがありません、と返ってきます。 基本的はことですが、教えてください。

  • インポートについて

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

  • VBでログファイルを結合したい

    質問させてください。 以下のようなc:\test配下にあるログファイルを一つに結合したいと考えております。 以後もファイルが増え続けるため、どのようなファイルの状況でもc:\test以下のファイルはすべて結合したいのですがどなたかスクリプトを知っていらっしゃる方がいらっしゃいましたら教えていただけないでしょうか。 c:\test\20060801\test.log c:\test\20060801\test2.log c:\test\20060801\test3.log c:\test\20060802\test.log c:\test\20060803\test2.log c:\test\20060804\test3.log 以上、大変お手数ですが宜しくお願い致します。

  • 【Java】親クラスでMainメソッドの出力

    Javaについてです。 コマンドライン引数を複数渡し、数値の判定をtry/catchで行う。 catchメソッドには「stringFlg = true;」のみ。 渡ってきた値が数字のみの場合は、数値*数値の文字数を出力し、 数字のみでない場合は文字列を逆から1文字ずつ出力する。 上記のプログラムを下記のように変更したいです。 Testクラスで別パッケージのTest2クラスを継承し、Test2のLogメソッドを呼び出す。 引数で渡ってきた値をMainメソッドでコンソールに出力していたところを Logメソッドでコンソールに出力する。 Mainメソッドを呼びだそうとするとコンパイルエラーが起きる上に、 Mainメソッド内でLogメソッドをどこで呼び出せばいいのかイマイチ分かりません。 教えて下さい。 現時点のソースコードです。 package Test; import Test2.Test2; public class Test extends Test2 { public static void main(String[] args) { Test2 Log = new Test2(); boolean stringFlg = false; for (String arg : args) { try { int num = Integer.parseInt(arg); int nums = num * arg.length(); Log.Log(); stringFlg = false; } catch (NumberFormatException e) { stringFlg = true; }if(stringFlg){ char[] chars = arg.toCharArray(); for (int i = chars.length - 1; i >= 0; i--){ char str = chars[i]; Log.Log(); } } } } } package Test2; import Test.Test; public class Test2 { public void Log() { Test2 test2 = new Test(); System.out.println(test.main(args[0])); //コンパイルエラー } }

  • grep 検索 検索対象の行と、そのn段下(もしくは上)までの行を合わせて出力したい

    ファイル ./test の内容は以下のとおりです。 test1 30 50 12 test2 60 12 01 test3 *** 20 *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか? test2 60 12 01 のように表示させたい。 (2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?