Oracle导出所有序列DDL? (11克)

时间:2015-07-02 19:19:03

标签: oracle oracle11g export sequence ddl

我正在使用DBVisualizer导出整个架构,但它不会“执行”序列。

架构中有许多序列。如何批量导出DDL以生成所有序列?

谢谢!

2 个答案:

答案 0 :(得分:3)

使用此选择:

select to_char (dbms_metadata.get_ddl ('SEQUENCE', user_objects.object_name)) as ddl
  from user_objects
 where object_type = 'SEQUENCE'

答案 1 :(得分:0)

SELECT
    'DROP SEQUENCE ' || sequence_owner || '.' || sequence_name || '; ' ||
    'CREATE SEQUENCE ' || sequence_owner || '.' || sequence_name ||
        ' INCREMENT BY ' || increment_by ||
        ' START WITH ' || last_number ||
        ' MAXVALUE ' || max_value ||
        ' MINVALUE ' || min_value ||
        CASE WHEN cycle_flag = 'N' THEN ' NO' ELSE ' ' END || 'CYCLE ' ||
        CASE WHEN cache_size = 0 THEN 'NOCACHE' ELSE 'CACHE ' || cache_size END ||
        CASE WHEN order_flag = 'N' THEN ' NO' ELSE ' ' END || 'ORDER;' ddl_sql
FROM
    dba_sequences
WHERE
    sequence_owner NOT IN
        (
            'ANONYMOUS',
            'APEX_030200',
            'APEX_PUBLIC_USER',
            'APPQOSSYS',
            'AQ_ADMINISTRATOR_ROLE',
            'ARCSERVE',
            'CONNECT',
            'CTXSYS',
            'DATAPUMP_EXP_FULL_DATABASE',
            'DATAPUMP_IMP_FULL_DATABASE',
            'DBA',
            'DBAMON',
            'DBSNMP',
            'DIP',
            'EM_DD_ACC',
            'EXFSYS',
            'EXP_FULL_DATABASE',
            'EXP_USR',
            'FLOWS_FILES',
            'IMP_FULL_DATABASE',
            'JAVADEBUGPRIV',
            'LOGSTDBY_ADMINISTRATOR',
            'MDDATA',
            'MDSYS',
            'MGMT_USER',
            'NAGIOS',
            'OEM_ADVISOR',
            'OEM_MONITOR',
            'OLAPSYS',
            'OLAP_DBA',
            'OLAP_USER',
            'ORACLE_OCM',
            'ORDDATA',
            'ORDSYS',
            'OUTLN',
            'OWB$CLIENT',
            'OWBSYS',
            'OWBSYS_AUDIT',
            'RECOVERY_CATALOG_OWNER',
            'RESOURCE',
            'SCHEDULER_ADMIN',
            'SCOTT',
            'SI_INFORMTN_SCHEMA',
            'SPATIAL_CSW_ADMIN_USR',
            'SPATIAL_WFS_ADMIN_USR',
            'SYS',
            'SYSMAN',
            'SYSTEM',
            'TEST',
            'TSMSYS',
            'WMSYS',
            'WRHSE_ETL',
            'XDB'
        )
ORDER BY
    sequence_owner,
    sequence_name
;

如果序列从一开始就不存在,则可能无需删除这些序列,因此从该查询中删除该行应可以解决以下问题:如果您不想忽略导入时的许多错误。您不希望导出的sequence_owner模式序列的列表可能会有所不同-我仅在几个数据库上进行了测试。 NOT IN列表的目的是避免不需要,也可能不应该导入的系统序列。我假设如果您使用user_sequences,则可以在没有适当特权的情况下在模式上运行它。请注意,user_sequences没有sequence_owner列,因为所有者是运行它的用户。