sql >> データベース >  >> RDS >> Oracle

Oracleスキーマ(スクリプト可能)のDDL全体を生成するにはどうすればよいですか?

    SQL*Plusおよびdbms_metadataパッケージを介してスキーマをファイルにスプールできます。次に、sedを使用してスキーマ名を別の名前に置き換えます。これは、Oracle10以降で機能します。

    sqlplus<<EOF
    set long 100000
    set head off
    set echo off
    set pagesize 0
    set verify off
    set feedback off
    spool schema.out
    
    select dbms_metadata.get_ddl(object_type, object_name, owner)
    from
    (
        --Convert DBA_OBJECTS.OBJECT_TYPE to DBMS_METADATA object type:
        select
            owner,
            --Java object names may need to be converted with DBMS_JAVA.LONGNAME.
            --That code is not included since many database don't have Java installed.
            object_name,
            decode(object_type,
                'DATABASE LINK',      'DB_LINK',
                'JOB',                'PROCOBJ',
                'RULE SET',           'PROCOBJ',
                'RULE',               'PROCOBJ',
                'EVALUATION CONTEXT', 'PROCOBJ',
                'CREDENTIAL',         'PROCOBJ',
                'CHAIN',              'PROCOBJ',
                'PROGRAM',            'PROCOBJ',
                'PACKAGE',            'PACKAGE_SPEC',
                'PACKAGE BODY',       'PACKAGE_BODY',
                'TYPE',               'TYPE_SPEC',
                'TYPE BODY',          'TYPE_BODY',
                'MATERIALIZED VIEW',  'MATERIALIZED_VIEW',
                'QUEUE',              'AQ_QUEUE',
                'JAVA CLASS',         'JAVA_CLASS',
                'JAVA TYPE',          'JAVA_TYPE',
                'JAVA SOURCE',        'JAVA_SOURCE',
                'JAVA RESOURCE',      'JAVA_RESOURCE',
                'XML SCHEMA',         'XMLSCHEMA',
                object_type
            ) object_type
        from dba_objects 
        where owner in ('OWNER1')
            --These objects are included with other object types.
            and object_type not in ('INDEX PARTITION','INDEX SUBPARTITION',
               'LOB','LOB PARTITION','TABLE PARTITION','TABLE SUBPARTITION')
            --Ignore system-generated types that support collection processing.
            and not (object_type = 'TYPE' and object_name like 'SYS_PLSQL_%')
            --Exclude nested tables, their DDL is part of their parent table.
            and (owner, object_name) not in (select owner, table_name from dba_nested_tables)
            --Exclude overflow segments, their DDL is part of their parent table.
            and (owner, object_name) not in (select owner, table_name from dba_tables where iot_type = 'IOT_OVERFLOW')
    )
    order by owner, object_type, object_name;
    
    spool off
    quit
    EOF
    
    cat schema.out|sed 's/OWNER1/MYOWNER/g'>schema.out.change.sql
    

    すべてをスクリプトに入れて、cron(スケジューラー)を介して実行します。高度な機能を使用する場合、オブジェクトのエクスポートは難しい場合があります。上記のコードにさらにいくつかの例外を追加する必要がある場合でも、驚かないでください。



    1. SQL Serverで無効になっているすべての外部キー制約を返す方法(T-SQLの例)

    2. データソースを構成せずにODBCリンクサーバーを作成する

    3. Rails 3.1:時間範囲内のレコードのPostgresへのクエリ

    4. 適切に永続化された計算列