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

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

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

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

  • 回答数4
  • 閲覧数13353
  • ありがとう数8

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

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

参考URLの内容はどうでしょうか?

参考URL:
http://www2.odn.ne.jp/~cag07740/tech_info/oracle_ans7.html

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

質問者からのお礼

まさにこのことでした。マニュアルが読み足りませんでしたね。ありがとうございます。

関連するQ&A

  • インポートについて

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

  • dmpファイルをインポートせずに、テーブル名を知りたい

    Oracle8.1.6のexpコマンドで作成したdmpファイルがあります。 このdmpファイルをimpコマンドでインポートせずに、テーブル名を(できれば、レコード数も)知りたいのですが、何か方法がありますでしょうか? よろしくお願いします。

  • テーブルのエクスポート・インポート

    SQL Server2005 を使用しています。 テーブルのインポート・エクスポートに関して質問があります。 今まで、Oracleを主に使用していて、「EXP」「IMP」コマンドを使用して DMPファイルを介して別PCのデータベース間でテーブルのやり取りをしていました。(DB上のテーブルすべてや特定のテーブルのみなど) 同様のことをSQL Serverで実現したく下記を試したのですが上手くいきません。 1.Management Studio で「タスク」→「データのインポート(エクスポート)」   フラットファイル、Excel、MDBファイルなど試したのですが、   これらの中間ファイルを介した際にデータ型が変わってしまい   元の型のまま戻せない。   Oracleの「DMP」ファイルのようなものには落とせないのでしょうか? 2.「bcp」コマンド   これに関しては、複雑でよくわかりませんでした。   もし、このコマンドで実現可能であれば、やり方を教えて下さると   助かります。 以上、ながなが書きましたが宜しくお願い致します。

その他の回答 (3)

  • 回答No.4

temporaryのユーザーを経由して、データを入れてはどうでしょうか? 例えば、ユーザーA、テーブルXにデータを入れたい場合、一度temporaryのユーザーBを作成し、ユーザーBに対してimpします。この状態で、 insert into ユーザーA.テーブルX ( select * from ユーザーB.テーブルX) とすれば、データが追記できると思います。

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

質問者からのお礼

回答ありがとうございます。 #1の回答"オプションignore=yを指定する"で解決しました。 場合によってはご指摘の方法がよい場合もありそうですね。

  • 回答No.3

基本的に、#1で案内された方法で、OKです。(IGNORE=Y) 既存オブジェクトにデータを追加してくれます。 ただし、エラーがあっても継続処理する都合上、 予定しないエラーがないことを確認しないと痛い目に あいますので、ご注意あれ。 #2で書かれていることは、オラクルユーザ的に理解不能です。 一般論としては良いと思いますが、IMP-00015の回避策が話題なので、 インポートユーティリティを知らずして、”自信あり”はちょっと。

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

質問者からのお礼

回答ありがとうございます。 directの場合には特に注意します。

  • 回答No.2

SQLの「CREATE TABLE」文は「新規にテーブルを作成する命令」なのですが、そこを理解出来てますか? インポート先が既存なのに「CREATE TABLE」したら「テーブル(オブジェクト)がすでに存在する」って言われるのは当たり前です。 たぶん、食わせたSQLファイルが「テーブルが存在しない状態の時に、新しくテーブルを作ってから、インポートを行う」と言う複数のステートメントをまとめたSQLファイルの筈です。 そこから「新しくテーブルを作ってから」の文を削除し「インポートを行う」だけ残し、別名でSQLファイルを保存して、それを使いましょう。 それと、既存テーブルにデータをインポートして追加する場合、既存データとインポートデータの主キーが衝突するとエラーになるので、その辺りの処理も追加しなければダメだと思います。 大元のSQLファイルを使って処理していた場所は「テーブルを新たに作ってインポート」をしていて、主キーが衝突しない前提で作られている筈で、その辺りのエラー処理が無い筈なので。 他人が作ったプログラムやシステムを流用して処理を追加するのは、とても大変な作業だと思います。頑張って下さい。

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

質問者からのお礼

丁寧なご説明ありがとうございます。 oracle utility / import を使用していますので、言葉が足りませんでしたね。 なお#1の回答"オプションignore=yを指定する"で解決しました。

関連するQ&A

  • データ削除とSQL*Loaderでのインポート

    SQL*Loaderを使ってデータをインポートするのですが、既存データが存在するテーブルにインポートするため、実行前に、条件に一致する一部のデータを削除します。 ですが、SQL*Loaderでインポートが失敗した際には、元に戻したいと思っています。 そういう場合に、SQL*PlusからDELETEのSQL文を実行してから、SQL*Loaderを起動してインポートするとなると、SQL*Plusから抜けた時点でCOMMITされてしまいますよね?そのためSQL*LoaderでインポートがエラーになってROLLBACKされても、削除されたデータは元に戻らないですよね・・・。 全件削除なら、CTLファイル内でREPLACEを指定してインポートするのですが・・・ データの一部削除とSQL*Loaderでのインポートを一連の処理として、エラーの際にはROLLBACKさせられる方法はありますでしょうか? よろしくお願いします。

  • 異なる名前のテーブルにデータ移管をしたい

    こんにちわ。 データ移管の件で悩んでいます。 AとBというテーブルがあり、違いは名前だけで構造は全く一緒です。 Aには大量のデータが入っており、Bにはデータが全く入っていません。 今、このテーブルにAのデータを一度エクスポートして、後でBのテーブルに移管したいと考えています。 しかし、 exp ID/PW file = (エクスポートしたファイル名) table = A でデータをエクスポートし、 imp ID/PW file = (エクスポートしたファイル名) tables = B でデータを入れようとしたのですが、 IMP-00033: 警告: 表"B"がエクスポート・ファイルにありません というエラーになります。 AからエクスポートしたデータをBにインポートするにはどのようにすれば宜しいのでしょうか? 尚、今回は事情があり、create table B as select ... という方法は使えません。 宜しくお願いします。

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

    extdat.dmpファイルをインポートしようとしています。 既存にテーブルが存在します。その場合にインポートしましたが、正常に終了していました。しかし、extdat.dmpではテーブルの項目が追加されているのですが、インポート後でも追加されてません。 なぜでしょうか? またきちんと反映させる方法を教えてください。

  • テーブルが存在していたらDROPしてからCREATEするには?

    作成しようとするテーブルが既に存在している場合 一度DROP TABLEを行いたくて、以下のSQLを作成したのですが 削除が実行されません。 そもそものやり方自体が間違っているのでしょうか? 実行後のメッセージは テーブルが存在しなかった場合→コマンドは正常に完了しました。 テーブルが存在した場合→データベースにオブジェクト名 'SLIP_ITEMXX' が既に存在します。 と、表示されます。 --テーブルが存在した場合削除する ※ストアド使用 CREATE PROCEDURE SP_SLIP_ITEMXX AS DECLARE @TableName varchar DECLARE @Sql varchar set @TableName = 'SLIP_ITEMXX' SET @Sql = 'if exists (select * from dbo.sysobjects where id = object_id(N' + @TableName + ') ' + 'DROP TABLE ' + @TableName EXEC(@Sql) GO --テーブル生成 CREATE TABLE SLIP_ITEMXX( [slip_no] [int] NOT NULL ) GO --ストアド削除 DROP PROCEDURE SP_SLIP_ITEMXX GO

  • インポートすれば、前の情報に戻るのでしょうか?

    テーブルに列やインデックスの変更など、どんな変更しても、インポートすれば、エクスポート時のテーブルの状態に戻るのでしょうか? 環境:Oracle 10g R2    Windows 2003 Server R2 ユーザー(スキーマ):userA このスキーマには、3つ作成したテーブルあるとします。 tableA tableB tableC [tableB]のテーブル定義を変更するのですが、失敗した時のために バックアップをとっておき、変更前の状態に復元できるようにしたいと考えています。 テーブル定義の変更は、主キーの削除、インデックスの追加を行ないます。 [変更テーブルのみexp、imp] 1.exp userA/passA file=D:\expUserA_tableB.dmp tables=(tableB) 2.tableBのテーブル定義を変更 <-- 失敗 3.drop table tableB <-- 変更に失敗したテーブルを削除 4.imp userA/passA file=D:\expUserA_tableB.dmp tables=(tableB) 上記の方法で、変更前の状態に戻るでしょうか? 実行してtableBが変更前の(主キーがあり、作成したインデックスがない)テーブル定義に 戻っていることは確認できるのですが、この戻し方で本当に正しいのか確信がもてません。 例えば、統計情報とか、そのテーブルに紐付いている?情報も全て変更する前の状態に戻っているのでしょうか? それとも、スキーマ(userA)をエクスポートし、スキーマ(userA)を削除し、 エクスポートしたスキーマをインポートしないと戻らないでしょうか? よろしくお願いします。

  • pg_queryでテーブルを

    作りたいのですが 既に存在するテーブルを作ろうとすると エラーになり作れません そこでこれから作ろうとする名前の テーブルが存在しているかどうかを調べて 存在していれば drop table してから create table 使用と考えています テーブルが存在しているかどうかを知るための SQL文を教えてください それが無ければ他の対処方法を教えてください

    • ベストアンサー
    • PHP
  • dmpファイルのインポート時にでるOracleエラー

    dmpファイルのインポート時に下記のようなOracleエラーがでて困っています。 IMP-00003: Oracleエラー2304が発生しました。 ORA-02304: オブジェクト識別子リテラルが無効です。 IMP-00017: 次の文は、Oracleエラー2304で失敗しました: エラー内容を調べましたが、具体的に何が原因で何をすれば対処できるのかわかりません。 Oracleのインストールで設定を間違えてしまったのか…とも思っているのですが、ご存知のかたがおられましたら教えてください。

  • 8iで保存したDMPデータの10gでのインポートについて

    8iで保存したDMPデータの10gでのインポートについて 8iで保存したDMPデータの10gでのインポートについて 仕様上はOKのはずなのですが うまく動作できません。 (下記のメッセージとなります) 保存の時かインポートの時に何かオプションがいりますでしょうか。 ===================== 接続先: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options インポート・ファイル: EXPDAT.DMP > C:\EXPDAT.DMP 挿入バッファ・サイズを入力してください(最小値8192)。30720> エクスポート・ファイルはEXPORT:V08.01.07によって従来型パス経由で作成されました IMP-00013: DBAのみ別のDBAがエクスポートしたファイルをインポートできます。 IMP-00000: エラーが発生したためインポートを終了します。

  • オラクルのテーブルについて

    質問があります。 SQL文で指定したテーブル(test_tbl)のCREATEされた 日時とかわかるようなものはないでしょうか? たとえばテーブル (table_a, table_b, teble_c:全て同じ構成だが格納データが異なる)が あって一番最後に作成されたテーブルに アクセスしたい場合なんですが どのようなSQL文になるでしょうか? またそんな事はSQLではかけないような場合、 どのようにすればテーブルのクリエート日付を取得 することができるでしょうか? 宜しくお願いいたします。

  • 改行を含んだデータのインポート

    SQL Server 2005 Developer Editionを使っています。 インポートについて、皆様の知識のご教授をお願いします。 (1)、(2)と二つありますが、どちらか一方の回答でも 構いませんので、よろしくお願いします。 (1)Excelインポートによる取込について まず、Excelにテーブルデータをエクスポートしました。 データには、改行されているものレコードもあります。 そのExcelファイルをエクスポートしたテーブルに インポートしようとすると、エラーが発生します。 また、改行されているデータのレコードだけを 手動でコピー&ペーストしても、貼り付けることが できない状態です。さらに、Excel上のデータを直接コピーし、 該当のレコードの箇所に張り付けても、1行目だけしか 貼付けができない状態です。 (2)テーブル間の改行を含むデータ移行について AとBという、テーブル名だけが異なり、列名やデータ型が 同じテーブルだとします。 ここで、BからAテーブルへデータ移行させる際に、 改行されているデータについても、正常に移行できるように するには、どういう手順を踏めばいいか教えて頂きたく思います。 Bテーブルの列を全てコピーし、Aテーブルに貼り付けても、 うまく貼り付けることができませんでした。 改行されているデータは、どうやったら、テーブルに インポートできるのかを教えて頂けないでしょうか。