En una base de datos Oracle el parámetro MAX_STRING_SIZE controla el tamaño máximo de los tipo VARCHAR2, NVARCHAR2 y RAW en SQL.
En la versión 19c que actualmente esta en el RU 19.23 y en la versión 23c que se encuentra disponible en el OCI como DBaaS y que pronto estar disponible en las demás plataformas para ON-PREMISE, el valor de facto es STANDARD, lo que implica, que el tamaño máximo que puede almacenar son 4000 bytes.
Utilizando el comando ALTER SYSTEM, eso sí, solo cuando la base de datos esté en modo UPGRADE y posteriormente ejecutando el script utl32k.sql, como se explica en este artículo, podrán cambiar la capacidad máximo de almacenamiento para este tipo de variables.
STANDARD significa que se aplican los límites de longitud para las versiones de Oracle Database anteriores a Oracle Database 12c (por ejemplo, 4000 bytes para VARCHAR2 y NVARCHAR2 y 2000 bytes para RAW).
EXTENDED significa que se aplica el límite de 32767 bytes introducido en Oracle Database 12c.
Puede cambiar el valor de MAX_STRING_SIZE desde STANDARD a EXTENDED. Sin embargo, no puede cambiar el valor de MAX_STRING_SIZE de EXTENDED a STANDARD.
Al establecer MAX_STRING_SIZE= EXTENDED, los usuarios están realizando una acción explícita que podría introducir incompatibilidad de aplicaciones en su base de datos. Las aplicaciones que no quieran utilizar los tipos de datos expandidos se pueden reescribir para que sean compatibles con cualquiera de las configuraciones; por ejemplo, estas aplicaciones podrían usar CAST explícitos para fijar la longitud de VARCHAR2 en las expresiones durante CREATE TABLE AS SELECT.
La modificación MAX_STRING_SIZE actualizará los objetos de la base de datos y posiblemente los invalidará, según la documentación oficial de Oracle, de la siguiente manera:
- Las tablas con columnas virtuales se actualizarán con nuevos metadatos de tipos de datos para columnas virtuales de VARCHAR2(4000), 4000 bytes.
- Los índices funcionales quedarán inutilizables si un cambio en sus columnas virtuales asociadas hace que la clave de índice exceda los límites de longitud de la clave de índice. Los intentos de reconstruir dichos índices fracasarán con ORA-01450: maximum key length exceeded.
- Las vistas se invalidarán si contienen columnas VARCHAR2(4000) de , 4000 bytes NVARCHAR2 o RAW(2000).
- Las vistas materializadas se actualizarán con nuevos metadatos VARCHAR2(4000), 4000 bytes NVARCHAR2y RAW(2000)columnas de expresión escrita.
En una base de datos utilizando Container Database, el cambio debe realizarse tanto en el CDB como en los PDB requeridos.
Realizarlo en el CDB permitirá que los PDBS que se creen posterior al cambio, ya tengan como valor de facto en la variable, los 32K de tamaño.
Veamos como se hace el procedimiento de cambio.
Para realizar este proceso será necesario utilizar el script "catcon.pl" para ejecutar el archivo de comando utl32k.sql ubicado en $ORACLE_HOME/rdbms/admin.
Va a requerir contar con la contraseña del usuario SYS, la cuál será solicitada durante la ejecución del script.
login as: opc Authenticating with public key "rsa-key-20200507" Passphrase for key "rsa-key-20200507": Last login: Wed Apr 24 21:00:55 2024 from 201.198.177.186 [opc@oracle-database-server-19c ~]$ sudo su - oracle Last login: Wed Apr 24 21:01:20 GMT 2024 on pts/0 -bash-4.2$ lsnrctl start -bash: lsnrctl: command not found -bash-4.2$ . oraenv ORACLE_SID = [oracle] ? cdb The Oracle base has been set to /opt/app/oracle -bash-4.2$ lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 26-APR-2024 15:46:43 Copyright (c) 1991, 2023, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle-database-server-19c.vcnlandb.vcntestinglab.oraclevcn.com)(PORT=1521))) TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error: 111: Connection refused Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error: 2: No such file or directory -bash-4.2$ lsnrctl start LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 26-APR-2024 15:46:45 Copyright (c) 1991, 2023, Oracle. All rights reserved. Starting /opt/app/oracle/product/19c/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 19.0.0.0.0 - Production System parameter file is /opt/app/oracle/product/19c/network/admin/listener.ora Log messages written to /opt/app/oracle/diag/tnslsnr/oracle-database-server-19c/listener/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle-database-server-19c.vcnlandb.vcntestinglab.oraclevcn.com)(PORT=1521))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle-database-server-19c.vcnlandb.vcntestinglab.oraclevcn.com)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 26-APR-2024 15:46:45 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /opt/app/oracle/product/19c/network/admin/listener.ora Listener Log File /opt/app/oracle/diag/tnslsnr/oracle-database-server-19c/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle-database-server-19c.vcnlandb.vcntestinglab.oraclevcn.com)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) The listener supports no services The command completed successfully -bash-4.2$ sqlplus /nolog SQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 26 15:46:49 2024 Version 19.22.0.0.0 Copyright (c) 1982, 2023, Oracle. All rights reserved. SQL> connect / as sysdba Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 4.2950E+10 bytes Fixed Size 9189176 bytes Variable Size 4966055936 bytes Database Buffers 3.7849E+10 bytes Redo Buffers 125026304 bytes Database mounted. Database opened. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PRODUCCION READ WRITE NO
SQL> show parameter max_string_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ max_string_size string STANDARD SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PRODUCCION READ WRITE NO SQL> alter pluggable database PRODUCCION close immediate; Pluggable database altered. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PRODUCCION MOUNTED
SQL> alter system set max_string_size=extended scope=both; alter system set max_string_size=extended scope=both * ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-02095: specified initialization parameter cannot be modified SQL> alter pluggable database PRODUCCION open; Pluggable database altered. SQL> alter session set container=PRODUCCION; Session altered. SQL> alter system set max_string_size=extended scope=both; alter system set max_string_size=extended scope=both * ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-14694: database must in UPGRADE mode to begin MAX_STRING_SIZE migration SQL> connect / as sysdba Connected. SQL> alter system set max_string_size=extended scope=spfile; System altered. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup migrate ORACLE instance started. Total System Global Area 4.2950E+10 bytes Fixed Size 9189176 bytes Variable Size 4966055936 bytes Database Buffers 3.7849E+10 bytes Redo Buffers 125026304 bytes Database mounted. Database opened. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED MIGRATE YES 3 PRODUCCION MOUNTED
SQL> alter pluggable database produccion open upgrade; Pluggable database altered. SQL> exit Disconnected from Oracle Database 19c Enterprise Edition - Core Release 19.0.0.0.0 - Production Version 19.22.0.0.0 -bash-4.2$ cd $ORACLE_HOME -bash-4.2$ cd rdbms -bash-4.2$ cd admin -bash-4.2$ mkdir utl32k -bash-4.2$ cd utl32k/ -bash-4.2$ pwd /opt/app/oracle/product/19c/rdbms/admin/utl32k -bash-4.2$ sqlplus sys/oracle as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 26 16:14:14 2024 Version 19.22.0.0.0 Copyright (c) 1982, 2023, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition - Core Release 19.0.0.0.0 - Production Version 19.22.0.0.0 SQL> exit Disconnected from Oracle Database 19c Enterprise Edition - Core Release 19.0.0.0.0 - Production Version 19.22.0.0.0 -bash-4.2$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u SYS \ > -d $ORACLE_HOME/rdbms/admin -l '/opt/app/oracle/product/19c/rdbms/admin/utl32k' -b \ > utl32k_cdb_pdbs_output utl32k.sql catcon::set_log_file_base_path: ALL catcon-related output will be written to [/opt/app/oracle/product/19c/rdbms/admin/utl32k/utl32k_cdb_pdbs_output_catcon_6945.lst] catcon::set_log_file_base_path: catcon: See [/opt/app/oracle/product/19c/rdbms/admin/utl32k/utl32k_cdb_pdbs_output*.log] files for output generated by scripts catcon::set_log_file_base_path: catcon: See [/opt/app/oracle/product/19c/rdbms/admin/utl32k/utl32k_cdb_pdbs_output_*.lst] files for spool files, if any Enter Password: catcon.pl: completed successfully -bash-4.2$ sqlplus /nolog SQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 26 16:16:48 2024 Version 19.22.0.0.0 Copyright (c) 1982, 2023, Oracle. All rights reserved. SQL> connect / as sysdba Connected. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 4.2950E+10 bytes Fixed Size 9189176 bytes Variable Size 4966055936 bytes Database Buffers 3.7849E+10 bytes Redo Buffers 125026304 bytes Database mounted. Database opened. SQL> show parameter max_string_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ max_string_size string EXTENDED SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PRODUCCION READ WRITE NO SQL> alter session set container=produccion; Session altered. SQL> show parameter max_string_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ max_string_size string EXTENDED SQL> SQL> connect / as sysdba Connected. SQL> create pluggable database pdb2 from PRODUCCION; Pluggable database created. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PRODUCCION READ WRITE NO 4 PDB2 MOUNTED SQL> alter pluggable database pdb2 open; Pluggable database altered. SQL> alter session set container=pdb2; Session altered. SQL> show parameter max_string_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ max_string_size string EXTENDED SQL>
No hay comentarios:
Publicar un comentario
Te agradezco tus comentarios. Te esperamos de vuelta.