Enabing Local UNDO mode in Oracle Multitenant

A partir da versão 12.2 do Oracle Database, conseguimos escolher o modo de Local ou Shared UNDO na criação dos nossos bancos de dados, na arquitetura Multitenant. Neste artigo vou explorar como podemos mudar um ambiente de Shared para Local.

Validando que nosso ambiente está como Shared:

[oracle@oel7 PITR]$ sqlplus / as sysdba
 
SQL*Plus: Release 19.0.0.0.0 - Production on Thu May 27 21:24:19 2021
Version 19.3.0.0.0
 
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
 
SQL> SELECT NAME,OPEN_MODE,CDB FROM V$DATABASE;
 
NAME      OPEN_MODE            CDB
--------- -------------------- ---
ASWAN     READ WRITE           YES
 
SQL> col PROPERTY_NAME format a25
SQL> col PROPERTY_VALUE format a10
SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
 
PROPERTY_NAME             PROPERTY_V
------------------------- ----------
LOCAL_UNDO_ENABLED        FALSE

O procedimento em si exige indisponibilidade do ambiente, pois vamos baixar o CDB$ROOT e entrar no modo upgrade conforme abaixo:

SQL> SHU IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP UPGRADE;
ORACLE instance started.
 
Total System Global Area 2382364040 bytes
Fixed Size                  9137544 bytes
Variable Size             520093696 bytes
Database Buffers         1845493760 bytes
Redo Buffers                7639040 bytes
Database mounted.
Database opened.
SQL>

Comando para alterar o mode:

SQL> ALTER DATABASE LOCAL UNDO ON;
 
Database altered.
 
SQL> SHU IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP;
ORACLE instance started.
 
Total System Global Area 2382364040 bytes
Fixed Size                  9137544 bytes
Variable Size             520093696 bytes
Database Buffers         1845493760 bytes
Redo Buffers                7639040 bytes
Database mounted.
Database opened.

O legal é que no momento que os PDBs são abertos, uma UNDO já é criada para cada um. Validando que agora nosso ambiente está em Local UNDO:

SQL> col PROPERTY_NAME format a25
SQL> col PROPERTY_VALUE format a10
SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
 
PROPERTY_NAME             PROPERTY_V
------------------------- ----------
LOCAL_UNDO_ENABLED        TRUE

Pelo REPORT SCHEMA do RMAN podemos ver que a UNDO do nosso PDB e do PDB$SEED foram criadas:

RMAN> REPORT SCHEMA;
 
using target database control file instead of recovery catalog
Report of database schema for database with db_unique_name ASWAN
 
List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    890      SYSTEM               YES     /oracle/dados/ASWAN/datafile/o1_mf_system_jc0blms9_.dbf
3    540      SYSAUX               NO      /oracle/dados/ASWAN/datafile/o1_mf_sysaux_jc0bn0x8_.dbf
4    420      UNDOTBS1             YES     /oracle/dados/ASWAN/datafile/o1_mf_undotbs1_jc0bnt0l_.dbf
5    270      PDB$SEED:SYSTEM      NO      /oracle/dados/ASWAN/datafile/o1_mf_system_jc0bys8k_.dbf
6    330      PDB$SEED:SYSAUX      NO      /oracle/dados/ASWAN/datafile/o1_mf_sysaux_jc0bys95_.dbf
7    5        USERS                NO      /oracle/dados/ASWAN/datafile/o1_mf_users_jc0bnv2t_.dbf
9    270      HIPOFISE1:SYSTEM     YES     /oracle/dados/ASWAN/C35954A5800908B7E0536C00A8C0EE5B/datafile/o1_mf_system_jc0congn_.dbf
10   340      HIPOFISE1:SYSAUX     NO      /oracle/dados/ASWAN/C35954A5800908B7E0536C00A8C0EE5B/datafile/o1_mf_sysaux_jc0congs_.dbf
11   100      HIPOFISE1:USERS      NO      /oracle/dados/ASWAN/C35954A5800908B7E0536C00A8C0EE5B/datafile/o1_mf_users_jc0cp8xo_.dbf
12   126      PDB$SEED:UNDO_1      NO      /oracle/dados/ASWAN/C3592AD9E96374EFE0536C00A8C0C507/datafile/o1_mf_undo_1_jc0g9hlp_.dbf
13   126      HIPOFISE1:UNDO_1     YES     /oracle/dados/ASWAN/C35954A5800908B7E0536C00A8C0EE5B/datafile/o1_mf_undo_1_jc0g9pp5_.dbf
 
List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    32       TEMP                 32767       /oracle/dados/ASWAN/datafile/o1_mf_temp_jc0bsfwd_.tmp
2    36       PDB$SEED:TEMP        32767       /oracle/dados/ASWAN/datafile/temp012021-05-27_20-32-06-927-PM.dbf
3    36       HIPOFISE1:TEMP       32767       /oracle/dados/ASWAN/C35954A5800908B7E0536C00A8C0EE5B/datafile/o1_mf_temp_jc0congs_.dbf

Como estou usando a versão 19C, a UNDO do PDB$SEED foi criado automaticamente, mas na versão 12.2 esse procedimento deve ser realizado manualmente, conforme etapas abaixo:

ALTER PLUGGABLE DATABASE PDB$SEED OPEN READ WRITE FORCE;
ALTER SESSION SET CONTAINER=PDB$SEED;
CREATE UNDO TABLESPACE LOCAL UNDO DATAFILE SIZE 100M AUTOEXTEND ON NEXT 100;
ALTER PLUGGABLE DATABASE PDB$SEED CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE PDB$SEED OPEN READ ONLY;

Obs: Este procedimento foi criado pelo senhor Ahmed Baraka (www.ahmedbaraka.com) e foi apenas reproduzido por mim em um laboratório pessoal para fins de aprendizado.

Leave a Comment

Your email address will not be published.