Oracle

  (最終更新日:2014.08.29)

Oracleで全てのテーブルやインデックスのCreate文を作成する方法

Oracle で指定したユーザーが所有している全てのテーブルやインデックスのCreate文(DDL文)を作成するには dbms_metadata.get_ddl パッケージを利用する必要があります。

但し残念な点として、PostgreSQLなどと違って完全なDDL文が生成されるわけではないので、作成後に不要な行を削除したりする必要があります。ご注意を。

テーブルのCreate文を作成する

全テーブルの create table 文を作成します。
まずはoracleユーザーでSQL*Plusに接続してパラメータをセットします。

$ sqlplus sys as sysdba
SQL> set pages 0
SQL> set lines 200
SQL> set long 65535
SQL> set longc 65535
SQL> set trimspool on

続いて必要であればオプションを入力します。
オプションとしては例えば下記のようなものがありますが、無理して指定する必要もありません。

//セミコロンを付加
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM( DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',TRUE );

//ストレージ句を無効に
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM( DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',FALSE );

//表領域の指定を無効に
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM( DBMS_METADATA.SESSION_TRANSFORM,'TABLESPACE',FALSE );

spool を指定して出力されるファイルを指定します。

SQL> spool /tmp/create_table.sql

Create文を生成します。

SQL> select dbms_metadata.get_ddl('TABLE',a.table_name,a.owner) from dba_all_tables a where a.owner = '[ユーザー]';

spool を停止します。

SQL> spool off

これでspoolで指定したファイル(例 /tmp/create_table.sql )にCreate table文が作成されているはずです。

インデックスのCreate文を作成する

全インデックスの create index 文を作成します。
まずはoracleユーザーでSQL*Plusに接続してパラメータをセットします。

$ sqlplus sys as sysdba
SQL> set pages 0
SQL> set lines 200
SQL> set long 65535
SQL> set longc 65535
SQL> set trimspool on

続いて必要であればオプションを入力します。
オプションは先ほどの create table で利用したものが使えます。

//セミコロンを付加
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM( DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',TRUE );

//ストレージ句を無効に
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM( DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',FALSE );

//表領域の指定を無効に
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM( DBMS_METADATA.SESSION_TRANSFORM,'TABLESPACE',FALSE );

spool を指定して出力されるファイルを指定します。

SQL> spool /tmp/create_index.sql

Create文を生成します。

SQL> select dbms_metadata.get_ddl('INDEX',index_name,owner) from dba_indexes where owner = select dbms_metadata.get_ddl('INDEX',index_name,owner) from dba_indexes where owner = '[ユーザー]';

spool を停止します。

SQL> spool off

これでspoolで指定したファイル(例 /tmp/create_index.sql )にCreate index文が作成されているはずです。

スポンサーリンク
スポンサーリンク

関連記事

  1. Oracle

    【Oracle】統計情報をCronで手動更新する為のスクリプト

    Oracleの統計情報を手動で(といってもCronの自動実行で)更新す…

  2. Oracle

    アーカイブログを削除する方法

    アーカイブログ・モードの時にガンガン作成されるアーカイブログ・…

  3. Oracle

    Database linkのimpdpでORA-39113エラーが発生した原因

    Oracle Database SE 10.2.0.1 から Orac…

  4. Oracle

    【Oracle】テーブル指定で統計情報をバックアップ、インポートする方法とポイント

    Oracle Databaseで、テーブルを指定して統計情報をバックア…

  5. Oracle

    長時間動いているセッション(SQL)の情報を取得するSQL

    Oracleで長時間稼働している処理(SQL)の情報を取得するSQLが…

  6. Oracle

    【SQL*Plus】SYSDBA権限でリモートサーバに簡易接続ネーミングで接続する方法

    リモートのOracleサーバにSQL*Plusで接続する際に、SYSD…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

最近の記事

  1. HP 1950スイッチ:WEB管理画面からデフォルトゲートウ…
  2. HP 1950スイッチ:コマンドでIPの設定をする方法
  3. NFSマウントでの『間違ったファイルシステムタイプ』エラーの…
  4. 【CentOS 7】iptablesの使い方と設定内容を確認…
  5. 【HULFTメモ】一般ユーザーでのコマンド実行時にhulft…
PAGE TOP