【工具&命令】获取数据库对象的定义(DDL)
TeacherWhat Oracle数据库技术
Keyword:
DDL 定义 Data Definition Language
可以通过以下的方法获取数据库对象的定义(DDL)。
1. 使用DBMS_METADATA.GET_DDL程序包
SQL> set pages 0
SQL> set longchunksize 3000
SQL> set long 2000000000
SQL> select dbms_metadata.get_ddl('','','') from dual;
例:
--表定义
SQL> set pages 0
SQL> set longchunksize 3000
SQL> set long 2000000000
SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual;
--索引定义
SQL> select dbms_metadata.get_ddl('INDEX','EMP_IND','SCOTT') from dual;
--用户视图定义
SQL> select dbms_metadata.get_ddl('VIEW','EMP_VIEW','SCOTT') from dual;
参考:
Home / Oracle Database Online Documentation Library, 12c Release 1 (12.1.0.2)
Database PL/SQL Packages and Types Reference
https://docs.oracle.com/database/121/ARPLS/d_metada.htm#ARPLS66885
>GET_xxx Functions
2. 使用Datapump获取DDL
--创建DUMP导出路径
create or replace directory test_dir as '';
--使用expdp的content=metadata_only仅导出metadata的DUMP
expdp / DIRECTORY= content=metadata_only dumpfile=.dmp
--使用impdp的SQLFILE从DUMP导出DDL
impdp / DIRECTORY= DUMPFILE=.dmp SQLFILE=.sql FULL=y
例:
expdp system/oracle DIRECTORY=test_dir content=metadata_only dumpfile=ddl.dmp SCHEMAS=SCOTT
impdp system/oracle DIRECTORY=test_dir SQLFILE=allsql.sql dumpfile=ddl.dmp FULL=y
3.使用v$fixed_view_definition 视图查看动态视图的定义
例:
set pagesize 0
select view_name, view_definition from
v$fixed_view_definition where view_name =upper('gv$session');
注意:v$fixed_view_definition仅能显示4000个字符,
所以查看到的视图定义有可能不完整。
4.通过DBA_VIEWS视图查看数据库中的视图定义。
例:
set long 100000
select text from dba_views where view_name='UNIFIED_AUDIT_TRAIL';