Como monitorear Respaldos o Restauraciones de RMAN

Raúl Antonio Molina Alvarenga

10 de Abril de 2023

#OracleACE

#OracleTipsSV

A veces necesitamos ( lo más usual en la via de un DBA), monitorear una actividad de respaldo o restauración, esto porque siempre nos están preguntando, cual es el avance, como vamos, como va el respaldo.

Y a simple vista, responder a dicha pregunta no es tan fácil, especialmente si son restauraciones o respaldo de bases de datos de gran tamaño.

Pero los scripts construidos con el poderoso SQL nunca nos abandonan, en este caso traemos uno utilísimo (a mi modo de ver), que permite contestar de gran manera (es una aproximación) las preguntas planteadas arriba.

El query a usar, que es totalmente personalizable se basa en la session longops:

Pasted Graphic 3.png

El resultado seria similar a la siguiente salida, indicando, la Sesión o SID, la hora de inicio, el Porcentaje de avance, usualmente del Hilo o Sesión el restante en Segundos, Minutos y Horas, para aquello de los impacientes:

Pasted Graphic.png

Y la forma de Invocación:

Pasted Graphic 2.png

Espero les sea de Utilidad.

Saludos

Instalación y Configuración de Oracle RAC sin usar modo grafico, Manoss a la Obraaa!!!

 

ORACLE RAC 11GR2 (2 Nodes) Completamente en modo Silencioso, sin usar interfaz grafica.

San Salvador, 25 de Marzo de 2023

#OracleACE

#OracleTipsSV

Hace algún tiempo, me enfrente a una situación de instalación de un producto Oracle llamado OAS, para los que lo conocieron fue el Servidor de Aplicaciones Caballo de Batalla de Oracle Corp, malo para mi modo de ver, Weblogic le gana por mucho.

Centrándose en la situación vivida, estaba instalando via VPN (2011), con un acceso a internet algo lento, y recuerdo que cuando lanzaba el modo gráfico de la instalación demoraba mucho tiempo en hacerme caso, y el proceso era lento en su totalidad, quede frustrado, después de horas y horas de búsqueda y nada.

Tiempo después, cuando me dio curiosidad el Examen de OCM, lei un tópico o requisito, saber Instalar todo producto Oracle involucrado en el examen en modo silencioso, sin uso de interfaz gráfica, y pensé que ser eso, y comencé a investigar y descubrí eso que tiempo tras me pudo haber permitido instalar el OAS sin complicación.

Oracle Corp, para todo producto, permite instalarlo de 2 formas, en modo interactivo en sus típicos instaladores bajo el estándar Oracle Universal Installer, que es un Tool creado en Java con toda una pila de subutilerias internas y scripts que se ejecutan cuando una persona lo esta utilizando, no es particularmente lento pero, al cargarlo de forma remota se complica la existencia.

El otro modo, el modo silencioso, particularmente complejo dado que la persona que lo use, debe saber rellenar las respuestas a las preguntas que el Wizard de Instalación o OUI realiza para poder completar una instalación. Todo producto Oracle viene con una plantilla que puede ser rellenada, en la mayoría de los mismos viene una sección de explicación para cada item a completar su valor.

Entrando en materia, vamos a ver los comandos necesarios para instalar un Oracle RAC de 2 nodos en version 11g( en realidad todas las versiones en esencia son iguales), usando el modo silencioso.

Vamos a asumir algunas consideraciones:

  • Tenemos el Hardware adecuado y correctamente configurado
  • Sistema operativo adecuado y correctamente configurado en los nodos involucrados
  • La mayoría o todos los elementos requisitos correctamente configurados, esto porque nunca es correcto dejando elementos con warning (para producción esto puede provocar fallas posteriores), o Error ( error ni siquiera se puede terminar la instalación)
  • Tenemos el Software correcto descargando y copiado al nodo inicial , también desempacado.

Hay que definir una variable para evitar errores durante la instalación:

export IGNORE_PREADDNODE_CHECKS=Y

Configuramos la equivalencia de usuarios entre los nodos:

./sshUserSetup.sh -user oracle  -hosts "racprod01 racprod02" -advanced -noPromptPassphrase
./sshUserSetup.sh -user grid  -hosts "racprod01 racprod02" -advanced -noPromptPassphrase

Validamos la correcta ejecución del túnel entre equipos con el usuario oracle y grid

con ssh racpro01 date; ssh racprod02 date

Si no solicita contraseña, la  configuración es correcta, de o contrario debemos hacerlo de nuevo corrigiendo fallas.

Iniciamos el instalador, moviéndonos al folder donde desempacamos el producto:

./runInstaller -silent -ignoreSysPrereqs -ignorePrereq -ignoreInternalDriverError -force use_prereq_checker=false        \

-responseFile $HOME/grid/response/grid_install.rsp        \

INVENTORY_LOCATION=/u01/app/oraInventory         \

SELECTED_LANGUAGES=en                                   \

oracle.install.option=CRS_CONFIG                        \

ORACLE_BASE=/u01/app/oracle/                             \

ORACLE_HOME=/u01/11.2.0/grid/                      \

oracle.install.asm.OSDBA=asmdba                            \

oracle.install.asm.OSOPER=asmoper                           \

oracle.install.asm.OSASM=asmadmin                            \

oracle.install.crs.config.gpnp.scanName=mvascan \

oracle.install.crs.config.gpnp.scanPort=1521            \

oracle.install.crs.config.clusterName=mvcluster            \

oracle.install.crs.config.gpnp.configureGNS=false       \

oracle.install.crs.config.clusterNodes=racprod01:racprod01-vip,racprod02:

racprod02-vip \

oracle.install.crs.config.networkInterfaceList=xnf1:172.16.10.0:1,xnf0:10

.10.10.0:2 \

oracle.install.crs.config.storageOption=ASM_STORAGE     \

oracle.install.crs.config.useIPMI=false                 \

oracle.install.asm.SYSASMPassword=oracle01              \

oracle.install.asm.diskGroup.diskDiscoveryString=/u01/oradata/* \

oracle.install.asm.diskGroup.name=CRS                  \

oracle.install.asm.diskGroup.disks=/u01/oradata/crs1,/u01/oradata/crs2,/u

01/oradata/crs3       \

oracle.install.asm.diskGroup.redundancy=EXTERNAL        \

oracle.install.asm.monitorPassword=oracle01

$GRID_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME="/u01/app/11.2.0.2/grid" CRS=true


Al iniciar nos indica el log donde se ve el avance, el mismo log nos indica que hay que ejecutar los scripts de root ( 2 el del inventario y el del OracleHome),  también nos indicara cualquier error que haya que corregir, etc.

El mismo nos indicara cuando el proceso haya finalizado.

El OUI inicial solo crea y configura el diskgroup de ASM donde el OCR y los voting files son creados por lo cual cualquier diskgroup de ASM adicional debe configurarse posterior a dicho paso, aqui creamos un diskgroup de ASM:

asmca -silent -createDiskGroup \

-diskGroupName DATA \

-diskList '/u01/oradata/asm1,/u01/oradata/asm2' \

-redundancy external \

-au_size 4  \

-sysAsmPassword oracle01

Creamos otro diskgroup, uno para el FRA

asmca -silent -createDiskGroup \

-diskGroupName FRA \

-diskList '/u01/oradata/asm6,/u01/oradata/asm7' \

-redundancy external \

-au_size 4  \

-sysAsmPassword oracle01

Una vez el GI ha sido configurado de forma correcta, validamos su funcionamiento, apagando, encendiendo, reiniciando equipos, podemos parcharlo, etc , etc.

En este ejemplo usamos, separación de soles, por lo cual el Software de RDBMS se ejecuta con usuario oracle, solo instalaremos el RDBMS, no crearemos la BD, eso sera en un paso posterior:

./runInstaller -silent -ignoreSysPrereqs -ignorePrereq -ignoreInternalDriverError \

-force use_prereq_checker=false \

-responseFile /u01/stage/database/response/db_install.rsp      \

oracle.install.option=INSTALL_DB_SWONLY             \

CLUSTER_NODES=racprod01,racprod02                     \

UNIX_GROUP_NAME=oinstall                            \

INVENTORY_LOCATION=/u01/app/oraInventory     \

SELECTED_LANGUAGES=en                               \

ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1   \

ORACLE_BASE=/u01/app/oracle                         \

oracle.install.db.InstallEdition=SE                 \

oracle.install.db.isCustomInstall=false             \

oracle.install.db.DBA_GROUP=dba                     \

oracle.install.db.OPER_GROUP=dba                    \

SECURITY_UPDATES_VIA_MYORACLESUPPORT=false          \

DECLINE_SECURITY_UPDATES=true


En caso de ser necesario, puede actualizarse el inventario con este comando:

./runInstaller -updateNodeList ORACLE_HOME="/u01/app/oracle/product/11.2.0/db_1" CRS=true

El proceso  de instalación completo la instalación y al finalizar debió ejecutarse el script de root del mismo Home, con esto podríamos crear la BD del mismo modo silencioso:

dbca -silent -createDatabase -templateName 'General_Purpose.dbc' -adminManaged \

-emConfiguration NONE -gdbName 'mvadb'  -sysPassword oracle01 -systemPassword oracle01 \

-asmSYSPassword oracle01  -storageType ASM -diskGroupName DATA \

-datafileJarLocation /u01/app/oracle/product/11.2.0/db_1/assistants/dbca/templates \

-nodelist 'racprod01,racprod02' -characterset WE8ISO8859P1 -obfuscatedPasswords false -sampleSchema false


Incluyo el output:

Copying database files

1% complete

3% complete

9% complete

15% complete

21% complete

27% complete

30% complete

Creating and starting Oracle instance

32% complete

36% complete

40% complete

44% complete

45% complete

48% complete

50% complete

Creating cluster database views

52% complete

70% complete

Completing Database Creation

73% complete

76% complete

85% complete

94% complete

100% complete

Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/mvadb/mvadb.log" for further details.

Validación del listener

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Solaris: Version 11.2.0.3.0 - Production

Start Date                12-APR-2014 23:53:51

Uptime                    0 days 2 hr. 50 min. 10 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/11.2.0/grid/network/admin/listener.ora

Listener Log File         /u01/11.2.0/grid/log/diag/tnslsnr/racprod01/listener/alert/log.xml

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.10.102)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.10.105)(PORT=1521)))

Services Summary...

Service "+ASM" has 1 instance(s).

Instance "+ASM1", status READY, has 1 handler(s) for this service...

Service "mvadb" has 1 instance(s).

Instance "mvadb1", status READY, has 1 handler(s) for this service...

Service "mvadbXDB" has 1 instance(s).

Instance "mvadb1", status READY, has 1 handler(s) for this service...

The command completed successfully







------------------------

Alias                     LISTENER

Version                   TNSLSNR for Solaris: Version 11.2.0.3.0 - Production

Start Date                12-APR-2014 23:53:51

Uptime                    0 days 2 hr. 50 min. 26 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/11.2.0/grid/network/admin/listener.ora

Listener Log File         /u01/11.2.0/grid/log/diag/tnslsnr/racprod02/listener/alert/log.xml

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.10.104)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.10.106)(PORT=1521)))

Services Summary...

Service "+ASM" has 1 instance(s).

Instance "+ASM2", status READY, has 1 handler(s) for this service...

Service "mvadb" has 1 instance(s).

Instance "mvadb2", status READY, has 1 handler(s) for this service...

Service "mvadbXDB" has 1 instance(s).

Instance "mvadb2", status READY, has 1 handler(s) for this service...

The command completed successfully


Validación completa del cluster:

-bash-3.2$ crs_stat -t

Name           Type           Target    State     Host

------------------------------------------------------------

ora.CRS.dg     ora....up.type ONLINE    ONLINE    racprod01

ora.DATA.dg    ora....up.type ONLINE    ONLINE    racprod01

ora.FRA.dg     ora....up.type ONLINE    ONLINE    racprod01

ora....ER.lsnr ora....er.type ONLINE    ONLINE    racprod01

ora....N1.lsnr ora....er.type ONLINE    ONLINE    racprod02

ora....N2.lsnr ora....er.type ONLINE    ONLINE    racprod01

ora....N3.lsnr ora....er.type ONLINE    ONLINE    racprod01

ora.asm        ora.asm.type   ONLINE    ONLINE    racprod01

ora.cvu        ora.cvu.type   ONLINE    ONLINE    racprod01

ora.gsd        ora.gsd.type   OFFLINE   OFFLINE

ora.mvadb.db   ora....se.type ONLINE    ONLINE    racprod01

ora....network ora....rk.type ONLINE    ONLINE    racprod01

ora.oc4j       ora.oc4j.type  ONLINE    ONLINE    racprod01

ora.ons        ora.ons.type   ONLINE    ONLINE    racprod01

ora....SM1.asm application    ONLINE    ONLINE    racprod01

ora....01.lsnr application    ONLINE    ONLINE    racprod01

ora....d01.gsd application    OFFLINE   OFFLINE

ora....d01.ons application    ONLINE    ONLINE    racprod01

ora....d01.vip ora....t1.type ONLINE    ONLINE    racprod01

ora....SM2.asm application    ONLINE    ONLINE    racprod02

ora....02.lsnr application    ONLINE    ONLINE    racprod02

ora....d02.gsd application    OFFLINE   OFFLINE

ora....d02.ons application    ONLINE    ONLINE    racprod02

ora....d02.vip ora....t1.type ONLINE    ONLINE    racprod02

ora....ry.acfs ora....fs.type ONLINE    ONLINE    racprod01

ora.scan1.vip  ora....ip.type ONLINE    ONLINE    racprod02

ora.scan2.vip  ora....ip.type ONLINE    ONLINE    racprod01

ora.scan3.vip  ora....ip.type ONLINE    ONLINE    racprod01







--------------------------------------------------------------------------------

NAME           TARGET  STATE        SERVER                   STATE_DETAILS

--------------------------------------------------------------------------------

Local Resources

--------------------------------------------------------------------------------

ora.CRS.dg

ONLINE  ONLINE       racprod01

ONLINE  ONLINE       racprod02

ora.DATA.dg

ONLINE  ONLINE       racprod01

ONLINE  ONLINE       racprod02

ora.FRA.dg

ONLINE  ONLINE       racprod01

ONLINE  ONLINE       racprod02

ora.LISTENER.lsnr

ONLINE  ONLINE       racprod01

ONLINE  ONLINE       racprod02

ora.asm

ONLINE  ONLINE       racprod01                Started

ONLINE  ONLINE       racprod02                Started

ora.gsd

OFFLINE OFFLINE      racprod01

OFFLINE OFFLINE      racprod02

ora.net1.network

ONLINE  ONLINE       racprod01

ONLINE  ONLINE       racprod02

ora.ons

ONLINE  ONLINE       racprod01

ONLINE  ONLINE       racprod02

ora.registry.acfs

ONLINE  ONLINE       racprod01

ONLINE  ONLINE       racprod02

--------------------------------------------------------------------------------

Cluster Resources

--------------------------------------------------------------------------------

ora.LISTENER_SCAN1.lsnr

1        ONLINE  ONLINE       racprod02

ora.LISTENER_SCAN2.lsnr

1        ONLINE  ONLINE       racprod01

ora.LISTENER_SCAN3.lsnr

1        ONLINE  ONLINE       racprod01

ora.cvu

1        ONLINE  ONLINE       racprod01

ora.mvadb.db

1        ONLINE  ONLINE       racprod01                Open

2        ONLINE  ONLINE       racprod02                Open

ora.oc4j

1        ONLINE  ONLINE       racprod01

ora.racprod01.vip

1        ONLINE  ONLINE       racprod01

ora.racprod02.vip

1        ONLINE  ONLINE       racprod02

ora.scan1.vip

1        ONLINE  ONLINE       racprod02

ora.scan2.vip

1        ONLINE  ONLINE       racprod01

ora.scan3.vip

1        ONLINE  ONLINE       racprod01


Podemos agregar servicios:

srvctl add service -d mvadb -s mvaha -r mvadb1,mvadb2 -P basic -e select -m basic -z 10 -w 2

Agregar mas nodos:

Primero el GI

cd $ORACLE_HOME/oui/bin

export IGNORE_PREADDNODE_CHECKS=Y

./addNode.sh -silent "CLUSTER_NEW_NODES={tcigesdb2}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={tcigesdb2-vip}"


Si fuera necesario alguna manipulación del inventario en el mismo modo:

$./runInstaller -silent -detachHome -invPtrLoc </etc>/oraInst.loc ORACLE_HOME="/u01/app/11.2.0/grid"
./runInstaller -silent -ignoreSysPrereqs -attachHome ORACLE_HOME="/u01/app/11.2.0/grid" ORACLE_HOME_NAME="Ora11g_gridinfrahome1" LOCAL_NODE="tcigesdb1" CLUSTER_NODES="tcigesdb1" CRS=true

Agregamos el RBDMS al nuevo nodo:

##oracle

cd $ORACLE_HOME/oui/bin

./addNode.sh -silent "CLUSTER_NEW_NODES={sa-midbn2}”

Espero les sea de Utilidad.

Oh No!!, perdi el spfile!!

Oh No!!, perdi el spfile!!

Raul Antonio Molina Alvarenga – Oracle ACE Associate

04-dec-2022

No se si alguna vez les ha pasado que por algún error involuntario o una falla han perdido el spfile, pfile, o init temporal, representando alguna que otra sudoración por no poder encender la instancia y que la base de datos de servicio.

En este articulo vamos a simular una falla frecuente en el mundo de los dbas, que también puede venir acompañada de la ejecución de un establecimiento  de parámetros  que imposibilita el arranque de la instancia.

Primero validamos que tenemos nuestro spfile  configurado y utilizado:

NAME     TYPE VALUE

------------------------------------ ----------- ------------------------------

spfile    
 string /opt/oracle/product/19c/dbhome_1/dbs/spfileORCLCDB.ora

SQL> 

SQL> show parameter name

NAME     TYPE VALUE

db_name      string ORCLCDB

SQL> 

Crearemos una copia del spfile como pfile.

Recordemos la definición:

pfile: archivo de parámetros en texto

spfile: archivo de parámetros en formato binario.

 

SQL> create pfile from spfile;

File created.

También crearemos un archivo de parámetros alterno, con nombre alterno.
SQL> create pfile='noperderpfile.ora' from spfile;

File created.

Es importante observemos donde esta el diag, la ruta de archivos de log y traces de la bd y el estado de la instancia:

SQL> show parameter diag

NAME     TYPE VALUE

------------------------------------ ----------- ------------------------------

diagnostic_dest      string /opt/oracle

SQL> 

 select status from v$instance;
STATUS

------------

OPEN

Comenzamos apagando la instancia:

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> 

Ahora vamos a simular la falla de perder el spfileSID, borramos el spfileSID, note que hay  un initSID, el archivo alterno de parámetros que nosotros creamos.

cd $ORACLE_HOME

[oracle@instance-20221204-1045 dbhome_1]$ cd dbs

[oracle@instance-20221204-1045 dbs]$ ls -lrt

total 28

-rw-r--r--. 1 oracle oinstall 3079 May 14  2015 init.ora

-rw-r-----. 1 oracle oinstall   24 Dec  4 21:42 lkORCLCDB

-rw-r-----. 1 oracle oinstall 2048 Dec  4 21:47 orapwORCLCDB

-rw-r-----. 1 oracle oinstall 3584 Dec  4 22:35 spfileORCLCDB.ora

-rw-r--r--. 1 oracle oinstall 1037 Dec  4 22:36 initORCLCDB.ora

-rw-r--r--. 1 oracle oinstall 1037 Dec  4 22:36 noperderpfile.ora

-rw-rw----. 1 oracle oinstall 1544 Dec  4 22:40 hc_ORCLCDB.dat

[oracle@instance-20221204-1045 dbs]$ rm spfileORCLCDB.ora 

[oracle@instance-20221204-1045 dbs]$ 

SQL> 

SQL> startup

ORACLE instance started.

Total System Global Area  473953632 bytes

Fixed Size     8897888 bytes

Variable Size   222298112 bytes

Database Buffers   234881024 bytes

Redo Buffers     7876608 bytes

Database mounted.

Database opened.

SQL> show parameter pfile
NAME     TYPE VALUE

------------------------------------ ----------- ------------------------------

spfile     string --> esta vacio, arranco con init

SQL> 


Notese que la instancia arranco, sin spfile, porque por default en el orden de precedencia al no encontrar spfileSID, busca initSID

y para el caso lo encontró en el directorio $ORACLE_HOME/dbs.

Vamos a provocar la falla , borrando el initSID

[oracle@instance-20221204-1045 dbs]$ ls

hc_ORCLCDB.dat  init.ora  initORCLCDB.ora  lkORCLCDB  noperderpfile.ora  orapwORCLCDB

[oracle@instance-20221204-1045 dbs]$ rm initORCLCDB.ora 

[oracle@instance-20221204-1045 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Dec 4 22:46:21 2022

Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup 

ORA-01078: failure in processing system parameters

LRM-00109: could not open parameter file '/opt/oracle/product/19c/dbhome_1/dbs/initORCLCDB.ora'

SQL> 

Puede observarse que al no encontrar spfile ni init, no arranco la instancia

[oracle@instance-20221204-1045 dbs]$ ls

hc_ORCLCDB.dat  init.ora  lkORCLCDB  noperderpfile.ora  orapwORCLCDB

Vamos a reconstruir nuestro spfile del init que guardamos previamente con nombre personalizado.

[oracle@instance-20221204-1045 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Dec 4 22:46:44 2022

Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> create spfile from pfile='noperderpfile.ora';

File created.

SQL> startup

ORACLE instance started.

Total System Global Area  473953632 bytes

Fixed Size     8897888 bytes

Variable Size   222298112 bytes

Database Buffers   234881024 bytes

Redo Buffers     7876608 bytes

Database mounted.

Database opened.

SQL> 


Esto creo el spfile y se puede observar en el $OH/dbs

 dbs]$ ls -lrt

total 31272

-rw-r--r--. 1 oracle oinstall     3079 May 14  2015 init.ora

-rw-r-----. 1 oracle oinstall       24 Dec  4 21:42 lkORCLCDB

-rw-r-----. 1 oracle oinstall     2048 Dec  4 21:47 orapwORCLCDB

-rw-r--r--. 1 oracle oinstall     1037 Dec  4 22:36 noperderpfile.ora

-rw-r-----. 1 oracle oinstall     3584 Dec  4 22:50 spfileORCLCDB.ora

-rw-rw----. 1 oracle oinstall     1544 Dec  4 22:50 hc_ORCLCDB.dat

-rw-r-----. 1 oracle oinstall 10682368 Dec  4 22:57 011eiomb_1_1

-rw-r-----. 1 oracle oinstall 10600448 Dec  4 22:57 snapcf_ORCLCDB.f

-rw-r-----. 1 oracle oinstall 10715136 Dec  4 22:57 c-2893648571-20221204-00

[oracle@instance-20221204-1045 dbs]$ 

Otra forma utilísima de regenerar el init o spfile es usando los valores impresos en el alert en el diag repository.

[oracle@instance-20221204-1045 dbs]$ adrci

ADRCI: Release 19.0.0.0.0 - Production on Sun Dec 4 22:59:57 2022

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

ADR base = "/opt/oracle"

adrci> show alert

Choose the home from which to view the alert log:

1: diag/rdbms/orclcdb/ORCLCDB

2: diag/rdbms/dummy/ORCLCDB

3: diag/tnslsnr/instance-20221204-1045/listener

Q: to quit

Please select option: 1

El contenido se observa:

Using parameter settings in server-side spfile /opt/oracle/product/19c/dbhome_1/dbs/spfileORCLCDB.ora

System parameters with non-default values:

  processes                = 300

  nls_language             = "AMERICAN"

  nls_territory            = "AMERICA"

  sga_target               = 452M

  control_files            = "/opt/oracle/oradata/ORCLCDB/control01.ctl"

  control_files            = "/opt/oracle/oradata/ORCLCDB/control02.ctl"

  db_block_size            = 8192

  compatible               = "19.0.0"

  undo_tablespace          = "UNDOTBS1"

  remote_login_passwordfile= "EXCLUSIVE"

  dispatchers              = "(PROTOCOL=TCP) (SERVICE=ORCLCDBXDB)"

  local_listener           = "LISTENER_ORCLCDB"

  audit_file_dest          = "/opt/oracle/admin/ORCLCDB/adump"

  audit_trail              = "DB"

  db_name                  = "ORCLCDB"

  open_cursors             = 300

  pga_aggregate_target     = 150M

  diagnostic_dest          = "/opt/oracle"



Guardamos un archivo editable

vi pfile.ora

processes=300

nls_language="AMERICAN"

nls_territory="AMERICA"

sga_target=452M

control_files="/opt/oracle/oradata/ORCLCDB/control01.ctl"

control_files="/opt/oracle/oradata/ORCLCDB/control02.ctl"

db_block_size=8192

compatible="19.0.0"

undo_tablespace="UNDOTBS1"

remote_login_passwordfile= "EXCLUSIVE"

dispatchers="(PROTOCOL=TCP) (SERVICE=ORCLCDBXDB)"

local_listener="LISTENER_ORCLCDB"

audit_file_dest="/opt/oracle/admin/ORCLCDB/adump"

audit_trail="DB"

db_name="ORCLCDB"

open_cursors=300

pga_aggregate_target=150M

diagnostic_dest="/opt/oracle"

Ahora generamos el spfile del contenido del archivo editable que previamente creamos e iniciamos la instancia:


SQL> create spfile from pfile='pfile.ora';

File created.

SQL> startup

ORACLE instance started.

Total System Global Area  473953632 bytes

Fixed Size     8897888 bytes

Variable Size   180355072 bytes

Database Buffers   276824064 bytes

Redo Buffers     7876608 bytes

Database mounted.

Database opened.

SQL>  

Espero les sea de utilidad.

Saludos

#OracleTipsSV

Multitenant, Acceso Fácil a PDBs.

Por Raúl Antonio Molina Alvarenga

07 de Octubre de 2022

Cuando Comenzó la tecnología de Multitenant, fue como un giro de timón, algo complejo de entender, y para mi existía una analogía que encontraba algo cierta, comparaba Multitenant como SQL Server, algo que un sostengo, aquí les explico mi analogía:

  • la CDB$ROOT, es como la master y msdb del SQLSERVER,
  • La instancia de la base de datos es como el motor en los Servicios de Windows ejecutandose si se apaga  ninguna Base de Datos atachada se puede acceder
  • Las bases de datos , pueden desconectarse y posteriormente pegarse o atacharse, a la misma Instancia Principal o otra en otro servidor
  • Pueden crearse backups de las bases de datos
  • No deben existir Objetos de usuario en la CDB$ROOT y/o la master o msdb.

Habiendo aclarado mi analogía, expongo el acceso.

Parecía complejo y tedioso el conectarse a una PDB en el mismo servidor de Base de datos al inicio, pues si no usábamos  TNSNAMES o easy connect, solo podíamos cambiándonos de contenedor en la sesión así:

[oracle@nodo1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Oct 7 15:57:33 2022

Version 19.15.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Connected to:

Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production

Version 19.15.0.0.0

SQL> show pdbs;

    CON_ID CON_NAME   OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

2 PDB$SEED  READ ONLY  NO

3 MYPLUGDB3_NEW  READ WRITE NO

SQL> 
SQL> show con_name

CON_NAME

------------------------------

CDB$ROOT

SQL> 




SQL> show pdbs;

    CON_ID CON_NAME   OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

2 PDB$SEED  READ ONLY  NO

3 MYPLUGDB3_NEW  READ WRITE NO

SQL> alter session set container=MYPLUGDB3_NEW;

Session altered.

SQL> show con_name

CON_NAME

------------------------------

MYPLUGDB3_NEW

SQL>

Ahora bien, desde 18c, es posible definir una nueva variable de ambiente, que permita conectarse directamente a una Base de Datos sin necesidad de pasar primero por el contenedor raíz, así:

[oracle@nodo1 ~]$ export ORACLE_PDB_SID=MYPLUGDB3_NEW

[oracle@nodo1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Oct 7 16:19:03 2022

Version 19.15.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Connected to:

Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production

Version 19.15.0.0.0

SQL> show con_name

CON_NAME

------------------------------

MYPLUGDB3_NEW

SQL>

Este formato permite, inclusive ejecutar expdp directamente en la PDB o Base de Datos pluggable sin necesidad de usar tnsnames.

Espero les sirva.

#OracleTipsSV

Saludos.

 

 

Como Aumentar el Espacio de los Diskgroups de ASM en Exadata.

15 de Noviembre de 2020.

Llevar a cabo el incremento o disminución del espacio asignado en un Diskgroup de ASM hoy en día es una tarea normal de la operación, lo que hace años haciamos con los FileSystems, Folders o Puntos de Montaje en Unix y Windows.

En un Sistema de Ingenieria de Oracle tampoco es la excepción, pues las bases de Datos o repositorios de Datos, estan en constante crecimiento basados en el Negocio o Rubro que Soportan.

Siendo las Bases de Datos de Empresas de Telecomunicaciones o Bancos las que Más Rapido crecen.

En esta oportunidad vamos a Incrementar el espacio de almacenamiento en un Diskgroup de ASM en un Sistema de Ingenieria Exadata.

IPS de las celdas

Debemos conocer las IPs de las Celdas de Almacenamiento porque, es necesario hacer ciertos pasos de procedimiento en dichos componenes, aunque podria hacerse con el utilitario dcli desde el Nodo de Procesamiento Database Machine, Prefiero hacerlo desde la propia celda.

Los nombres de Diskgroups, IPS , Bases de Datos, Hostname, etc son ficticios en el Articulo.

20.10.101.230 nodo01

20.10.101.231 nodo02

20.10.101.232 nodo03

Conectarse mediante SSH

Nos conectamos mediante SSH ya sea fuera del Exadata o desde un nodo de computo a las celdas.

Tarea de Redimensión del espacio actual

Lo que se redimensiona son los GridDisk, los GridDisk son las porciones en que se dividen los CELLDISK, el CELLDISK es el LUN, y el CELLDISK es tambien cada disco fisico en la Celda, existen N discos fisicos en las celdas existiendo un minimo de 6 discos, y todas las celdas tienen la misma candidad de discos.

Validamos el espacio libre de los CELLDISk, a ver si hay espacio para incrementar los GridDisk del cluster en estudio.

 cellcli -e “list celldisk where name like ‘CD.*’ attributes name, size, freespace”

       CD_00_celda01   12.4737091064453125T  9.148468017578125T

       CD_01_celda01   12.4737091064453125T  9.148468017578125T

       CD_02_celda01   12.4737091064453125T  9.148468017578125T

       CD_03_celda01   12.4737091064453125T  9.148468017578125T

       CD_04_celda01   12.4737091064453125T  9.148468017578125T

       CD_05_celda01   12.4737091064453125T  9.148468017578125T

Vemos que hay 9.14Tb Libres por CELLDISK.

Ahora validamos el espacio que tiene cada GridDisk, observamos que el espacio que produce dicha configuración es de 1TB y se obtiene asi.

6 Discos de 58Gb por 3 celdas, 6*58G*3= 1044G aprox 1Tb , en los GridDisk del Diskgroup DATA

cellcli -e “list griddisk where name like ‘DATA.*’ attributes name, size” –> 1Tb

       DATA_CD_00_celda01  58G

       DATA_CD_01_celda01  58G

       DATA_CD_02_celda01  58G

       DATA_CD_03_celda01  58G

       DATA_CD_04_celda01  58G

       DATA_CD_05_celda01  58G

Vamos a trabajar tambien el diskgroup RECO

6 Discos de 14Gb por 3 celdas, 6*58G*3= 250G  , en los GridDisk del Diskgroup RECO

cellcli -e “list griddisk where name like ‘RECO.*’ attributes name, size” –> 250GB

              RECO_CD_00_celda01  14G

       RECO_CD_01_celda01  14G

       RECO_CD_02_celda01  14G

       RECO_CD_03_celda01  14G

       RECO_CD_04_celda01  14G

       RECO_CD_05_celda01  14G

Debemos comprender que los dos GridDisk tanto del diskgroup DATA y RECO provienen del mismo CELLDISK, pero Oracle usa la logica del sector del disco que da vueltas más rapidas, ese sector al ser mas rapido es definido para DATA, y el sector más alejado o que da las vueltas más lentas, es definido para RECo, usando una propiedad definido en cilindros y llamada Interleave Disk(Puede que me equivoque).

Aqui hay imagenes al respecto:

https://www.eproseed.com/wp-content/uploads/2019/07/picture-1.png
https://image.slidesharecdn.com/exadatav2foroltpanddwh-12556401118401-phpapp02/95/sun-oracle-exadata-v2-for-oltp-and-dwh-56-728.jpg?cb=1255622474

Analizamos los diskgroups a aumentar el tamaño ( el proceso de reducir es exactamente igual al reves los pasos).

asmcmd lsdg

State   Type Rebal Sector Logical_Sector Block      AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name

MOUNTED HIGH N        512            512  4096 4194304  1069056  172704          118784          17973             0            Y DATA/

MOUNTED HIGH N        512            512  4096 4194304   258048   63060           28672          11462             0            N RECO/

Necesitamos incrementar los griddisk de data a 116GB

Necesitamos incrementar los griddisk de reco a 58G

Consultamos el tamaño de cada Disco o GRIDDISK de ASM para RECO y DATA en cualquiera de los nodos de Computo o Database Machine del Cluster que estamos trabajando ( Virtual o BareMetal es indiferente).

SQL> select name, total_mb from v$asm_disk_stat where name like ‘%RECO%’;

NAME                            TOTAL_MB

—————————— ———-

RECO_CD_01_celda03      14336

RECO_CD_00_celda03      14336

RECO_CD_03_celda03      14336

RECO_CD_04_celda03      14336

RECO_CD_05_celda03      14336

RECO_CD_02_celda03      14336

RECO_CD_05_celda02      14336

RECO_CD_02_celda02      14336

RECO_CD_00_celda02      14336

RECO_CD_01_celda02      14336

RECO_CD_04_celda02      14336

RECO_CD_03_celda02      14336

RECO_CD_04_celda01      14336

RECO_CD_00_celda01      14336

RECO_CD_05_celda01      14336

RECO_CD_01_celda01      14336

RECO_CD_03_celda01      14336

RECO_CD_02_celda01      14336

QD_RECO_NODO1              128

QD_RECO_NODO1              128

20 rows selected.

SQL> c.RECO.DATA

 1* select name, total_mb from v$asm_disk_stat where name like ‘%DATA%’

SQL> /

NAME                            TOTAL_MB

—————————— ———-

DATA_CD_02_NODO03      59392

DATA_CD_05_NODO03      59392

DATA_CD_04_NODO03      59392

DATA_CD_00_NODO03      59392

DATA_CD_03_NODO03      59392

DATA_CD_01_NODO03      59392

DATA_CD_04_NODO02      59392

DATA_CD_03_NODO02      59392

DATA_CD_01_NODO02      59392

DATA_CD_00_NODO02      59392

DATA_CD_02_NODO02      59392

DATA_CD_05_NODO02      59392

DATA_CD_03_NODO01      59392

DATA_CD_02_NODO01      59392

DATA_CD_04_NODO01      59392

DATA_CD_05_NODO01      59392

DATA_CD_00_NODO01      59392

DATA_CD_01_NODO01      59392

QD_DATA_NODO2              128

QD_DATA_NODO1              128

20 rows selected.

Para cada griddisk por celda primero los griddisk del diskgroup RECO

En cellcli, por Celda aumentar en Megabytes en Multiplos de 16MB dice la documentación.

Celda3

cellcli

cellcli>

alter griddisk RECO_CD_01_NODO03,RECO_CD_00_NODO03,RECO_CD_03_NODO03,RECO_CD_04_NODO03,RECO_CD_05_NODO03,RECO_CD_02_NODO03 size=59392M;

Celda2

cellcli

cellcli>

alter griddisk RECO_CD_05_NODO02,RECO_CD_02_NODO02,RECO_CD_00_NODO02,RECO_CD_01_NODO02,RECO_CD_04_NODO02,RECO_CD_03_NODO02 size=59392M;

Celda1

cellcli

cellcli>

alter griddisk RECO_CD_04_NODO01,RECO_CD_00_NODO01,RECO_CD_05_NODO01,RECO_CD_01_NODO01,RECO_CD_03_NODO01,RECO_CD_02_NODO01 size=59392M;

Luego DATA

Celda3

cellcli

cellcli>

alter griddisk DATA_CD_01_NODO03,DATA_CD_00_NODO03,DATA_CD_03_NODO03,DATA_CD_04_NODO03,DATA_CD_05_NODO03,DATA_CD_02_NODO03 size=118784M;

Celda2

cellcli

cellcli>

alter griddisk DATA_CD_05_NODO02,DATA_CD_02_NODO02,DATA_CD_00_NODO02,DATA_CD_01_NODO02,DATA_CD_04_NODO02,DATA_CD_03_NODO02 size=118784M;

Celda1

cellcli

cellcli>

alter griddisk DATA_CD_04_NODO01,DATA_CD_00_NODO01,DATA_CD_05_NODO01,DATA_CD_01_NODO01,DATA_CD_03_NODO01,DATA_CD_02_NODO01 size=118784M;

Los outputs, tener cuidado que el comando quede en una sola linea, el cellcli es como un prompt CLI ASMCMD o SQLPLUS.

GridDisk RECO_CD_04_nodo01 successfully altered

GridDisk RECO_CD_00_nodo01 successfully altered

GridDisk RECO_CD_05_nodo01 successfully altered

GridDisk RECO_CD_01_nodo01 successfully altered

GridDisk RECO_CD_03_nodo01 successfully altered

GridDisk RECO_CD_02_nodo01 successfully altered

GridDisk DATA_CD_04_nodo01 successfully altered

GridDisk DATA_CD_00_nodo01 successfully altered

GridDisk DATA_CD_05_nodo01 successfully altered

GridDisk DATA_CD_01_nodo01 successfully altered

GridDisk DATA_CD_03_nodo01 successfully altered

GridDisk DATA_CD_02_nodo01 successfully altered

GridDisk RECO_CD_05_nodo02 successfully altered

GridDisk RECO_CD_02_nodo02 successfully altered

GridDisk RECO_CD_00_nodo02 successfully altered

GridDisk RECO_CD_01_nodo02 successfully altered

GridDisk RECO_CD_04_nodo02 successfully altered

GridDisk RECO_CD_03_nodo02 successfully altered

GridDisk DATA_CD_05_nodo02 successfully altered

GridDisk DATA_CD_02_nodo02 successfully altered

GridDisk DATA_CD_00_nodo02 successfully altered

GridDisk DATA_CD_01_nodo02 successfully altered

GridDisk DATA_CD_04_nodo02 successfully altered

GridDisk DATA_CD_03_nodo02 successfully altered

GridDisk RECO_CD_01_nodo03 successfully altered

GridDisk RECO_CD_00_nodo03 successfully altered

GridDisk RECO_CD_03_nodo03 successfully altered

GridDisk RECO_CD_04_nodo03 successfully altered

GridDisk RECO_CD_05_nodo03 successfully altered

GridDisk RECO_CD_02_nodo03 successfully altered

GridDisk DATA_CD_01_nodo03 successfully altered

GridDisk DATA_CD_00_nodo03 successfully altered

GridDisk DATA_CD_03_nodo03 successfully altered

GridDisk DATA_CD_04_nodo03 successfully altered

GridDisk DATA_CD_05_nodo03 successfully altered

GridDisk DATA_CD_02_nodo03 successfully altered

Los celldisk despues del resize scaleup, vemos que ocupamos .10TB de cada CELLDISK

 cellcli -e “list celldisk where name like ‘CD.*’ attributes name, size, freespace”

       CD_00_nodo02   12.4737091064453125T  9.048858642578125T

       CD_01_nodo02   12.4737091064453125T  9.048858642578125T

       CD_02_nodo02   12.4737091064453125T  9.048858642578125T

       CD_03_nodo02   12.4737091064453125T  9.048858642578125T

       CD_04_nodo02   12.4737091064453125T  9.048858642578125T

       CD_05_nodo02   12.4737091064453125T  9.048858642578125T

Ahora se debe redimensionar para agrandar los discos del ASM queforman los diskgroups.

DATA,RECO

Usando sqlplus en 1 nodo del Cluster con usuario GRID o dueño de software de GI/ASM:

alter diskgroup DATA resize all rebalance power 32;

alter diskgroup RECO resize all rebalance power 32;

Usar select * from v$asm_operation; en el sqlplus para monitorear el rebalance o asmcmd lsdg y ver la columna rebalance, hastaque diga N.

Vemos los nuevos Tamaños:

Nodo1

asmcmd lsdg

State   Type Rebal Sector Logical_Sector Block      AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name

MOUNTED HIGH N        512            512  4096 4194304  2138112 1241760          237568         334730             0            Y DATA/

MOUNTED HIGH N        512            512  4096 4194304  1069056  873972          118784         251729             0            N RECO/

Desde nodo2.

asmcmd lsdg

State   Type Rebal Sector Logical_Sector Block      AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name

MOUNTED HIGH N        512       

A/

MOUNTED HIGH N        512            512  4096 4194304  1069056  873972          118784         251729             0            N RECO/

Tomado de:

https://docs.oracle.com/en/engineered-systems/exadata-database-machine/sagug/exadata-administering-asm.html#GUID-42DA2512-667D-443C-93C5-6E5110DFAE21

y

Saludos, espero les sea de utilidad.

Raúl

Publicado por

Estado: con conexión Raúl Antonio Molina Alvarenga(OCM) Coordinador BD & AS Oracle en SSA Sistemas Fecha de publicación: 3 meses 5 artículos Como Administrar el espacio de Diskgroups de ASM en Sistema De Ingenieria Oracle , Exadata. #Oracle,#Exadata,#RAC,#ASM,

OracleTipsSV

Bienvenidos a este interesante Mundo de la Tecnología de Oracle

Por aqui veremos tips, consejos, soluciones y toda clase de ayuda para ustedes, aceptando sugerencias de cualquier.