服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Mssql|Oracle|Redis|

服务器之家 - 数据库 - Oracle - Oracle轻松取得建表和索引的DDL语句

Oracle轻松取得建表和索引的DDL语句

2019-10-27 16:33Oracle教程网 Oracle

我们都知道在9i之前,要想获得 建表 和 索引 的语句是一件很麻烦的事。我们可以通过exportwithrows=no来得到,但它的输出因为格式的问题并不能直接拿来用。而另一种方法就是写复杂的脚本来查询数据字典,但这对于一稍微复杂的

我们都知道在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/[email protected];    
  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来确定各表之间的顺序,不再详述  

延伸 · 阅读

精彩推荐
  • OracleOracle也有注入漏洞

    Oracle也有注入漏洞

    近期,MSN、江民等知名网站相继受到了黑客的威胁和攻击,一时间网络上风声鹤唳。本报编辑部接到本文作者(炽天使)的电话,他详细讲述了发现国内最大...

    Oracle教程网4592019-10-23
  • Oracle在Linux下安装Oracle

    在Linux下安装Oracle

    在Linux下安装Oracle。由于Oracle自身比较复杂,在Linux环境下安装要涉及很多方面的因素。本文分两个方面介绍在Linux RedHat 6.0环境下Oracle 8.0.5的安装。 ...

    Oracle教程网2762019-10-20
  • Oracle用Oracle并行查询发挥多CPU的威力

    用Oracle并行查询发挥多CPU的威力

    参数 让我们进一步看看CPU的数量是如何影响这些参数的。 参数fast_start_parallel_rollback Oracle并行机制中一个令人兴奋之处是在系统崩溃时调用并行回滚得能力...

    Oracle技术网4922019-10-23
  • OracleORACLE 常用的SQL语法和数据对象

    ORACLE 常用的SQL语法和数据对象

    ORACLE 常用的SQL语法和数据对象...

    ORACLE教程网3682019-10-27
  • Oracle收集的ORACLE函数大全

    收集的ORACLE函数大全

    收集的ORACLE函数大全...

    ORACLE教程网1182019-10-27
  • Oracle数据库Oracle数据的异地的自动备份

    数据库Oracle数据的异地的自动备份

    在大型商业应用中,数据的异地容灾备份十分重要,也必不可少。笔者根据自己的实践经验,设计了一套简洁地实现异地数据自动备份的方法,可供 数据库...

    Oracle教程网4842019-10-21
  • OracleOracle EXP和IMP用法和介绍

    Oracle EXP和IMP用法和介绍

    OracleEXP和IMP用法和介绍。 1、Export/Import的用处 Oracle Export/Import工具用于在数据库之间传递数据。 Export从数据库中导出数据到dump文件中 Import从dump文件中到入...

    Oracle教程网4612019-10-22
  • OracleLinux系统下导出ORACLE数据库出现Exporting questionable statistics.错误 处理

    Linux系统下导出ORACLE数据库出现Exporting questionable statistics.错误

    Linux系统下导出ORACLE数据库出现Exporting questionable statistics.错误处理方法...

    ORACLE教程网3542019-10-27
北京塞车全天计划精准版