Oracle UNDO表領域を一時的に作業用切替えた時のメモ


## 内容

大量データ投入作業によるUNDO表領域の肥大化が懸念されたため、一時的に作業用UNDO表領域を作成し切替えた時の作業メモ

## 手順
1. 現在の状況確認

    ```sql
    SQL> SELECT TABLESPACE_NAME, FILE_NAME,BYTES/1024/1024 MBYTES 
    FROM DBA_DATA_FILES 
    WHERE TABLESPACE_NAME IN (
    SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE CONTENTS='UNDO');
    
    TABLESPACE_NAME FILE_NAME                                              MBYTES
    --------------- -------------------------------------------------- ----------
    UNDOTBS1        /u01/app/oracle/oradata/TEST01/undotbs01.dbf               100

    ```


1. 作業用UNDO表領域(UNDOTBS_TEMP サイズ1G)を作成

    ```sql
    SQL> CREATE UNDO TABLESPACE UNDOTBS_TEMP DATAFILE '/u01/app/oracle/oradata/TEST01/undotbs_temp.dbf' SIZE 1G AUTOEXTEND ON;
    
    表領域が作成されました。
    
    SQL> SELECT TABLESPACE_NAME, FILE_NAME,BYTES/1024/1024 MBYTES
    FROM DBA_DATA_FILES
    WHERE TABLESPACE_NAME IN (
    SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE CONTENTS='UNDO');
    
    TABLESPACE_NAME FILE_NAME                                              MBYTES
    --------------- -------------------------------------------------- ----------
    UNDOTBS1        /u01/app/oracle/oradata/TEST01/undotbs01.dbf               100
    UNDOTBS_TEMP    /u01/app/oracle/oradata/TEST01/undotbs_temp.dbf           1024

    ```

1. UNDO表領域を作業用に切替

    ```sql
    SQL> SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME='undo_tablespace';
    
    NAME                 VALUE
    -------------------- --------------------
    undo_tablespace      UNDOTBS1
    
    SQL> ALTER SYSTEM SET UNDO_TABLESPACE='UNDOTBS_TEMP';
    
    システムが変更されました。
    
    SQL> SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME='undo_tablespace';
    
    NAME                 VALUE
    -------------------- --------------------
    undo_tablespace      UNDOTBS_TEMP
    
    SQL> ALTER TABLESPACE UNDOTBS1 OFFLINE;
    
    表領域が変更されました。
    
    SQL> SELECT TABLESPACE_NAME,STATUS FROM DBA_TABLESPACES WHERE CONTENTS='UNDO';
    
    TABLESPACE_NAME STATUS
    --------------- ---------------------------
    UNDOTBS1        OFFLINE
    UNDOTBS_TEMP    ONLINE

    ```

1. 大量データの投入作業

1. UNDO表領域を元に戻す

    ```sql
    SQL> ALTER TABLESPACE UNDOTBS1 ONLINE;
    
    システムが変更されました。
    
    SQL> ALTER SYSTEM SET UNDO_TABLESPACE='UNDOTBS1';
    
    システムが変更されました。
    
    SQL> ALTER TABLESPACE UNDOTBS_TEMP OFFLINE;
    
    表領域が変更されました。
    
    SQL> SELECT TABLESPACE_NAME,STATUS FROM DBA_TABLESPACES WHERE CONTENTS='UNDO';
    
    TABLESPACE_NAME STATUS
    --------------- ---------------------------
    UNDOTBS1        ONLINE
    UNDOTBS_TEMP    OFFLINE

    ```

1. 作業用UNDO表領域の削除

    ```sql
    SQL> DROP TABLESPACE UNDOTBS_TEMP INCLUDING CONTENTS AND DATAFILES ;
    
    表領域が削除されました。
    
    SQL> SELECT TABLESPACE_NAME, FILE_NAME,BYTES/1024/1024 MBYTES 
    FROM DBA_DATA_FILES 
    WHERE TABLESPACE_NAME IN (
    SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE CONTENTS='UNDO');
    
    TABLESPACE_NAME FILE_NAME                                              MBYTES
    --------------- -------------------------------------------------- ----------
    UNDOTBS1        /u01/app/oracle/oradata/TEST01/undotbs01.dbf               100
    ```