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
列,因为所有者是 运行 使用它的用户。
我正在使用 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
列,因为所有者是 运行 使用它的用户。