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

猜你喜欢

转载自yunfubaoyang.iteye.com/blog/1860024