运维联盟俱乐部

 找回密码
 立即注册
查看: 1740|回复: 0

[技术专题] dbms_metadata

[复制链接]
  • TA的每日心情
    开心
    2023-8-9 11:05
  • 发表于 2020-5-30 07:33:23 | 显示全部楼层 |阅读模式
    dbms_meta包用于获取对象的ddl定义
    先格式化输出
    1. set linesize 180
    2. set pagesize 1000
    3. set long 2000
    4. EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',TRUE);
    5. EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',TRUE);
    复制代码
    --全部表空间
    1. select dbms_metadata.get_ddl('TABLESPACE',tablespace_name) from dba_tablespaces;
    复制代码
    --特定表空间
    1. select dbms_metadata.get_ddl('TABLESPACE','&ts_name') from dual;
    复制代码
    --某用户的所有表
    1. select dbms_metadata.get_ddl('TABLE',table_name,'&owner') from dba_tables where owner='&owner';
    复制代码
    --某用户的某表
    1. select dbms_metadata.get_ddl('TABLE','&table_name','&schema_name') from dual;
    复制代码
    --全部用户
    1. select dbms_metadata.get_ddl('USER',u.username) from dba_users u;
    复制代码
    --部分用户
    1. select dbms_metadata.get_ddl('USER',u.username) from dba_users u where u.username in ('NAME1','NAME2');
    复制代码
    --单个用户
    1. select dbms_metadata.get_ddl('USER','&U_NAME') from dual;
    复制代码
    --索引
    1. select dbms_metadata.get_ddl('INDEX',U.OBJECT_NAME,'HR') from dba_objects u where u.object_type ='INDEX'and u.owner='HR';
    复制代码
    --视图
    1. select dbms_metadata.get_ddl('VIEW','V_RPT_MS_USER_GATHER_KGZG','FCB_STATHB') from dual;
    复制代码
    --过程
    1. select dbms_metadata.get_ddl('PROCEDURE',u.object_name,'DBMON') from dba_objects u where u.object_type='PROCEDURE' and u.owner='DBMON';
    复制代码
    --dblink
    1. select dbms_metadata.get_ddl('DB_LINK','DBL','PUBLIC') from dual
    复制代码
    --包
    1. select DBMS_METADATA.GET_DDL('PACKAGE','PACKAGENAME','USERNAME') from dual;
    复制代码
    --包体
    1. select DBMS_METADATA.GET_DDL('PACKAGE BODY','PACKAGEBODYNAME','USERNAME') from dual;
    复制代码
    --主键约束
    1. SELECT DBMS_METADATA.GET_DDL('CONSTRAINT','CONSTRAINTNAME','USERNAME') FROM DUAL;
    复制代码
    --外键约束
    1. SELECT DBMS_METADATA.GET_DDL('REF_CONSTRAINT','REF_CONSTRAINTNAME','USERNAME') FROM DUAL;
    复制代码
    --物化视图
    1. select dbms_metadata.get_ddl('MATERIALIZED_VIEW','&MV_NAME','&OWNER') FROM DUAL;
    复制代码
    --触发器
    1. select DBMS_METADATA.GET_DDL('TRIGGER','TRIGGERNAME','USERNAME) FROM DUAL;
    复制代码
    --函数
    1. select DBMS_METADATA.GET_DDL('FUNCTION','FUNCTIONNAME','USERNAME') from DUAL
    复制代码
    --序列
    1. select dbms_metadata.get_ddl('SEQUENCE','S_I_INTERFACE_LOG','SEA') from dual;
    复制代码
    --角色授权
    1. select dbms_metadata.get_granted_ddl('ROLE_GRANT','MW_IQ') from dual;
    复制代码
    系统权限授权
    1. select dbms_metadata.get_granted_ddl('SYSTEM_GRANT','MW_IQ') from dual;
    复制代码
    --查询一个用户的创建和授权语句
    1. select dbms_metadata.get_ddl('USER','ZHYU') from dual ;
    2. select dbms_metadata.get_granted_ddl('ROLE_GRANT','ZHYU') from dual ;
    3. select dbms_metadata.get_granted_ddl('SYSTEM_GRANT','ZHYU') from dual ;
    4. select dbms_metadata.get_granted_ddl('OBJECT_GRANT','ZHYU') from dual ;
    复制代码
    如何格式化输出
    DBMS_METADATA.set_transform_param格式化输出获得DDL
    --输出信息采用缩排或换行格式化
    1. EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'PRETTY', TRUE);
    复制代码
    --确保每个语句都带分号
    1. EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SQLTERMINATOR', TRUE);
    复制代码
    --关闭表索引、外键等关联(后面单独生成)
    1. EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS', FALSE);
    2. EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'REF_CONSTRAINTS', FALSE);
    3. EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS_AS_ALTER', FALSE);
    复制代码
    --关闭存储、表空间属性
    1. EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'STORAGE', FALSE);
    2. EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'TABLESPACE', FALSE);
    复制代码
    --关闭创建表的PCTFREE、NOCOMPRESS等属性
    1. EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', FALSE);
    复制代码
    例如查询一个目录'dump'的ddl语句以及所有备授权使用的用户:
    1. set linesize 180
    2. set pagesize 1000
    3. set long 2000
    4. set heading off
    5. EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',TRUE);
    6. EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',TRUE);
    7. select dbms_metadata.get_ddl('DIRECTORY','&&DIRECTORY_NAME') as directory_ddl from dual
    8. union all
    9. SELECT DBMS_METADATA.GET_DEPENDENT_DDL('OBJECT_GRANT','&&DIRECTORY_NAME') as directory_ddl FROM DUAL;
    复制代码
    假设要读取test用户,用以下语句实现,主语用户名要uppercase
    1. set longchunksize 20000 pagesize 0 feedback off verify off trimspool on
    2. column Extracted_DDL format a1000

    3. EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',TRUE);
    4. EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',TRUE);

    5. undefine User_in_Uppercase;

    6. set linesize 1000
    7. set long 2000000000
    8. select (case
    9. when ((select count(*)
    10. from dba_users
    11. where username = '&&User_in_Uppercase' and profile <> 'DEFAULT') > 0)
    12. then chr(10)||' -- Note: Profile'||(select dbms_metadata.get_ddl('PROFILE', u.profile) AS ddl from dba_users u where u.username = '&User_in_Uppercase')
    13. else to_clob (chr(10)||' -- Note: Default profile, no need to create!')
    14. end ) from dual
    15. UNION ALL
    16. select (case
    17. when ((select count(*)
    18. from dba_users
    19. where username = '&User_in_Uppercase') > 0)
    20. then ' -- Note: Create user statement'||dbms_metadata.get_ddl ('USER', '&User_in_Uppercase')
    21. else to_clob (chr(10)||' -- Note: User not found!')
    22. end ) Extracted_DDL from dual
    23. UNION ALL
    24. select (case
    25. when ((select count(*)
    26. from dba_ts_quotas
    27. where username = '&User_in_Uppercase') > 0)
    28. then ' -- Note: TBS quota'||dbms_metadata.get_granted_ddl( 'TABLESPACE_QUOTA', '&User_in_Uppercase')
    29. else to_clob (chr(10)||' -- Note: No TS Quotas found!')
    30. end ) from dual
    31. UNION ALL
    32. select (case
    33. when ((select count(*)
    34. from dba_role_privs
    35. where grantee = '&User_in_Uppercase') > 0)
    36. then ' -- Note: Roles'||dbms_metadata.get_granted_ddl ('ROLE_GRANT', '&User_in_Uppercase')
    37. else to_clob (chr(10)||' -- Note: No granted Roles found!')
    38. end ) from dual
    39. UNION ALL
    40. select (case
    41. when ((select count(*)
    42. from V$PWFILE_USERS
    43. where username = '&User_in_Uppercase' and SYSDBA='TRUE') > 0)
    44. then ' -- Note: sysdba'||chr(10)||to_clob (' GRANT SYSDBA TO '||'"'||'&User_in_Uppercase'||'"'||';')
    45. else to_clob (chr(10)||' -- Note: No sysdba administrative Privilege found!')
    46. end ) from dual
    47. UNION ALL
    48. select (case
    49. when ((select count(*)
    50. from dba_sys_privs
    51. where grantee = '&User_in_Uppercase') > 0)
    52. then ' -- Note: System Privileges'||dbms_metadata.get_granted_ddl ('SYSTEM_GRANT', '&User_in_Uppercase')
    53. else to_clob (chr(10)||' -- Note: No System Privileges found!')
    54. end ) from dual
    55. UNION ALL
    56. select (case
    57. when ((select count(*)
    58. from dba_tab_privs
    59. where grantee = '&User_in_Uppercase') > 0)
    60. then ' -- Note: Object Privileges'||dbms_metadata.get_granted_ddl ('OBJECT_GRANT', '&User_in_Uppercase')
    61. else to_clob (chr(10)||' -- Note: No Object Privileges found!')
    62. end ) from dual
    63. /
    复制代码
    支持获取ddl的object type scope
    1. ORACLE 9.0.1
    2. Type Name                       Meaning

    3. ASSOCIATION                     associate statistics
    4. AUDIT                           audits of SQL statements
    5. AUDIT_OBJ                       audits of schema objects
    6. CLUSTER                         clusters
    7. COMMENT                         comments
    8. CONSTRAINT                      constraints
    9. CONTEXT                         application contexts
    10. DB_LINK                         database links
    11. DEFAULT_ROLE                    default roles
    12. DIMENSION                       dimensions
    13. DIRECTORY                       directories
    14. FUNCTION                        stored functions
    15. INDEX                           indexes
    16. INDEXTYPE                       indextypes
    17. JAVA_SOURCE                     java sources
    18. LIBRARY                         external procedure libraries
    19. MATERIALIZED_VIEW               materialized views
    20. MATERIALIZED_VIEW_LOG           materialized view logs
    21. OBJECT_GRANT                    object grants
    22. OPERATOR                        operators
    23. OUTLINE                         stored outlines
    24. PACKAGE                         stored packages
    25. PACKAGE_SPEC                    package specifications
    26. PACKAGE_BODY                    package bodies
    27. PROCEDURE                       stored procedures
    28. PROFILE                         profiles
    29. PROXY                           proxy authentications
    30. REF_CONSTRAINT                  referential constraint
    31. ROLE                            roles
    32. ROLE_GRANT                      role grants
    33. ROLLBACK_SEGMENT                rollback segments
    34. SEQUENCE                        sequences
    35. SYNONYM                         synonyms
    36. SYSTEM_GRANT                    system privilege grants
    37. TABLE                           tables
    38. TABLESPACE                      tablespaces
    39. TABLESPACE_QUOTA                tablespace quotas
    40. TRIGGER                         triggers
    41. TRUSTED_DB_LINK                 trusted links
    42. TYPE                            user-defined types
    43. TYPE_SPEC                       type specifications
    44. TYPE_BODY                       type bodies
    45. USER                            users
    46. VIEW                            views
    47. XMLSCHEMA                       XML schema

    48. ORACLE 10.1.0
    49. Type Name                       Meaning

    50. AQ_QUEUE                        queues
    51. AQ_QUEUE_TABLE                  additional metadata for queue tables
    52. AQ_TRANSFORM                    transforms
    53. DATABASE_EXPORT                 all metadata objects in a database
    54. FGA_POLICY                      fine-grained audit policies
    55. INDEX_STATISTICS                indextypes
    56. JOB                             scheduler jobs (Current support scheduled for 11.2 .. See NOTE:567504.1)  
    57. REFRESH_GROUP                   refresh groups
    58. RESOURCE_COST                   resource cost info
    59. RLS_CONTEXT                     driving contexts for enforcement of fine-grained access-control policies
    60. RLS_GROUP                       fine-grained access-control policy groups
    61. RLS_POLICY                      fine-grained access-control policies
    62. RMGR_CONSUMER_GROUP             resource consumer groups
    63. RMGR_INTITIAL_CONSUMER_GROUP    assign initial consumer groups to users
    64. RMGR_PLAN                       resource plans
    65. RMGR_PLAN_DIRECTIVE             resource plan directives
    66. SCHEMA_EXPORT                   sequences
    67. TABLE_DATA                      metadata describing row data for a table, nested table, or partition
    68. TABLE_EXPORT                    metadata for a table and its associated objects
    69. TABLE_STATISTICS                precomputed statistics on tables
    70. TRANSPORTABLE_EXPORT            metadata for objects in a transportable tablespace set

    71. ORACLE 10.2.0
    72. No Additions to the above..
    73. ORACLE 11.1.0
    74. No Additions to the above.
    75. ORACLE 11.2.0
    76. No Additions to the above.
    复制代码
    How to Capture DDL for Scheduler Jobs (Doc ID 567504.1)
    Please note:  The DBMS_METADATA package cannot be used to capture the DDL of jobs scheduled using DBMS_JOB. We can use the following workaround to capture the DDL of jobs scheduled using DBMS_JOB.
    1. spool on
    2. select 'exec dbms_job.isubmit(job=>'||job||',what=>'''||what||''',next_date=>'''||next_date||''',interval=>'''||interval||''',no_parse=>TRUE);' from dba_jobs;
    3. spool off
    复制代码


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    运维联盟俱乐部 ( 冀ICP备19036648号 )

    GMT+8, 2024-5-17 11:47 , Processed in 0.054427 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表