获取数据库或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的逻辑结构

原文地址:https://www.cnblogs.com/polestar/p/3060923.html