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