Oracle - DDL抽出(DBMS_METADATA.GET_DDL)
[詳細]
DBMS_METADATA.GET_DDLファンクションを使用して定義情報を抽出します。
手順は以下のようになります。SQL*Plusを使用しています。
1.出力のフォーマットを整形します。
DBMS_METADATA.GET_DDL は CLOB 型で出力されますので、longシステム
変数によって出力時のフォーマットを変更します。
SQL> set pages 0
SQL> set longchunksize 3000
SQL> set long 2000000000
2.該当のオブジェクトの定義を抽出します。
以下で表・索引・表領域の場合の例を示します。
例1)SCOTT ユーザの EMP テーブルの定義を抽出する場合
SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual;
CREATE TABLE "SCOTT"."EMP"
( "EMPNO" NUMBER(4,0) NOT NULL ENABLE,
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0)
) PCTFREE 0 PCTUSED 40 INITRANS 1 MAXTRANS 255 COMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SYSTEM"
例2)SCOTT ユーザの EMP テーブルに付与されている EMP_IND インデックス
の定義を抽出する場合
SQL> select dbms_metadata.get_ddl('INDEX','EMP_IND','SCOTT') from dual;
CREATE INDEX "SCOTT"."EMP_IND" ON "SCOTT"."EMP" ("EMPNO", "ENAME")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SYSTEM"
例3)SYSTEM 表領域の定義を抽出する場合
SQL> select dbms_metadata.get_ddl('TABLESPACE','SYSTEM') from dual;
CREATE TABLESPACE "SYSTEM" DATAFILE
'/home/jpsun3127/ora9202s/app/oracle/oradata/ora9202s/system01.dbf'
SIZE 262144000 REUSE
AUTOEXTEND ON NEXT 10485760 MAXSIZE UNLIMITED
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT
MANUAL
-- 抽出可能オブジェクト
FUNCTION (ストアド・ファンクション)
INDEX (索引)
INDEXTYPE (索引タイプ)
OPERATOR (演算子)
PACKAGE (ストアド・パッケージ)
PROCEDURE (ストアド・プロシージャ)
SYNONYM (シノニム)
TABLE (表)
TRIGGER (トリガー)
TYPE (ユーザ定義型)
VIEW (ビュー)
CLUSTER (クラスタ)
CONSTRAINT (制約)
DB_LINK (データベース・リンク)
DIMENSION (ディメンション)
LIBRARY (外部プロシージャ・ライブラリ)
MATERIALIZED_VIEW (マテリアライズド・ビュー)
PACKAGE_SPEC (パッケージ仕様部)
PACKAGE_BODY (パッケージ本体部)
REF_CONSTRAINT (参照制約)
SEQUENCE (順序)
TYPE_SPEC (タイプ指定)
TYPE_BODY (タイプ本体)