• 締切済み
  • すぐに回答を!

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

こんにちわ。 データ移管の件で悩んでいます。 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 ... という方法は使えません。 宜しくお願いします。

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

  • 回答数3
  • 閲覧数1922
  • ありがとう数1

みんなの回答

  • 回答No.3

CSVとして出力してSQL*Loaderで入れるのはどうでしょうか。 データの中に,(カンマ)が無いことを前提に考えると SQL*Plusで set colsep ',' set lines 1000 set head off    などを指定してから spool table_data_A.csv select * from A; でtable_data_A.csvファイルにCSV出力できます。 (ファイルの最初と最後にある余計な文字を取り除く必要がありますが) それをSQL*LoaderでテーブルBにローディングすればよいかと思います。

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

関連するQ&A

  • はじめまして

    はじめまして SQL初心者で先月始めたばかりなのですが "Oracle Enterprise manager" でユーザーを作り、同じDB内のユーザーのスキーマー内にある テーブルをエクスポート/インポートしたいのですがうまくいきません。 エラーとして ”このSQL文は無効です” ”この文字は無効です” ばかり出てきます。もしわかる方いらっしゃいましたらアドバイスよろしくお願いします。 私が打ったSQL文は以下のとおりです↓ 1,エクスポート ====================================== $exp mmmap/mmmap@mmmap file=c:\tableoutput.dmp lows=y tables=(T_FUKUSU_URIBA) ====================================== ユーザー:mmmap パスワード:mmmap ホスト文字列:mmmap ファイルを格納したい居場所:マイコンピューターのC¥ エクスポートしたいテーブル:T_FUKUSU_URIBA 2,インポート ====================================== $imp user01/user01234@mmmap file=c:\tableoutput.dmp log=imp.log fromuser=mmmap touser=user01 ====================================== インポートしたいユーザー:user01 パスワード:user0123 ホスト文字列:mmmap インポートしたいテーブル:T_FUKUSU_URIBA

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

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

  • 作成したテーブルが存在していないように扱われる

    create table 発明者 (id int); とし, show tables; としても,テーブルはないと言われますが(ほかにテーブルがないので) select count(*) from 発明者; などとすると count (*) 0 と返ってきます. この例は現象確認のための作りましたが, テーブル名は同じです. mysqlのバージョンは5.0.41です. お心当たりのある方,アドバイス賜れば幸いです. よろしくお願いいたします.

    • ベストアンサー
    • MySQL
  • 回答No.2
  • kouta77
  • ベストアンサー率20% (185/896)

ところで、 insert into A select * from B も考えてないんですか? 違うDBならDBリンクはればできそうな気もしますが。。。

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

  • 回答No.1
  • joih
  • ベストアンサー率35% (37/105)

インポートファイルのテーブル名を直接置換します。 perlでもいいでしょう。 perl -pe 's/TABLE_NAME1(.*)/ TABLE_NAME2 $1;/'

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

関連するQ&A

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

    テーブルに列やインデックスの変更など、どんな変更しても、インポートすれば、エクスポート時のテーブルの状態に戻るのでしょうか? 環境: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)を削除し、 エクスポートしたスキーマをインポートしないと戻らないでしょうか? よろしくお願いします。

  • Oracleインポート

    Oracle9iでエクスポートしたファイルをインポートしていますが、順序(Sequence)が元にもどりません。エクスポート前が10だとするとインポートしたときには、create sequenceを行った後の状態になっています。これをどうにか、インポート後は10にしたいのですがどうすればよろしいのでしょうか。エクスポート、インポートの権限としてDBAやEXP_FULL_DATABASE,IMP_FULL_DATABASEを与えています。

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

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

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

  • テーブルのどちらかにデータがない事があるテーブル結合について

    ■table a のテーブル構成 date a_id b_id c_id a_count ■table b のテーブル構成 date a_id b_id c_id b_count value 上記の2つのテーブル構成から、 ■date a_id b_id c_id毎の集計データ date a_id b_id c_id a_count b_count value を抽出するSQLが知りたいです。 table aにあって、table bに存在しない。又は逆もある為、 union しかないと思うのですが、思いつきません。。

    • ベストアンサー
    • MySQL
  • 順序の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=(住所テーブル) 上記で一応うまく登録されたようですが、 よくわかりません。 どなたかアドバイスお願いします。

  • 異なるサーバーにファイルをエクスポートしたい

    こんにちわ 現在Aというサーバーにおいて、とあるテーブル(他のテーブルとのリンク等無し)がサーバーの容量を圧迫するぐらいに肥大してしまったので、このテーブルのデータを一度別のサーバBにエクスポートしてバックアップをとり、このテーブルにTruncateをかけてインデックスを再構築し、データを戻すということを考えています。 しかし、別のサーバーにデータをエクスポートする方法がわかりません。実の事を言えばexpコマンド自体、あまり分かっていません exp ユーザー/パスワード file=エクスポートファイル名、パス table=DB名.テーブル名 という所までは分かっているのですが、この後、どのようなオプションや記述をすれば良いのかが分かりません。 すみませんが、どのようにすれば別のサーバーにファイルをエクスポートできるのでしょうか? 尚、一度サーバーAにおいてFTPでBに移すという方法は、既にサーバーの残り容量が少ない為、不可能な状態です。 OSはSolaris、Oracleのバージョンは9iです。 お手数をおかけしますが、宜しくお願いします。

  • UNIQUEをつけたときのINDEXテーブル

    テーブル作成時、カラムにUNIQUEをつけると自動でインデックステーブルが作成されますが、このインデックステーブルで、通常のselect検索も早くなるのでしょうか? 具体的には、ユニークなカラムidを持つテーブルtableA create table tableA( id INTEGER UNIQUE, some_column INTEGER ); を作ったあとで、そのidにあらためて CREATE INDEX id ON tableA (id); と、インデックスを張る必要があるのでしょうか。 よろしくお願いします。

  • インポートについて

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

  • Accessのテーブルへのデータインポートについて

    Accessのテーブルへのデータインポートについて Access2002で、A.mdbのTESTテーブルからB.mdbのTESTテーブル(構造は同じ)へテーブルデータをインポートしたいのです。 TESTテーブルの主キーはSEQ(オートナンバー)しかありません。 そのときに、コピー元とコピー先の主キーに重複があった場合、オートナンバーなので自動で再付番しデータが追加して欲しかったのですが、 Accessの機能のエクスポート、インポートでは、コピー先に主キーに重複があったデータは上書きされてしまいます。 テーブルを開き、データをコピー&ペーストしますと、ペーストしたときにオートナンバーで自動で再付番されます。 この方法でもいいのですが、データが数百万件あるので、現実的ではありません。 Accessのインポート・エクスポートで、オートナンバーで主キーを再付番してから、B.mdbのTESTテーブルにデータ追加する方法はないでしょうか? よろしくお願いいたします。