zoukankan      html  css  js  c++  java
  • 获取数据库或SHEME的DDL语句

      在9i以后,可以利用DBMS_METADATA.GET_DDL包得到数据库的对象的ddl脚本。以下语句均在sqlplus中执行

    1. 获取单个的建表、视图和建索引的语法

     1 set pagesize 0
     2 set long 90000
     3 set feedback off
     4 set echo off
     5 spool DEPT.sql
     6   --以下参数可以根据实际情况打开或关闭
     7     --输出信息采用缩排或换行格式化
     8     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'pretty', true);
     9     --确保每个语句都带分号
    10     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'sqlterminator', true);
    11     --关闭表索引、外键等关联(后面单独生成)
    12     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'constraints', false);
    13     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'ref_constraints', false);
    14     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'constraints_as_alter', false);
    15     --关闭存储、表空间属性
    16     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'storage', false);
    17     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'tablespace', false);
    18     --关闭创建表的PCTFREE、NOCOMPRESS等属性
    19     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'segment_attributes', false);
    20     
    21     --
    22     SELECT DBMS_METADATA.GET_DDL('TABLE','TAB_NAME','HR') FROM DUAL; --表名(TAB_NAME)   SECHEMA(HR)
    23     --视图
    24     SELECT DBMS_METADATA.GET_DDL('VIEW','VIEW_NAME','HR') FROM DUAL; 
    25     --索引
    26     SELECT DBMS_METADATA.GET_DDL('INDEX','IDX_NAME','HR') FROM DUAL;
    27 spool off;

    2. 获取一个SCHEMA下的所有建表、视图和建索引的语法,以HR为例:

     1 2. 获取一个SCHEMA下的所有建表、视图和建索引的语法,以HR为例:
     2 set pagesize 0
     3 set long 90000
     4 set feedback off
     5 set echo off
     6 spool schema.sql
     7 connect HR/HR12345; --当前所连接用户
     8 
     9     --输出信息采用缩排或换行格式化
    10     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'pretty', true);
    11     --确保每个语句都带分号
    12     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'sqlterminator', true);
    13     --关闭表索引、外键等关联(后面单独生成)
    14     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'constraints', false);
    15     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'ref_constraints', false);
    16     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'constraints_as_alter', false);
    17     --关闭存储、表空间属性
    18     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'storage', false);
    19     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'tablespace', false);
    20     --关闭创建表的PCTFREE、NOCOMPRESS等属性
    21     exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'segment_attributes', false);
    22     
    23     --
    24     SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u;--获取当前用户的DDL语句
    25     --视图
    26     SELECT DBMS_METADATA.GET_DDL('VIEW',u.VIEW_name) FROM USER_VIEWS u;
    27     --索引
    28     SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name) FROM USER_INDEXES u;
    29 spool off;

    3. 获取HR下的全部存储过程的语法

     1 set pagesize 0
     2 set long 90000
     3 set feedback off
     4 set echo off
     5 spool procedures.sql 
     6 connect HR/HR12345;
     7   
     8   
     9     select   DBMS_METADATA.GET_DDL('PROCEDURE',u.object_name) 
    10     from     user_objects u 
    11     where     object_type = 'PROCEDURE';
    12 spool off;

    4. 获取HR下的全部函数的语法

     1 set pagesize 0
     2 set long 90000
     3 set feedback off
     4 set echo off
     5 spool function.sql  
     6 connect HR/HR12345;
     7     select   DBMS_METADATA.GET_DDL('FUNCTION',u.object_name) 
     8     from     user_objects u 
     9     where    object_type = 'FUNCTION';
    10 spool off;

    5.得到所有表空间的ddl语句

     1 set pagesize 0
     2 set long 90000
     3 set feedback off
     4 set echo off
     5 spool tablespace.sql
     6 
     7     SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name)
     8     FROM DBA_TABLESPACES TS;
     9 
    10 spool off;

    6.得到所有创建用户的ddl

     1 set pagesize 0
     2 set long 90000
     3 set feedback off
     4 set echo off
     5 spool user.sql
     6 
     7     SELECT DBMS_METADATA.GET_DDL('USER',U.username) 
     8     FROM DBA_USERS U;
     9 
    10 spool off;

       通过以上sql的组合,可以获取到一个数据库或SCHEMA的逻辑结构

  • 相关阅读:
    Linux 管道命令(pipe)
    SQLITE入门逐步讲解SQLITE命令行(二)
    用flash上传多个图片、文件的插件TinyBrowser
    PHP的时区问题GMT8
    解决Apache+PHP服务器提示HTTP 500问题
    SQLITE入门逐步讲解SQLITE命令行(四)
    SQLITE入门逐步讲解SQLITE命令行(五)
    linux tar命令使用范例
    SQLITE入门逐步讲解SQLITE命令行(六)
    Tinymce配置智能的Url
  • 原文地址:https://www.cnblogs.com/polestar/p/3060923.html
Copyright © 2011-2022 走看看