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

Oracle export all sequence DDL? (11g)

我正在使用 DBVisualizer 导出整个模式,但它不会 'do' 序列。

架构中有几十个序列。如何批量导出DDL生成所有序列?

谢谢!

使用这个select:

select to_char (dbms_metadata.get_ddl ('SEQUENCE', user_objects.object_name)) as ddl
  from user_objects
 where object_type = 'SEQUENCE'
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 列,因为所有者是 运行 使用它的用户。