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.