[26ai] Hybrid Read-Only Mode PDB
![[26ai] Hybrid Read-Only Mode PDB](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2Fde208bd2-5e24-4fd3-acf7-8e5394d95283.png&w=3840&q=75)
El artículo también se encuentra publicado en Ingles English version.
En el artículo de hoy, vamos a ver el nuevo open-mode introducido en 26ai denominado Hybrid Read-Only .
Cuando usamos este modo, el common user seguirá teniendo acceso read-write, mientras que el local user solo tendrá acceso read-only.
Sin más, vamos a ello.
El primer paso es definir una nueva PDB.
SQL> CREATE PLUGGABLE DATABASE PDB_HYBRID ADMIN USER admin IDENTIFIED BY admin keystore identified by external store;
Pluggable database created.
SQL> ALTER PLUGGABLE DATABASE PDB_HYBRID OPEN;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE PDB_HYBRID SAVE STATE;
Pluggable database altered.
Definimos los diferentes usuarios:
SQL> CREATE USER c##hybrid IDENTIFIED BY "XXXXXXX";
User created.
SQL> GRANT DBA TO c##hybrid CONTAINER=ALL;
Grant succeeded.
SQL> alter session set container=pdb_hybrid;
SQL> create smallfile tablespace tb1
datafile size 1m autoextend on maxsize 10m;
Tablespace created.
SQL> CREATE USER hybrid IDENTIFIED BY "XXXXXXX"
DEFAULT TABLESPACE tb1
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON tb1;
User created.
SQL> GRANT DBA TO hybrid;
Grant succeeded.
Perfecto, ya tenemos definidos tanto el common user (c##hybrid) como el local user (hybrid).
Antes de abrir la PDB con el nuevo estado, vamos a conectarnos con el usuario hybrid para definir un tabla con algo de información:
SQL> conn hybrid/"XXXXX"@X.X.X.X:1521/pdb_hybrid.XXXX.XXXX.XXXX.com
Connected.
SQL>
SQL>
Create table T_TEST AS
SELECT OBJECT_NAME FROM ALL_OBJECTS;
Table created.
Nos conectamos a CDB$Root para poner en modo hybrid read-only la PDB.
SQL> alter pluggable database PDB_HYBRID close;
Pluggable database altered.
SQL> alter pluggable database PDB_HYBRID open hybrid read only;
Pluggable database altered.
SQL> r
select con_name,
open_mode,
is_hybrid_read_only
from v$container_topology
CON_NAME OPEN_MODE IS_HYBRID_READ_ONLY
-------------------- ---------- --------------------
CDB$ROOT READ WRITE NO
PDB$SEED READ ONLY NO
PDB_HYBRID READ WRITE YES
Nos conectamos con el local user a la PDB e intentamos realizar operaciones DML (delete) y DDL (truncate).
SQL> conn hybrid/"XXXXX"@X.X.X.X:1521/pdb_hybrid.XXXX.XXXX.XXXX.com
Connected.
SQL> set linesize 1000
SQL> col name format a20
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
-------------------- ----------
PDB_HYBRID READ ONLY
SQL> delete T_TEST;
delete T_TEST
*
ERROR at line 1:
ORA-16000: Attempting to modify database or pluggable database that is open for read-only access.
Help: https://docs.oracle.com/error-help/db/ora-16000/
SQL> truncate table T_TEST;
truncate table T_TEST
*
ERROR at line 1:
ORA-16000: Attempting to modify database or pluggable database that is open for read-only access.
Help: https://docs.oracle.com/error-help/db/ora-16000/
Han fallado ambas operaciones con el siguiente mensaje "ORA-16000: Attempting to modify database or pluggable database that is open for read-only access".
Ahora, nos conectamos con el common user y repetimos ambas operaciones.
SQL> conn c##hybrid/"FJA_2026_Oracle19c"
Connected.
SQL> alter session set container=PDB_HYBRID;
Session altered.
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
-------------------- ----------
PDB_HYBRID READ WRITE
SQL> delete hybrid.T_TEST;
52165 rows deleted.
SQL> truncate table hybrid.T_TEST;
Table truncated.
Hemos podido hacer ambas operaciones.
Otro punto que hay que mirar es la v$pdbs, cuando estamos conectados con el local user el OPEN_MODE viene READ ONLY, en cambio, para el common user el valor es READ WRITE.
Espero que os guste. ¡Nos vemos en el próximo artículo!
![[26ai] ALERT_LOG_MAX_SIZE](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2Fcbb365d0-4428-4a41-930d-516ce59e3355.jpg&w=3840&q=75)
![[26ai] ConnStr Tool](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F5005f06e-946c-49ba-bfe8-7fe18d1075d9.png&w=3840&q=75)
![[26ai] Instalación de Oracle26ai en Linux 9](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2Fd9a6ba10-eb2d-4fee-8a0c-f4957cbdc676.png&w=3840&q=75)
![[OCI] Montaje de un Bucket como un FS](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F05595570-0fbd-46ce-9db4-d2f0e9f09003.png&w=3840&q=75)