miércoles, 29 de marzo de 2023

Data Guard : Como ejecutar un Failover cuando no se puede resolver el GAP en la Standby

El Failover es un cambio de rol, en el cual una base de datos Standby pasa a ser Primaria cuando la Primaria falla o queda inalcanzable.

 A continuación explicaré el procedimiento Manual que se ejecuta mediante comandos SQL. 

En este escenario tenemos instalado Oracle Database 19c con un Data Guard configurado con una base de datos Primaria y una Standby, ambas son single instance No-CDB.

La Standby habia reportado un GAP pero no se encontraban disponibles los archive logs que faltaban y a continuación falló la base de datos Primaria por lo que tuvimos que hacer un Failover sin resolver el GAP.

Procedimiento 

1 - Verificar Rol de la Base de Datos Standby

server1:orcl:/u05/backup> sqlplus / as sysdba

 SQL*Plus: Release 19.0.0.0.0 - Production on Tue Mar 28 13:21:59 2023

Version 19.16.0.0.0

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

 Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.16.0.0.0

 SQL> select database_role from v$database;

 DATABASE_ROLE

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

PHYSICAL STANDBY

 

2 - Verificar que esta ejecutando el  proceso MRP

server1:orcl:/u05/backup> ps -ef | grep mrp

oracle    4918     1  0 09:29 ?        00:00:01 ora_mrp0_orcl

oracle   12904  9434  0 13:22 pts/2    00:00:00 grep --color=auto mrp

 

3 - Cancelar MRP

server1:orcl:/u05/backup> sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Mar 28 13:25:05 2023

Version 19.16.0.0.0

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

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.16.0.0.0


SQL>  recover managed standby database cancel;

Media recovery complete.

 

4 - Cambiar la Base de Datos a Modo Primaria

SQL> alter database recover managed standby database finish;

 

Da error por el GAP :

alter database recover managed standby database finish

*

ERROR at line 1:

ORA-00283: recovery session canceled due to errors

ORA-16171: RECOVER...FINISH not allowed due to gap for thr 1, seq 22871-22970

 

5 - Volvemos a ejecutar el Cancel por si quedo el MRP corriendo

SQL> alter database recover managed standby database cancel;

alter database recover managed standby database cancel 

*

ERROR at line 1:

ORA-16136: Managed Standby Recovery not active

 

6 - Activamos la Base, de esta forma monta la base de datos como Primaria.

SQL> alter database activate standby database;

Database altered.

 

 7 - Verificamos

SQL> select name,open_mode,database_role from v$database;

 

NAME      OPEN_MODE        DATABASE_ROLE

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

ORCL       MOUNTED           PRIMARY


8 - Reiniciamos con force

SQL> STARTUP MOUNT FORCE;

ORACLE instance started.

Total System Global Area 1.0637E+10 bytes

Fixed Size                 13626296 bytes

Variable Size            4966055936 bytes

Database Buffers         5637144576 bytes

Redo Buffers               19927040 bytes

Database mounted.

 

9 - Nos aseguramos que este configurada en Maxima Performance

SQL> alter database set standby database to maximize performance;

 Database altered.

 

10 - Abrimos la Base de Datos

SQL> alter database open;

 Database altered.


Conclusión : Es posible realizar el Failover aun teniendo un GAP que no se puede resolver. En pocos pasos ejecutando comandos SQL podemos cambiar el rol de la Standby a Primaria. 

lunes, 11 de octubre de 2021

Como Clonar una Maquina Virtual en OCI #JoelKallmanDay

Como Clonar una Maquina Virtual en OCI (Oracle Cloud Infrastructure) #JoelKallmanDay

Este es mi aporte en el dia de nuestra Comunidad Oracle, 11 de Octubre 2021, iniciativa de Tim Hall desde 2016, este año renombrado #JoelKallmanDay en Memoria de Joel Kallman.  

Como Clonar una Maquina Virtual en OCI (Oracle Cloud Infrastructure) 

Cuando tenemos que crear un clon de una Maquina Virtual de OCI que solo tiene asignado un disco de booteo, podemos clonar el disco de booteo y generar la Maquina Virtual con ese disco clonado. El clonado de un disco de booteo demora unos pocos segundos.

1 - Comenzamos buscando en el Menu - Storage - Block Storage - Block Volumes 


 



2 - Seleccionamos el Boot Volume que queremos clonar y presionamos en esa linea donde estan los 3 puntitos 






3 - Alli aparece Create Clone y lo seleccionamos



4 - Ingresamos el Nombre del nuevo disco de booteo y presionamos CREATE CLONE



5 - Este Boot Volumen primero quedara en estado Provisioning y estará listo cuando aparece en verde Available

6 - En el Boot Volume clonado presionamos en los 3 puntitos y aparece



7 - Le asignamos un nombre a la VM (es recomendable el mismo nombre que el disco de boot)


8 - Vamos a cambiar la imagen. Seleccionamos en Image and shape - Edit -
 


9 - Alli seleccionamos Change Image


10 - En el listado de Image Source seleccionamos Boot Volumes



11 - Va a aparecer el clon que generamos, lo seleccionamos y luego presionamos Select Image


12 - Finalmente creamos la instancia presionando Create


13 - Presionamos Yes, Create Instance Anyway. Ignoramos este mensaje porque nos vamos a conectar exactamente igual que nos conectabamos a la original



14 - Va a quedar unos minutos Provisioning


15 - Cuando aparece en modo Running ya nos podemos conectar en la misma forma que nos conectamos con la original



Conclusión : Podemos crear un clon de una MV en OCI que solo tiene el disco de booteo asignado con los pasos explicados en este post.






 




























jueves, 3 de septiembre de 2020

Autonomous Database Mitos y Realidades - Q & A

El 17 de Agosto di una charla en el Oracle Groundbreakers Tour LATAM que se llamó ¨Autonomous Database: Mitos y Realidades¨. Lamentablemente no dio el tiempo de responder preguntas porque por problemas técnicos tenían que cortar la transmisión, así que decidí contestarlas aquí.
Al final del articulo les dejo el link donde podrán ver la sesión grabada.

- AutoTuning es solo en la nube ? o si instalamos OnPremice también lo tenemos ?
El AutoTuning incluye varias funcionalidades y las tenemos disponibles también onpremise.
Desde la version 11g Oracle configura por default una tarea que se ejecuta en la ventana nocturna llamada: Automatic SQL Tuning Advisor. Este asesor analiza las sentencias de mayor consumo de recursos y genera recomendaciones entre ellas los SQL Profiles que se puede definir que los implemente automaticamente.
En Oracle Database 19c aparece otra nueva funcionalidad que es el AutoIndexing disponible para Exadata en la que monitorea, detecta la necesidad de indices, los crea y elimina automaticamente. Podemos tener esta funcionalidad onpremise si tenemos Exadata y le instalamos Oracle Database 19c.
Ademas AutoTuning incluye la configuración de la base de datos, para lo cual tenemos las funcionalidades de AMM (Automatic Memory Managment) y ASMM (Automatic Shared Memory Managment) que configuran los buffers de memoria automaticamente, también disponibles OnPremise desde Oracle Database 10g ASMM y 11g AMM.

- Quien administraría audit vault?  un area del cliente supongo, no?
Lo que viene implementado en Autonomous Database es Database Vault, no Audit Vault. Lo administra Oracle y es para asegurar que sus DBA no tienen acceso a los datos de los clientes.

- Es posible utilizar Oracle APEX en una Autonomous DB?
Si, APEX viene configurado y se puede comenzar a utilizar a través de un browser ni bien tenemos lista la Autonomous Database.

- En nuestra organización usamos las bases standby como bases de reporting, para cargas de datawarehouse incluso nuestras aplicaciones las usan para ese fin. En la nube, se pueden usar también con ese propósito ?
En la nube de Oracle si, aunque por el momento no con Autonomous Database, ya que Autonomous Data Guard no permite acceder a las bases de datos Standby para ejecutar tareas allí.
Hay otras opciones de arquitectura en la nube de Oracle para implementarlo.

Si llegaste a este articulo y todavía no viste la presentación, o quieres revivirla, la podrás ver en el canal de youtbe de LAOUC. Te recomiendo que te suscribas para que te notifique automaticamente a medida que van subiendo las sesiones grabadas durante el evento. Este es el link:  https://www.youtube.com/channel/UCNIWWONMX1QCgktvpcTrvJg


lunes, 3 de agosto de 2020

Como Cambiar el Nombre de una Base de Datos con DBNEWID

Tengo un cliente que tiene todavia bases Oracle 11.2.0.4, si todavia! por mas que me gustaria migrarselas a 19c, en este caso debido a que es la ultima version  certificada por el proveedor del aplicativo no podemos actualizarla, como seguro les pasa todavia a Uds en muchas instalaciones. 

Surgió que necesitan clonar la VM de Desarrollo para tener un ambiente de QA. Esta VM de Desarrollo tiene bases de datos 11.2.0.4 y una vez clonada la VM le voy a cambiar el nombre de a las bases de datos para su nuevo ambiente de  QA. 

Para ello voy a usar el utilitario DBNEWID, que aunque no es una herramienta nueva, no es muy usado porque lo tradicional cuando se cambia el nombre de una base de datos es hacerlo recreando el control file. Como ya lo he usado muchas veces y funciona muy bien me dio ganas de compartirlo con Uds.

El DBNEWID 
1 - Cambia el nombre de la base de datos
2 - Cambia el DBID
3 - Genera en el $ORACLE_BASE/diag todos los directorios necesarios para la nueva base, incluido el alert

Les voy a mostrar los pasos a seguir con DBNEWID para cambiar el nombre de la base de datos luego de clonar una Maquina Virtual.
En este ejemplo la base origen se llama DESA y la destino QA1


En el ambiente clonado 
1 - Montar la Base de Datos 
(En mi caso la base estaba baja, sino previamente bajarla)
 SQL> shutdown immediate

SQL> startup mount

2- Ejecutar el DBNEWID

$ nid TARGET=sys/password@desa DBNAME=qa1

Target es la Base origen, especificamos la password de sys 

Previamente tenemos que agregar en el tnsnames.ora la entrada para esa base. 

DBNAME se especifica el nombre destino.


$ nid TARGET=sys/password@desa DBNAME=qa1

DBNEWID: Release 11.2.0.4.0 - Production on Mon Aug 3 07:02:14 2020

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

Connected to database DESA (DBID=742283927)

Connected to server version 11.2.0

Control Files in database:

    /u02/oradata/control01.ctl

    /u05/oradata/control02.ctl

Change database ID and database name DESA to QA1? (Y/[N]) => Y     -SELECCIONAR "Y"  PARA CONTINUAR

Proceeding with operation

Changing database ID from 742283927 to 1597134007

Changing database name from DESA to QA1

    Control File /u02/oradata/control01.ctl - modified

    Control File /u05/oradata/control02.ctl - modified

    Datafile /u02/oradata/system01.db - dbid changed, wrote new name

    Datafile /u02/oradata/sysaux01.db - dbid changed, wrote new name

    Datafile /u02/oradata/undotbs01.db - dbid changed, wrote new name

    Datafile /u02/oradata/users01.db - dbid changed, wrote new name

    Datafile /u02/oradata/temp01.db - dbid changed, wrote new name

    Control File /u02/oradata/control01.ctl - dbid changed, wrote new name

    Control File /u05/oradata/control02.ctl - dbid changed, wrote new name

    Instance shut down


Database name changed to QA1.

Modify parameter file and generate a new password file before restarting.

Database ID for database QA1 changed to 1597134007.

All previous backups and archived redo logs for this database are unusable.

Database is not aware of previous backups and archived logs in Recovery Area.

Database has been shutdown, open database with RESETLOGS option.

Succesfully changed database name and ID.

DBNEWID - Completed succesfully.


3 - Montar la Base que va a dar error, es esperado
SQL> startup mount
ORACLE instance started.

Total System Global Area 4275781632 bytes
Fixed Size                  2260088 bytes
Variable Size            1040188296 bytes
Database Buffers         3221225472 bytes
Redo Buffers               12107776 bytes
ORA-01103: database name 'QA1' in control file is not 'DESA'

4 - Cambiar el db_name

SQL> alter system set db_name=qa1 scope=spfile;

5 - Bajar la Base de Datos

SQL> shutdown immediate

ORA-01507: database not mounted

ORACLE instance shut down. 

6 - Generar un nuevo password file

$cd $ORACLE_HOME/dbs

$orapwd file=orapwdqa1 password=password entries=10

7- Renombrar el spfile ya que el DBNEWID cambio los parametros del spfile pero no cambio el nombre del spfile en el sistema operativo

$mv spfiledesa.ora spfileqa1.ora

8 - Cambiar el ORACLE_SID

$ export ORACLE_SID=qa1

9- Si estas clonando todo el ambiente como en este caso, cambia tambien el ORACLE_SID en el .profile, .bash_profile o el que uses

10 - Cambiar en el /etc/oratab para que quede nuestra nueva base

$vi /etc/oratab

qa1:/u01/app/oracle/product/11.2.0/dbhome_1:Y

11 - Levantar el listener o reiniciarlo

$ lsnrctl start

12 - Montar la base de datos

SQL> startup mount

13 - Resetear los REDOLOGS

SQL> alter database open resetlogs;


Verificaciones
1  - Verifico nombre de la base de datos
 SQL> select name from v$database;

 NAME

---------

QA1


 2 - Verifico nombre de la instancia

SQL> select instance_name from v$instance;

 INSTANCE_NAME

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

qa1

Recomendación : Realizar inmediatamente un nuevo backup. No se puede restaurar de los backup de la base origen esta nueva base.

Conclusión : DBNEWID  permite cambiar el nombre de una  base de datos facilmente





 



jueves, 10 de octubre de 2019

OGB Appreciation Day - Como Crear una Cuenta Always Free #ThanksOGB

Hoy celebramos el OGB Appreciation Day y este es mi aporte como agradecimiento a formar parte de la Comunidad.  Van a encontrar muchos blogs con este hashtag: #ThanksOGB 
Celebrar este dia como agradecimiento a toda la Comunidad Oracle es un idea de Tim Hall, y desde hace un par de años que lo venimos haciendo. 

Larry Ellison anuncio en el hashtagOOW19, Cloud Free Tier, donde se obtiene una cuenta Cloud Gratuita que incluye : 1- ALWAYS FREE - Es ilimitada para Desarrolladores, Estudiantes y Para las Empresas probar Prototipos 2 -30 Days Free Trial- Gratis con U$S300 en créditos para probar otros Servicios

1 - Always Free incluye :
Servicios que se pueden usar por tiempo ilimitado :

  • Dos Oracle Autonomous Databases con Oracle Application Express (APEX) y Oracle SQL Developer Web
  • Dos Oracle Cloud Infrastructure Compute VMs; Block, Object, y Archive Storage; Load Balancer y data egress; Monitoring and Notifications
2 -30 Days Free Trial incluye:
US$300 en creditos gratuitos.
  • Acceso a una gran cantidad de servicios de Oracle Cloud por 30 dias, incluyendo Bases de Datos, Analytics, Compute, y Container Engine for Kubernetes
  • Hasta ocho instancias a traves de todos los servicios disponibles
  • Hasta 5 TB de Storage
Les voy a mostrar como obtenerla
1 - Ir a https://www.oracle.com/cloud/free/  y presionar Start for Free




2 - Ingresar mail y país y luego presionar NEXT




3 - Ingresar el Cloud Account Name, es el nombre de la Cuenta Cloud. Esto es porque despues se pueden generar más usuarios que accedan a la misma Cuenta. Los usuarios son los que se registran con los mails. Con el mail ingresado en la pantalla anterior es el que va a generar al primer usuario. 
Luego para ingresar vamos a usar este Account Name (que es este generado) y el User Name (que es el mail).
En Home Region, se esta seleccionando en que DataCenter de Oracle nos van a generar la cuenta y por ende los servicios. Siempre es recomendable seleccionar el más cercano  a su País. En mi caso que estoy en Argentina elijo el DataCenter de Brasil.

4 - Ingresar el Numero de Celular y nos envia un mensaje con un Codigo de Verificación,
5 - Ingresar la Password y Confirmarla, debe cumplir una serie de requisitos que estan detallados en la misma pantalla. Luego presionar al final de la pantalla NEXT: PAYMENT INFORMATION



6 - Tenemos que ingresar la tarjeta de crédito, va a hacer un pequeño cargo que lo vuelve atrás instantáneamente, pero no va a cobrarnos ningún servicio es solo para verificar que es alguien real que esta pidiendo la cuenta y no es un bot por ejemplo. Solamente si decidimos explicitamente luego suscribirnos a algún servicio va a generar un cargo.  Clickear que esta COMPLETO al final y presionar SIGN UP


7 -  La siguiente pantalla nos avisa que estan creando la cuenta y cuando este lista recibimos un mail.
Desde ahi se puede acceder a documentación sobre varios servicios de Oracle Cloud. 

8 - Vamos a recibir un mail de este tipo cuando esta lista nuestra cuenta

Lista para Usar! 














lunes, 17 de diciembre de 2018

Como Redimensionar un Volumen ADVM File System ACFS

Cuando necesitamos agrandar un File System ACFS, tenemos que fijarnos si tenemos espacio en el volumen. Cuando tenemos un volumen creado con ADVM (ASM Dinamyc Volume Manager) podemos cambiarle el tamaño (resize) por linea de comandos o con herramientas gráficas.
A continuación voy a mostrar como realizar esta tarea por linea de comandos. Estos ejemplos estan realizados en el siguiente ambiente :
Servidor ODA
Version :Oracle Clusterware 12.1.0.2

Si en el Volumen de ADVM esta montado un File System ACFS no se necesita desmontar para redimensionarlo. Sin embargo, no se puede usar el comando volresize del ASMCMD porque da error, hay que ejecutar el comando acfsutil size que redimensiona ONLINE el Volumen y el File System.

Ejemplos:

1 -Antes de ejecutar el redimensionamiento tenemos que tener informacion del volumen. Para ello nos logueamos con usuario grid (dueño de la instalacion del producto Grid Infrastructure) y ejecutamos asmcmd en una terminal que llamaremos Terminal 1
$asmcmd
ASMCMD> volinfo -G DATA -a

Diskgroup Name: DATA
         Volume Name: DATOSPROD
         Volume Device: /dev/asm/datosprod-121
         State: ENABLED
         Size (MB): 102400
         Resize Unit (MB): 64
         Redundancy: MIRROR
         Stripe Columns: 8
         Stripe Width (K): 1024
         Usage: ACFS
         Mountpath: /u01/ACFS

2 - Abrimos otra terminal, Terminal 2. Consultamos desde Sistema Operativo el tamaño del File System, conectados también con usuario grid
[grid@host01 ~]$ df -h /u01/ACFS
Filesystem            Size  Used Avail Use% Mounted on
/dev/asm/datosprod-121

                      100G  1.8G   99G   2% /u01/ACFS

3- Volvemos a Terminal 1, da Error al tratar de redimensionar un Volumen ADVM con ACFS con el comando volresize
ASMCMD> volresize -G DATA -s 409600M DATOSPROD
ORA-15032: not all alterations performed


ORA-15476: ACFS volumes must be resized with the 'acfsutil size' operating system command. (DBD ERROR: OCIStmtExecute)

Los parámetros especificados en el ejemplo son:
-G DATA  : diskgroup
-s 409600M  : tamaño especificando M (Megas, pero puede ser K,M,G,P)
DATOSPROD : Nombre del Volumen

Si el Volumen esta montado en un File System No-ACFS no daria error este comando pero hay que desmontarlo antes de redimensionarlo. 

4 - Ejemplo exitoso de como redimensionar un Volumen ADVM con ACFS, en Terminal 2:
$ acfsutil size +300G -d /dev/asm/datosprod-121 /u01/ACFS
acfsutil size: new file system size: 429496729600 (409600MB)

Los parámetros especificados en el ejemplo son
+300G : cantidad de Gigas a agregar  (puede ser +/- y en K,M,G,P)
-d /dev/asm/datosprod-121   : Device del Volumen
/u01/ACFS  : Punto de montura

5 - Verificamos tamaño actual del volumen en Terminal 1

ASMCMD>volinfo -G DATA -a

Diskgroup Name: DATA
         Volume Name: DATOSPROD
         Volume Device: /dev/asm/datosprod-121
         State: ENABLED
         Size (MB): 409600
         Resize Unit (MB): 64
         Redundancy: MIRROR
         Stripe Columns: 8
         Stripe Width (K): 1024
         Usage: ACFS
         Mountpath: /u01/ACFS

6 - Verificamos tamaño actual del File System en Terminal 2
[grid@host01 ~]$ df -h /u01/ACFS
Filesystem            Size  Used Avail Use% Mounted on
/dev/asm/datosprod-121



                      400G  1.8G   99G   2% /u01/ACFS

Conclusión  : Para cambiar el tamaño de un volumen ADVM  hay que ejecutar el comando acfsutil. El acfsutil aumenta el tamaño del volumen y del filesystem ACFS automaticamente

jueves, 11 de octubre de 2018

ODC Appreciation Day 2018 - SQL Tuning Advisor

ODC es Oracle Developer Community (ex OTN) es la comunidad donde compartimos conocimientos. Hoy es un  dia especial porque  impulsados por Tim Hall generamos un post de algún producto de Oracle que usamos y de esta forma continuamos compartiendo nuestro conocimiento, asi que van a encontrar muchos post con este hashtag  #ThanksODC

Elegi SQL Tuning Advisor porque lo considero la primera herramienta básica que puede ayudar a mejorar la performance de un SQL y sin necesidad de un DBA experto en tuning.

Requiere licencia de Oracle Enterprise Edition y los paquetes de Diagnostic Pack y Tuning Pack. 

Se ingresan una o más sentencias SQL y genera recomendaciones con la justificación y beneficio esperado.

Se puede ejecutar manualmente desde interfaces gráficas : Enterprise Manager Database Console, Enterprise Manager Grid Control, Enterprise Manager Cloud Control, Enterprise Manager Database Express o SQL Developer.
También se puede ejecutar desde plsql con el package  DBMS_SQLTUNE.
Si tenemos una base de datos creada con dbca desde la version 11g se ejecuta mediante una tarea autómatica en ventana noctura diariamente por default. 
Posibles entradas para SQL Tuning Advisor son :
ADDM – SQL’s identificados con mala performance
AWR – SQL’s almacenados en el repositorio
Cursor Cache – Ultimos SQL ejecutados
STS – SQL’s agrupados con su contexto de ejecución

La salida de una tarea de SQL Tuning Advisor es un Reporte con Recomendaciones, que pueden ser Recolectar Estadisticas, Crear Indices, Implementar SQL Profile, Re-estructurar el SQL, Implementar SQL Plan Baseline

Se puede ejecutar por ejemplo seleccionando el SQL con gran uso de recursos desde la solapa de Performance con el boton TUNE SQL


Para interiorizarse más del uso del SQL Tuning Advisor los invito a ver mi webinar gratuito en https://www.orapub.com/webinars 

GRATIS Cómo usar SQL Tuning Advisor