獲取數據庫中對象的DDL語句

從數據字典中獲得DDL語句是經常要用的,特別是在系統升級/重建的時候。在Oracle 9i中,我們可以直接通過執行dbms_metadata從數據字典中查處DDL語句。使用這個功能強大的工具,我們可以獲得單個對象或整個SCHEMA的DDL語句。最好不過的是因爲它使用起來很簡單。
  
  1、獲得單個表和索引DDL語句的方法:
   set heading off; 
   set echo off;
   Set pages 999; 
   set long 90000; 
   spool get_single.sql 
   select dbms_metadata.get_ddl('TABLE','SZT_PQSO2','SHQSYS') from dual; 

            select dbms_metadata.get_ddl('INDEX','INDXX_PQZJYW','SHQSYS') from dual;
   spool off; 
  下面是輸出。我們只要把建表/索引語句取出來在後面加個分號就可以直接運行了。
  
   SQL> select dbms_metadata.get_ddl('TABLE','SZT_PQSO2','SHQSYS') from dual;
  
   CREATE TABLE "SHQSYS"."SZT_PQSO2" 
    ( "PQBH" VARCHAR2(32) NOT NULL ENABLE,
     "ZJYW" NUMBER(10,0),
     "CGSO" NUMBER(10,0) NOT NULL ENABLE,
     "SOLS" VARCHAR2(17),
     "SORQ" VARCHAR2(8),
     "SOWR" VARCHAR2(8),
     "SOCL" VARCHAR2(6),
     "YWHM" VARCHAR2(10),
     "YWLX" VARCHAR2(6)
    )
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
    STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
    TABLESPACE "DATA1"   
  
   SQL> select dbms_metadata.get_ddl('INDEX','INDXX_PQZJYW','SHQSYS') from dual;
  
   CREATE INDEX "SHQSYS"."INDXX_PQZJYW" ON "SHQSYS"."SZT_PQSO2" ("ZJYW")
    PCTFREE 10 INITRANS 2 MAXTRANS 255
    STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) 
   TABLESPACE "DATA1"
   
   SQL> 
   SQL> spool off;
  2、獲得整個SCHEMA DDL語句的方法:
   set pagesize 0
   set long 90000
   set feedback off
   set echo off
   spool get_schema.sql
   connect shqsys/shqsys@hawk1;
   SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
   FROM USER_TABLES u; 
   SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name)
   FROM USER_INDEXES u; 
   spool off;
  需要注意的是,當我們的表中有外健(參照約束)時,我們需要判別參照表之間的順序,確保重建時按照合理的順序進行。你可以通過查詢dba_constraints and dba_cons_columns來確定各表之間的順序,不再詳述。

          另外,其它對象也類似可以獲取到其DDL語句。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章