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

 

 

你可能感兴趣的:(数据库)