1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pluggable Database の UNDO 表領域切り替えを試す(Oracle Database 19c)

Last updated at Posted at 2021-09-30

Pluggable Database 環境では、UNDO 表領域を CDB で一括管理する方法と、各 PDB で独自に保持する方法を選択できます。本記事ではこれらの切り替え方法を試しました。

データベース作成時の設定

Database Configuration Assistant (DBCA) でデータベースを作成する場合は「Use Local Undo tablespace for PDBs」項目で選択を行います。CREATE DATABASE 文のデフォルトは LOCAL UNDO OFF ですが、DBCA のデフォルトはチェックされてます(=LOCAL UNDO ON)。

DBCA

DBCA で生成された SQL 文を確認すると、LOCAL UNDO 句が指定されていることがわかります。

CREATE DATABASE "O19A"
MAXINSTANCES 8
... 途中省略 ...
USER SYS IDENTIFIED BY "&&sysPassword" USER SYSTEM IDENTIFIED BY "&&systemPassword"
enable pluggable database
seed file_name_convert=('/u01/app/oracle/oradata/O19A/system01.dbf','/u01/app/oracle/oradata/O19A/pdbseed/system01.dbf','/u01/app/oracle/oradata/O19A/sysaux01.dbf','/u01/app/oracle/oradata/O19A/pdbseed/sysaux01.dbf','/u01/app/oracle/oradata/O19A/temp01.dbf','/u01/app/oracle/oradata/O19A/pdbseed/temp01.dbf','/u01/app/oracle/oradata/O19A/undotbs01.dbf','/u01/app/oracle/oradata/O19A/pdbseed/undotbs01.dbf') 
LOCAL UNDO ON;

確認方法

現状を確認するには、DATABASE_PROPERTIES ビューを検索します。下記の例では現在 Local Undo モードが有効になっていることがわかります。

SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE
    FROM   DATABASE_PROPERTIES
    WHERE  PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';

PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ ------------------------------
LOCAL_UNDO_ENABLED             TRUE

下記の例では CDB と PDB1 はそれぞれ別の名前の UNDO 表領域を指定しています。

SQL> ALTER SESSION SET CONTAINER=cdb$root;

セッションが変更されました。 

SQL> SHOW PARAMETER undo_tablespace

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTBSC

SQL> ALTER SESSION SET CONTAINER=pdb1;

セッションが変更されました。

SQL> SHOW PARAMETER undo_tablespace;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTBS1

切り替え方法

Local Undo モードの切り替えは ALTER DATABASE LOCAL UNDO 文を実行します。ただし、インスタンスを UPGRADE モードに変更する必要があるため再起動が必要です。通常モードで ALTER DATABASE 文を実行するとエラーが発生します。

SQL> ALTER DATABASE LOCAL UNDO OFF;
ALTER DATABASE LOCAL UNDO OFF
*
行1でエラーが発生しました。:
ORA-65192: この操作ではデータベースがUPGRADEモードである必要があります

インスタンスを停止し、UPGRADE モードで再実行します。その後もう一度インスタンスの再起動を行います。

SQL> SHUTDOWN IMMEDIATE
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。

SQL> STARTUP UPGRADE
ORACLEインスタンスが起動しました。

Total System Global Area 1660941712 bytes
Fixed Size                  9135504 bytes
Variable Size             956301312 bytes
Database Buffers          687865856 bytes
Redo Buffers                7639040 bytes
データベースがマウントされました。
データベースがオープンされました。

SQL> ALTER DATABASE LOCAL UNDO OFF;

データベースが変更されました。

SQL> SHUTDOWN IMMEDIATE
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。

SQL> STARTUP
ORACLEインスタンスが起動しました。

Total System Global Area 1660941712 bytes
Fixed Size                  9135504 bytes
Variable Size             956301312 bytes
Database Buffers          687865856 bytes
Redo Buffers                7639040 bytes
データベースがマウントされました。
データベースがオープンされました。

モード変更後の確認

Local Undo モードが変わっていることを確認します。

SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE
      FROM   DATABASE_PROPERTIES
      WHERE  PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';

PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ ------------------------------
LOCAL_UNDO_ENABLED             FALSE

Local Undo モードをオンからオフに変更しても、PDB の初期化パラメーター undo_tablespace は変更されません。

SQL> ALTER SESSION SET CONTAINER=pdb1;

セッションが変更されました。

SQL> SHOW PARAMETER undo_tablespace;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTBS1

しかし初期化パラメーターの変更は許可されません。

SQL> ALTER SYSTEM SET undo_tablespace=undotbs2;
ALTER SYSTEM SET undo_tablespace=undotbs2
*
行1でエラーが発生しました。:
ORA-65040: プラガブル・データベース内からの操作は許可されていません

これは Local Undo モードの変更に伴い、初期化パラメーターの属性 ispdb_modifiable が変更されることによります。Local Undo モードをオンにした場合は ispdb_modifieable = TRUE の状態です。

SQL> SELECT name, value, ispdb_modifiable, issys_modifiable, con_id FROM V$system_parameter
       WHERE name = 'undo_tablespace';

NAME                           VALUE                          ISPDB ISSYS_MOD     CON_ID
------------------------------ ------------------------------ ----- --------- ----------
undo_tablespace                UNDOTBSC                       TRUE  IMMEDIATE          0
undo_tablespace                                               TRUE  IMMEDIATE          2
undo_tablespace                UNDOTBS1                       TRUE  IMMEDIATE          3

しかし Local Undo モードをオフに変更した場合は ispdb_modifieable = FALSE になります。

SQL> SELECT name, value, ispdb_modifiable, issys_modifiable, con_id FROM V$system_parameter
     WHERE name = 'undo_tablespace';

NAME                           VALUE                          ISPDB ISSYS_MOD     CON_ID
------------------------------ ------------------------------ ----- --------- ----------
undo_tablespace                UNDOTBSC                       FALSE IMMEDIATE          0
undo_tablespace                                               FALSE IMMEDIATE          2
undo_tablespace                UNDOTBS1                       FALSE IMMEDIATE          3
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?