Oracleの別のスキーマの索引および制約とともに、別の表から表を作成する必要があります。私は約CTAS
の構文を知っていますが、それにインデックスと制約はありません。それを行う方法はありますか?Oracleオブジェクトの作成とフラッシュバック
また、プロシージャ、トリガ、またはパッケージを削除した後にフラッシュバックする方法はありますか?
Oracleの別のスキーマの索引および制約とともに、別の表から表を作成する必要があります。私は約CTAS
の構文を知っていますが、それにインデックスと制約はありません。それを行う方法はありますか?Oracleオブジェクトの作成とフラッシュバック
また、プロシージャ、トリガ、またはパッケージを削除した後にフラッシュバックする方法はありますか?
Oracleのエクスポートおよびインポート・ユーティリティ(expdpおよびimpdp)を使用すると、Oracle表全体(構造、内容、索引、制約、トリガーなど)を簡単にコピーできます。これらは、指定したパラメーターを使用してデータベース・サーバー上で実行するコマンド行ユーティリティーです。また、OEM(Oracle Enterprise Manager)を使用してこれらを実行することもできます。それらは、少なくとも1つの「論理ディレクトリ」が定義されていることに依存していることに注意してください。「ダンプ」ファイルはエクスポートによって書き込まれ、インポートによって読み込まれることができます。
この方法は、あるスキーマから別のスキーマに、またはあるデータベースから別のスキーマにテーブルをコピーし、同じテーブル名を保持する場合に適しています。ただし、同じスキーマにコピー・テーブルを作成し、名前が異なる場合は、プロセスが複雑になります。引き続きエクスポートを使用することはできますが、実際のインポートを直接行う代わりにインポートを行うと、エクスポートファイル内で見つかったすべてのSQLコマンドを含むテキストファイルが作成されます。次に、そのテキストファイルを編集して、変更する必要があるインデックス、制約、トリガ名を変更し、それらのコマンドのテーブル名を新しいtable_nameに変更します(ただし、 "create table ..."コマンドではテーブル名は変更しないでください)。 )。その後、既存のテーブルの名前を変更して、スクリプトファイルから「create table ...」コマンド(元のtable_nameを使用)を実行します。次に、データを取得するためにインポートを実行します。次に、新しいテーブルの名前を変更したい名前に変更し、元のテーブルの名前を元の名前に変更します。その後、スクリプトファイルから他のSQLスクリプトを手動で実行します。実際のデータインポートを実行するときに、これらのトリガー、制約およびインデックスを適所に置くことは望ましくありません。
最も簡単なアプローチは、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など)は、このすべてを処理するための便利な右クリックメニューオプションを提供しています。
回答ありがとうございました!!!同じデータベース内のあるスキーマから別のスキーマへ同じ名前のテーブルをコピーするためのexpdp/impdpの構文例を1つだけ持つことはできますか? –
impdpユーザー/パススキーマ= schema1ディレクトリ= dumpdir \ remap_schema = schema1:schema2 \ dumpfile = schema1.dmp \ logfile = impdp_schema2.log – MileP
これはスキーマをインポートする方法の例です。詳細は、http://dba-oracle.com/t_oracle_expdp_tips.htmを参照してください。それがあなたを助けてくれることを願っています。 – MileP