2017-04-27 8 views
0

Oracleの別のスキーマの索引および制約とともに、別の表から表を作成する必要があります。私は約CTASの構文を知っていますが、それにインデックスと制約はありません。それを行う方法はありますか?Oracleオブジェクトの作成とフラッシュバック

また、プロシージャ、トリガ、またはパッケージを削除した後にフラッシュバックする方法はありますか?

答えて

0

Oracleのエクスポートおよびインポート・ユーティリティ(expdpおよびimpdp)を使用すると、Oracle表全体(構造、内容、索引、制約、トリガーなど)を簡単にコピーできます。これらは、指定したパラメーターを使用してデータベース・サーバー上で実行するコマンド行ユーティリティーです。また、OEM(Oracle Enterprise Manager)を使用してこれらを実行することもできます。それらは、少なくとも1つの「論理ディレクトリ」が定義されていることに依存していることに注意してください。「ダンプ」ファイルはエクスポートによって書き込まれ、インポートによって読み込まれることができます。

この方法は、あるスキーマから別のスキーマに、またはあるデータベースから別のスキーマにテーブルをコピーし、同じテーブル名を保持する場合に適しています。ただし、同じスキーマにコピー・テーブルを作成し、名前が異なる場合は、プロセスが複雑になります。引き続きエクスポートを使用することはできますが、実際のインポートを直接行う代わりにインポートを行うと、エクスポートファイル内で見つかったすべてのSQLコマンドを含むテキストファイルが作成されます。次に、そのテキストファイルを編集して、変更する必要があるインデックス、制約、トリガ名を変更し、それらのコマンドのテーブル名を新しいtable_nameに変更します(ただし、 "create table ..."コマンドではテーブル名は変更しないでください)。 )。その後、既存のテーブルの名前を変更して、スクリプトファイルから「create table ...」コマンド(元のtable_nameを使用)を実行します。次に、データを取得するためにインポートを実行します。次に、新しいテーブルの名前を変更したい名前に変更し、元のテーブルの名前を元の名前に変更します。その後、スクリプトファイルから他のSQLスクリプトを手動で実行します。実際のデータインポートを実行するときに、これらのトリガー、制約およびインデックスを適所に置くことは望ましくありません。

+0

回答ありがとうございました!!!同じデータベース内のあるスキーマから別のスキーマへ同じ名前のテーブルをコピーするためのexpdp/impdpの構文例を1つだけ持つことはできますか? –

+0

impdpユーザー/パススキーマ= schema1ディレクトリ= dumpdir \ remap_schema = schema1:schema2 \ dumpfile = schema1.dmp \ logfile = impdp_schema2.log – MileP

+0

これはスキーマをインポートする方法の例です。詳細は、http://dba-oracle.com/t_oracle_expdp_tips.htmを参照してください。それがあなたを助けてくれることを願っています。 – MileP

0

最も簡単なアプローチは、DDL文を他のアプリケーションコードと同様に扱い、ソース管理リポジトリにスクリプトとして保持することです。

ただし、イベント終了後に賢明なことは簡単です。スキーマが無料のファイアゾーンである環境で作業している場合は、さまざまなオプションがあります。

最も良いことは、DBMS_METADATAを使用してDDL文を再作成することです。これらはスクリプトとして保存したり、他のスキーマで実行したり、どこかに保存してバックアップしたり、理想的にはソース管理したりすることができます。

テーブルとその従属オブジェクトのすべてのDDLを生成するのはかなり簡単です。 DBMS_METADATA関数は理想的なものの、SQL * Plusでそれらをスプールするのに十分な単純ではないのCLOB、戻る:個々のオブジェクトタイプを指定する必要が

SQL> set long 10000 
SQL> set heading off 
SQL> spool create_tab_t23.sql 
SQL> select dbms_metadata.get_ddl('TABLE', 'T23') from dual; 
SQL> select dbms_metadata.get_dependent_ddl('INDEX', 'T23') from dual; 
SQL> select dbms_metadata.get_dependent_ddl('TRIGGER', 'T23') from dual; 
SQL> spool off 

を吐き気のビットです。幸いなことに、ほとんどのIDE(Oracle SQL Developer、PLSQL Developer、TOADなど)は、このすべてを処理するための便利な右クリックメニューオプションを提供しています。

関連する問題