• ベストアンサー

Oracleのデータをマージする

以前、MySQLでのマージ方法について質問した者です。 今度は、Oracleでのマージ方法ですが、 重複行が発生して困っております。 状況としては、スキーマが二つあります。db1とdb2です。 それぞれ、同じ構造のテーブルを持っていて、格納しているデータだけが違います。 db1にdb2をマージしようとしているのですが、上手くいきません。(重複行が発生します) 方法として、以下の2パターンを試行しました。 (1)インポート    db1をインポートした後に、同じスキーマにdb2からのダンプファイルでインポート   (2)ダイレクトパスインサート    insert/*+ APPEND */ into db1.myTable (SELECT * FROM db2,myTable);. 以下は当方の使用環境です。 Windows7 Pro 64Bit Oracle11g Standard Edition 他に必要な情報があればお聞かせください。 よろしくお願いします。

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

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

>(1)インポート についてですが、 impdpを使うなら、CONTENT=DATA_ONLY DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS impなら、IGNORE=Y のパラメータを設定することで、うまくいくのではないでしょうか。

freeradical
質問者

お礼

ご回答ありがとうございます。 impのIGNORE=Yは、テーブル単位の重複、つまりcreate tableしようとしたら、既にテーブルがあった場合のエラーを無視する、ということのようです。 impdpは、そういう機能をはじめて知ったので、今試行しています。結果は週明けにご報告いたします。

関連するQ&A

  • MySQLでデータをマージする方法について

    お世話になります。 スキーマが二つあります。db1とdb2です。 それぞれ、同じ構造のテーブルを持っていて、格納しているデータだけが違います。 db1にdb2をマージしようとしているのですが、上手くいきません。 手順としては、以下のとおりです。 (1)まず、db1のダンプを取りました。   (インポート先でテーブルをドロップしないようにオプションを付加)    c:\>mysqldump -u root --add-drop-table=false -p db1>db1.sql (2)次に、db2に接続してダンプしたファイルをインポートしました。    mysql>\. db1.sql インポートの前後で、テーブルの件数を見たのですが、 変わらないのでマージできていないようです。 以下は当方の使用環境です。 Windows7 Pro 64Bit MySQLServer 5.1(mysql-5[1].1.28-rc-win32) 他に必要な情報があればお聞かせください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • ORACLEデータをACCESSへインポート VB

    OracleのデータをAccessへインポートする方法について、どなたかご教授ください。 VB.NETで OracleからAccessへのデータコンバート機能を作ることになりました。 (環境 OS;Win7 言語;VB2008 Oracle;10g Access;2010) 対象のテーブル数、フィールド数、データ数がかなり多いのですが、Accessへデータをインポート(コピー)する良い方法はないでしょうか? 普段、データ入力が専門のためプログラムは初心者です。 今のところOLE DBを使用して1行ずつデータを登録する方法しかできません・・・ ヘルプを参考に、ODBCでDSNレスのINTO(SQL)を挑戦しているのですが「入力テーブルまたはクエリが見つかりません」と出てしまいます。 ◇質問 (1).複数のテーブルをAccessへコピーするにはどんな方法がありますか?   また、このような対象テーブルが多い場合に有効な方法は? (2).ODBCでDSNレスのINTO(SQL)を作成するのに注意することはありますか? ちなみにエラーが出てしまうSQL文は以下です。違っているでしょうか? cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;data source=D:\DATA\DB.mdb" sql = "SELECT * INTO impテーブル名 " & _ "FROM [ODBC;DRIVER={Microsoft ODBC for Oracle};" & _ "SERVER=" & orSorc & ";" & _ "UID=" & orUsrID & ";" & _ "PWD=" & orPswd & "].expテーブル名" ※ Oracleは10g/11gのバージョンが存在するためODPは使用しません

  • 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のバージョンとなります。 基本的なご質問かもしれませんが ご教示頂けると大変助かります。 宜しくお願い申し上げます。

  • 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のトリガーについて

    Oracleのトリガーについて質問です。 旧システムから新システムへデータ移行を行おうとしているのですが、 新システムではNEWテーブル(仮名)が新規で追加されています。 データ移行の方法として、旧システムのダンプファイルをエクスポートし、 新ステムにユーザを再作成後インポートしました。 その後、あらかじめ新システムでNEWテーブルのみテーブル指定のエク スポートを行っていたダンプファイルより、追加でインポートを行いました。 これでデータ移行完了と思っていたのですが、NEWテーブルのデータはトリガー により生成されるらしいのですが、どのタイミングで生成されるのでしょうか? データ移行完了時はデータ0件です。 NEWテーブルをインポートする順番が逆なのでしょうか? それともインポートではトリガーは起動しないのでしょうか? または、トリガーの仕組みが消えている(?)のでしょうか? (納入先に行かないと確認できない状態なので実際のデータベースが確認できません…) Oracleはあまり詳しくないため、わかりづらい質問かもしれませんが よろしくおねがいします。 【環境】 Oracle11g R2 Windows2008Server

  • oracle DBの複製方法について

    色々サイトとかをみたのですが、発見できなかったので記載します。 【環境】 Oracle Database 11g linux 6.2 【実現したい事】 あるDBがあって、同じサーバ内に別名でDBを構築したいです。(スキーマとかも一緒) ※期間的な所もあって、一番早く複製できる方法を希望 <DB>A⇒<DB>B 大変お手数ですが、手順を詳細に記載して頂けると助かります。。。。 何か情報として他に必要であればご指摘願います。

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

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

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

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

    oracle10gを使用しております。 oracleのimportについて質問いたします。 テーブルAをExportしてdumpファイルを作成し、テーブルAより任意のレコードを削除、 commitを行います。 後に、テーブルレコードを削除前に戻したいと思った場合、 dumpファイルを用いて、削除したレコードだけを元に戻すことは可能でしょうか? 現状ではテーブルAを削除し、dumpファイルをimportしてテーブル、レコードを復元しておりますが、 これ以外に方法はありますでしょうか。 回答、宜しくお願いします。

  • 11gデータから10gへのインポートについて

    あるシステムのDB管理を行うにあたり、 Oracleを使用しているのですが、 Oracleのバージョンの違いにより、 DMPファイルのインポートが行えない事はございますでしょうか? 詳細は以下です。 ローカル環境のシステム Oracle 10g / 10.2.0.1.0 社内環境のシステム Oracle 11g / 11.2.0.1.0 社内環境システムよりバックアップを行い出力されたDMPファイルを ローカル環境へインポートを試みたところ、 以下のエラーが発生し、インポートができません。 *************************************************************************** 接続先: Oracle Database 10g Release 10.2.0.1.0 - Production IMP-00010: 有効なエクスポート・ファイルではありません。ヘッダーは検証に失敗しました。 IMP-00000: エラーが発生したためインポートを終了します。 接続先: Oracle Database 10g Release 10.2.0.1.0 - Production IMP-00010: 有効なエクスポート・ファイルではありません。ヘッダーは検証に失敗しました。 IMP-00000: エラーが発生したためインポートを終了します。 *************************************************************************** 解決方法をご存知の方がおられましたら ご教示いただけると有難いです。 以上、宜しくお願い致します。