• ベストアンサー
  • 暇なときにでも

oracleデータのインポート&エクスポートについて

oracleデータをインポートするにはSQL*LOADERを使用するのが一般的な方法の一つですが、 同じように、その逆であるエクスポートを行う場合はどのような手段を用いますか? 条件としては ・バッチ(シェル)で実行できる事。 ・SQL*LOADERでインポートする為のデータと互換性のあるフォーマット(CSV)である事。 ・ツールの追加購入は考えていません。

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

  • 回答数4
  • 閲覧数4136
  • ありがとう数2

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

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

最初に「データだけの移動」だという前提で。 データの抽出はSQLで抽出した結果をスプールすれば良いだけだと思います。 項目をシングルコーテーションで括るなどはSQLで編集してやる必要がありますがSQL*PLUSで十分事足りると思います。 それよりもインポート/エクスポートユーティリティを使った方がはるかに簡単だと思うですが如何ですか?

参考URL:
http://www.searchman.info/tips/1520.html

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

質問者からの補足

早速ありがとうございます。 <TBLE_A> ITEM_1 ITEM_2 ------ ------ AAAAAA 000000 AAAAAA 111111 BBBBBB 222222 CCCCCC 333333 上記のようなテーブル TBLE_Aがあったとして、それをアイテム名変更を含んだ変更をするとします。 <新TBLE_A> ITEM_A ITEM_B ITEM_C ------ ------ ------ AAAAAA 000000 000000 AAAAAA 000000 111111 BBBBBB 000000 222222 CCCCCC 000000 333333 変更後のテーブルの条件が以下とします。 ITEM_A…ITEM_1のリネーム ITEM_B…新規項目で内容はオールゼロ ITEM_C…ITEM_2のリネーム このような場合にもインポート/エクスポートユーティリティは有効でしょうか? 一旦、上記<新TBLE_A>と同じ内容のVIEW<VIEW_A>を作ったとします。 <VIEW_A> ITEM_A ITEM_B ITEM_C ------ ------ ------ AAAAAA 000000 000000 AAAAAA 000000 111111 BBBBBB 000000 222222 CCCCCC 000000 333333 CREATE OR REPLACE VIEW VIEW_A (ITEM_A,ITEM_B,ITEM_C) AS SELECT "ITEM_1" ,"000000" ,"ITEM_2" FROM TBLE_A / このVIEW_Aからデータをエクスポートし、 TBLE_AをDELETE & CREATEした後、インポートするという事は可能ですか? あるいは、もっといい方法はありますか?

関連するQ&A

  • Oracleのエクスポート、インポートについて困っています・・・

    Oracleのエクスポート、インポートについて詳しい方にお伺いしたいのですが。 質問の内容と、スペックですが、 エクスポートの対象にしているOSがlinuxで、DBがOracleです。このサーバーは私のローカル内にありません。 インポートしたいデモ環境(OSがlinuxで、DBがOracle)が、私のローカル内にあります。二つとも別場所です。 お分かりのとおり、この対象OSのOracle内のデータとデモ環境(OSがlinuxで、DBがOracle)のOracle内のデータを 同じようにしようとしております。 私のOSはwindowsXPで、Oracleはインストールしておりません。 これが痛くてフリーソフトをあれこれ使おうとすると、SQL*Net(有料?あまりよくわからない)が必要なことを知ってより困っています。 この私の環境(OSはwindowsXPで、Oracleはインストールしていない)で 別場所のOracleからエクスポートし、自分のローカル内にあるデモ環境(OSがlinuxで、DBがOracle)のOracleに インポートできるフリーソフトってあるのでしょうか。 別場所であろうが、自分のローカル内だけであろうが、 エクスポートだけしかできないフリーソフトでもほしいです。 ないとは思いますが(結構、調べたので)、もし、ご存知のかたがいれば教えていただけないですか。 あと、実際、上記のような質問をしていますが、やはり、この件に関しては、 コマンドプロンプトを開いてimp/expをするのがよいのでしょうか。 できるだけ、シンプルな方法をつかみたい次第です。 もし、コマンドからの操作しかないのでしたら、 imp/expにおいて気をつけなければいけないこと等はあるのでしょうか。 expはDBに危険がないような気がするのですが、impはなにかと気をつけないといけなさそうな気がしますが・・・。 初心者すぎる質問で見苦しく恐縮です。 OracleのSQL文もよく知らないもので。 できれば詳しい方、よろしくお願いします。

  • Oracle8のエクスポートファイル

    Oracle8においてデータのエクスポートを行ってOracle7環境にインポートしようとしたら、エラーとなってしまいました。下位互換はしないのでしょうか。 また、下位互換しないのであれば、何か簡単な方法でOracle8のデータをOracle7環境に入れることはできないでしょうか?(エクスポートにオプションとかがあるのでしょうか?)

  • データのエクスポート/インポート

    あるシノニムのデータをエクスポートして、その後、エクスポートしたファイルを一部編集して、インポートしたいと思っています。DBはOracle 9iです。 テーブルのエクスポート/インポートだと、CSEなどのツールで実施できるのですが、シノニムだと同様の操作では実施できませんでした。 初心者でも簡単にできる方法を教えてください

その他の回答 (3)

  • 回答No.4

そもそもインポート/エクスポートユーティリティはデータの単純な移行という目的では作られておりませんので >CSVや固定長データとしてデータのみを入出力する機能は無いという事でしょうか? というご質問に関しては「そうです」となります。 また、ビューはエクスポート元にはなれないので、ご検討中の方法も難しいと思います。(Viewも単純にSelect文ですので) 複雑な物理定義変更などを網羅できるような付属ツールは、少なくとも私は知りません。 単純なデータ移行なら、と思い回答させて頂きましたが、補足にあるような構成変更に関してはPL*SQLもしくはPRO*Cでの作りこみが必要になると思います。 データ加工をPL*SQLでやって、構成変更後のデータにあわせてCSVデータを作成してSQL*LOADERでロードという手順か、旧テーブルからSELECTしつつ新テーブルにINSERTするようなAPを作成する様になると思います。 もしくは補足にあるように変更後のフォーマットのViewを作成して、そのViewからCSVを作成するかですね。ロジックを入れない分シンプルになるのではないでしょうか。 ご参考までにOTN(ORACLE TECHNOLOGY NETWORK)のURLを載せて置きます。

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

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

質問者からのお礼

いくつかの方向性が見えました。 ありがとう御座いました。

  • 回答No.3

訂正です。 【誤】 INSERT INTO NEWTABLE_A (ITEM_A,ITEM_B,ITEM_C) AS SELECT ITEM_A,'000000',ITEM_C FROM TABLE_A; 【正】 INSERT INTO NEWTABLE_A (ITEM_A,ITEM_B,ITEM_C) SELECT ITEM_A,'000000',ITEM_C FROM TABLE_A;

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

  • 回答No.2

テーブルの構成が変わってしまう場合はインポート/エクスポートは使用できないと記憶しております。 なので、補足の様な場合はSQLでINSERT SELECTしてやれば楽ではないでしょうか。 (1)新テーブル作成 (2)旧テーブルからINSERT SELECT文でデータ移行 SQL例) INSERT INTO NEWTABLE_A (ITEM_A,ITEM_B,ITEM_C) AS SELECT ITEM_A,'000000',ITEM_C FROM TABLE_A; (3)旧テーブルドロップ。 ビューは元テーブルがドロップされた時点で使えなくなりますので、ビューを使ってのデータ移行は不可能だと思います。 一時的にテーブルを作成するのが不可であれば、SQLでCSV形式にしたSELECTを実行して、SQL*LOADERでデータ投入する方法になると思います。

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

質問者からの補足

ありがとうございます。 インポート、エクスポートにはテーブルやその他のオブジェクトを特殊な形式でエクスポートし、 その形式のものをインポートする昨日はあるが、 CSVや固定長データとしてデータのみを入出力する機能は無いという事でしょうか? VEIWを作成してその形でデータだけ抜いて、同じ型のTABLEに入れようと考えたのですが、そのような事は不可能で、VEIWをエクスポートしたもVEIWそのものがオブジェクトとして退避されるだけ? 例では簡単なテーブル変更例を示しましたが、 実際はもっと複雑な用件が絡み、 複数のテーブルから1つのテーブルにしたり、 逆に1つのテーブルから複数のテーブルを切り出して親子関係にしたり、 複数のテーブル群から複数のテーブル群へややこしい変換があります。 ですので、可能なら完成系をVIEWで一旦作成し、 そのままデータだけをエクスポートし、 テーブルを全部削除&再作成し、 退けたデータを戻す。 といった感じがシンプルで良いかと思ったのですが、 無理なのですか? やはり、そういう場合は PL/SQLでCSVファイルを出力するスクリプト作って、 SQL*LOADERで流し込むしかないのでしょうか?

関連するQ&A

  • Oracle8iでテーブルをエクスポートする方法

    Oracle10gを使用しています。Oracle8iから特定のテーブルを抽出してOracle10gに入れようとしましたが、Oracle10gのexpコマンドは互換性の問題で8iに対して使えませんでした。そこでOracle8iのexpコマンドを使用しようかと考えましたが、テーブルごとのエクスポートができないとのことで不可(データベースが大きすぎるため、そもそも8iのExpコマンドを実行できる権限を持っていないのでできませんが)。 仕方がないのでExpコマンドはあきらめて、テーブル定義抽出→データをCSVまたはSQLで抽出という手順でデータを移そうかと考えています。データの抽出はできたのですが、テーブル定義の取得は10gで使えるdbms_metadata.get_ddlが使用できないので取得できずにこまっています。8iでテーブル定義を取得するにはどうしたらいいのでしょうか? なお当方8iのデータベースのSystem/Sys権限を所有していないません。また8iがインストールされているサーバへログインすることもできません。それを考慮した上で実現可能な方法をご提示願います。

  • エクスポート&インポートのバージョンの違いについて

    Oracle9iでエクスポートしたデータを Oracle8iにインポートできますか? 試したのですが上記が原因か判断がつきませんでした。 アドバイスお願いします。

  • Oracleのインポートについて

    Oracle8iでエクスポートしたデータを、Oracle9iでインポートした場合、何か不具合が発生する可能性がありますでしょうか? データ型などで問題はあると認識していますが、そもそも、この行為自体は、推奨されているのでしょうか? 調べてみたのですが、しっかり記述されている文面に行き当たらず、困っています。 どなたかご教授願います。

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

    mysqlの1個のテーブル(約1万行)をphpMyAdminでエクスポートしました。エクスポートは一瞬で終わりました。 それを再びphpMyAdminからインポートしようとしたのですが、データが重いらしくタイムアウトのエラーが出てしまいました。 sqlファイルを開いてみると、テーブルへのinsert文が約200行ずつのかたまりごとに区切られてしました。 きっとphpMyAdminの方で、エクスポートする時、「これくらいのかたまりずつ区切っておかないと、スムーズにインポートできなくてエラーになっちゃうよ」と気を利かせて区切ってくれているのだろうと思います。 仕方ないので、sqlファイルを「約200行ずつのinsert文」に分割して、phpMyAdminからインポートしました。 全部で1万行ほどのデータなので、50回ほどその作業を繰り返しました。 エクスポートはスムーズだったので、インポートがこんなに手間がかかるとは思っていませんでした。 最初にその1万行のデータをテーブルに読み込ませたのは、別のcsvファイルを load data infile したり、項目の並び順を入れ替えて insert したりするphpファイルを書いたのですが、さほど重くもなくスムーズに処理できました。 phpMyAdminを使わない方法の方が圧倒的に早い気がするのですが、大きいデータをインポートする際のスムーズな方法がありましたら、アドバイスいただけますでしょうか?

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

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

  • データベースのエクスポートとインポート

    OSもOracleのバージョンも同じ環境で、データベースを移行したいと思っています。    OS:WindowsXP Pro SP2    Oracle:9i (9.2.0) 新しいマシンは、Oracleをインストールしただけの状態です。 インストール時に自動で作成されたデータベースだけがあります。 (ユーザはまだ作成していません) この状態で、現状のマシンにあるデータを全て丸ごとエクスポート・インポートは可能なのでしょうか?移行したいデータベースには、3つのユーザが存在しますが、この3つのユーザを一度にインポートできないかと思っています。 EXPに、FULL というパラメータがありますが、ここで [ Y ] を指定した場合、3つのユーザのデータを丸ごとエクスポートできるのでしょうか?その場合、USERIDのパラメータには、どのユーザ名を設定すれば良いのでしょうか? エクスポートできれば、そのDMPファイルをインポートすれば良いだけだと思っているのですが・・・ (ちなみにデータベースを、あと2つ作成して、同じようにインポート・エクスポートしたいと思っています) Oracle初心者です。質問内容もまとまっていないかもしれません。 不足などがあれば補足要求下さい。 よろしくお願い致します。

  • データのロードの仕方

    Sqlserver6.5を使用していますが Oracleでいうところの「Sql loader」のようなツールは 用意されているのでしょうか? とりあえずAccessを使用してODBC経由でSqlserverにアタッチし 元データ(CSV)を流し込んでいますが、データ量が多くなると一度に処理出来ない場合があるので もっと簡便な方法を、と思い今回質問させていただきました。 よろしくお願いします。

  • AccessのデータをOracleに移行したい

    AccessのデータをExcel(csv)にエクスポートして、それをSQL Loderでオラクルに移せると聞いたのですが、 具体的にはどんな感じで行うのでしょうか? Access2000 Oracle9i RedHatLinux7.2 です。 よろしくお願いします。

  • ORACLEデータのエクスポートについて

    ORACLEデータをExcelで確認・操作できるように、CSVやタブ区切りにエクスポートしたとします。 そのとき、改行コードや区切り文字などの処理は行いますか? 改行コード(CRのみやLFのみ)が入っていたとしても、Excel上で確認する分には無視されて一つのセルにきちんと収まっており、操作に問題なし、と判明していることが前提となります。

  • SQL*LoaderでCSVから指定した列のみインポートしたい。

    SQL*Loaderを用いてOracleのテーブルにデータを格納 しようと思っています。 格納するデータはカンマ区切りのCSVファイルです。 入力CSVファイルは他テーブル用のファイルなので、 ローダーで落とし込むテーブルとは列数が異なります。 ですので、「CSVの5列目の値をテーブルのAA_NOというフィールドに 格納する。ということが可能なのでしょうか?」 CSVファイルのある行が a,b,c,d,e,f というデータの場合、テーブルには a,e,f とインポートしたいのです。 よろしくお願いします。