Oracle輕鬆取得建表和索引的DDL語句

來源:互聯網
上載者:User

我們都知道在9i之前,要想獲得建表和索引的語句是一件很麻煩的事。我們可以通過export with rows=no來得到,但它的輸出因為格式的問題並不能直接拿來用。而另一種方法就是寫複雜的指令碼來查詢資料字典,但這對於一稍微複雜的對象,如IOT和巢狀表格等,還是無法查到。
  從資料字典中獲得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來確定各表之間的順序,不再詳述

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.