liguofeng29’s blog

個人勉強用ブログだっす。

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 (ディメンション)

JAVA_SOURCE (Javaソース)

LIBRARY (外部プロシージャ・ライブラリ)

MATERIALIZED_VIEW (マテリアライズド・ビュー)

PACKAGE_SPEC (パッケージ仕様部)

PACKAGE_BODY (パッケージ本体部)

REF_CONSTRAINT (参照制約)

SEQUENCE (順序)

TYPE_SPEC (タイプ指定)

TYPE_BODY (タイプ本体)

XMLSCHEMA (XMLスキーマ)