• ベストアンサー

スキーマの削除、スキーマオブジェクトの全削除どちらがよいですか

Oracleの1スキーマの全データの入れ替えを exp、impコマンドを使って行いたいと思っております。 その場合 1)スキーマを削除してからスキーマの再作成をしてインポート 2)スキーマ内のオブジェクトを全部削除してインポート 1と2どちらの方がよいでしょうか。 私は、1の場合、ログインしている人がいると削除できないので、 2で行おうと思っております。(テーブルにはpurgeオプションをつけて・・・) みなさんならどちらで行いますか。 メリット・デメリットありましたら 教えていただけると助かります。

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

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

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

>1)スキーマを削除してからスキーマの再作成をしてインポート この場合、削除したスキーマに対して与えられた権限も消えます。 スキーマを再作成して、権限を与えるのはモレがある可能性があります。すべてのロール、システム権限、オブジェクト権限を戻せるだけの準備が可能なら問題ないですが。 GRANTOR(権限付与を実行したユーザー名)だったら良いのですが、 GRANTEE(アクセス権を付与されたユーザー名)だったら、ユーザモードのexp/impだと、付与された権限は戻せないです。 ※ユーザモードのexpファイルにはgrantした権限の「grant文」しか載りません。 以下のディクショナリから情報を抜き出しておいて前後で比較する必要があります。 xxx_sys_privs xxx_role_privs xxx_tab_privs あるいは考慮しなくてもよい要件なのでしょうか。 >2)スキーマ内のオブジェクトを全部削除してインポート スキーマ単位で考慮すべきことを考えなくてもよいので、こっちのほうが妥当かと思います。

bunmeidou
質問者

お礼

ご回答ありがとうございますm(_ _)m GRANTEEは消えてしまうんですね!! ------------------------- xxx_sys_privs xxx_role_privs xxx_tab_privs ------------------------- 参考になりました。 無事、2の方で進め、特に問題はありませんでした(^-^)

関連するQ&A

  • 特定のスキーマのテーブルを一括削除したい

    おせわになります、 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

  • 上位バージョンへのインポートに関して

    上位バージョンへのインポートに関して Oracle8 R8.0.5 から Oracle10g r 10.20.0.1.0 へ exp/imp したいと考えています。 そもそもOracle は、上バージョンへのインポートは可能かと思われますが、これだけバージョン が異なるものへのインポートは可能なのでしょうか??? コマンドは単純に、  Oracle 8 側は、   exp user/pass full=y file=c:\パス  Oracle 10g 側は、 imp user/pass@orcl full=y file=c:\パス としました。 実際にやってみたところ、うまくいかず。。。。 何か方法があれば教えて下さい。 よろしくお願いします。

  • DBの削除にあたって

    現在オラクルの9iを使用しています。 .sqlを使用して削除しようと思うのですが オラクルの9iのシステムが使用しているテーブルは そのままにしておき削除したくありません。 そこでオラクルの9iが使っているテーブル(スキーマ?)の名前を知りたいのですが?

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

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

  • 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」コマンド   これに関しては、複雑でよくわかりませんでした。   もし、このコマンドで実現可能であれば、やり方を教えて下さると   助かります。 以上、ながなが書きましたが宜しくお願い致します。

  • Oracle の imp コマンドについて

    oracle(8.1.6) のフルダンプから、指定したテーブルのみDBにインポートする為、imp コマンドを使います。 ---------------------------------------------------------------- $imp (Enterキーを押す) 1. ユーザー名: userid 2. パスワード: ****** 接続: Oracle8i Enterprise Edition Release 8.1.6.1.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production 3. インポート・ファイル: expdat.dmp > ---------------------------------------------------------------- 3.行目のインポート・ファイルのところで、複数のファイルを指定したい場合はどうすればいいでしょうか。 expdat01,expdat02 (expdat01,expdat02) \(expdat01,expdat02\) expdat01.dmp,expdat02.dmp と色々試してみましたが、どれもうまく行きませんでした。 なお、impのコマンドに入ったあと、普通のコマンドプロンプトに戻る方法も教えて頂けないでしょうか。exit、bye、Ctrl+C のどれも試したが、出来ませんでした。 どうぞよろしくお願いいたします。

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

  • exp / imp について質問

    Oracle 8.1.7.0 にあるデータを【exp】にてダンプし そのデータを、 Oracle 8.1.7.4 に【imp】しました。 imp自体はエラーも出ず、正常に終了し、通常に使用できますが、そのデータを、【exp】しようとコマンドを実行しましたら、 EXP-00008: Oracleエラー 904が発生しました。 ORA-00904: 列名が無効です。 EXP-00000: エラーが発生したためエクスポートを終了します。 と、エラーが出て、 expが行えません。 8.1.7.0で expすれば良いとは思いますが、 8.1.7.4で expする方法がありましたら教えて頂きたいです。