- - PR -
OracleテーブルのOWNERの変更方の件
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-11-14 11:07
Oracle8iでテーブルのOWNERを変更したいと思っています。
テーブルをDROPしてからCREATEし直すしか方法はないんでしょうか? ALTER TABLE文などでは無理なのでしょうか? どなたかご存知の方いらっしゃいましたらご教授下さい。 宜しくお願い致します。 |
|
投稿日時: 2005-11-14 17:38
ALTER TABLE MOVE〜というのはあるけれど、これは表領域を移動するだけだったと記憶しています。
以下のような方法ではいかがでしょうか。 1.EXP/IMPユーティリティ 対象のTABLEをExportして、Import時にFROMUSERとTOUSER指定をする。 2.CREATE TABLE CREATE TABLE BBB.TESTTBL SELECT * FROM AAA.TESTTBLというように、 データをコピーするイメージでテーブルを再作成。 |
|
投稿日時: 2005-11-14 18:32
いーたさん、お返事ありがとうございます。
今回なぜ、ALTER TABLE文などでOWNERを変えたかったかとういと、 テーブル以外にもシノニムやインデックスもオーナーを変える必要があり数が多かったためなのです。説明不足で申し訳ありませんでした。 1.EXP/IMPユーティリティ 前のデータについては消してもよかったので、EXP/IMPする必要はありませんでした。 2.CREATE TABLE こんな方法もあるのですね。ただ、やはり前のデータは必要ないのでただ作り直したいと思います。 |
|
投稿日時: 2005-11-15 18:52
EXP/IMPユーティリティって、テーブル以外にもビューやシノニム、ストアドプロシジャーななども移行できるので、本当に多数のオブジェクトを移動する際には便利だと思いますよ。
データが不要なら、オプションで指定もできますし。 |
|
投稿日時: 2005-11-15 20:43
既存テーブルのオーナーを直接変更することはでき、るかもしれません←ちょっとあやふや![]() けれども、対象の既存テーブルに対して ALTER TABLE を発行するのではなく、作成されたテーブルの名前とオーナーの対応などを管理しているシステムテーブルを直接操作する方法です。 操作を誤ると非常に危険であり、他のシステムテーブルとの整合性を破壊するかもしれないため、ここでは具体的にシステムテーブル名や SQL を挙げるのは控えます。 (新基準の Oracle Master Gold を取得している方ならご存知と思います) 直接操作は不可能ではないと考えますが、より危険性の少ない Desmo さんが書かれた方法を推奨します。 |
|
投稿日時: 2005-11-16 11:00
Desmoさん、Gioさんお返事ありがとうございます。
調べてみたんですけど、EXP/IMPユーティリティはOWNERを指定してそのOWNERのオブジェクトを全て処理できるみたいなのでこの方法を考えてみたいと思います。 この方法でユーザを変えてインポートすればOWNERも変わるんですよね。インポート時もOWNERを指定するのかどうかがよくわかりませんが。 危険でも直接操作する方法もあるんですね、参考になりました。 |
1