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


viernes, 14 de octubre de 2016

Mi Primer Oracle Open World

Este año tuve la oportunidad de asistir al Oracle Open World 2016 San Francisco https://www.oracle.com/openworld/index.html
Era mi primera vez en San Francisco, mi primera vez en el OOW y la primera vez que iba a dar una presentación en ingles!.
La experiencia fue super enriquecedora y quede maravillada. Me encantó!. 
El evento se organiza en el Moscone Center http://www.moscone.com/site/do/index un centro de eventos que esta compuesto por 3 edificios que se dedican totalmente a Oracle y se realizan durante todos los dias permanentemente sesiones en paralelo, alrededor de 2000 sesiones en total. Asisten miles de personas de todo el mundo.
Mi presentación fue el Domingo 19/9 a las 9:15, el tema fue "Improving SQL Performance with SQL Profiles without Changing SQL Code". Tuve una gran cantidad de asistentes, alrededor de 140 personas!!. Entre ellos gente a la que admiro mucho como Carlos SierraMauro PaganoArup Nanda y Kamran Agayev.  
Al finalizar OTN Latinoamerica me hizo una entrevista y ya la publicó editada con paneos de mi presentación https://www.youtube.com/watch?v=8wfuw60-x_o&app=desktop
Mi presentación la pueden bajar los que se registraron en el OOW16 desde https://oracle.rainfocus.com/scripts/catalog/oow16.jsp?search=UGF5266&search.event=oracleopenworld y en breve la voy a agregar publica en este blog.
Ese dia a la noche me invitaron a la cena Oracle ACE Dinner por ser Oracle ACE Associate. Es super interesante tener la oportunidad de conocer y dialogar con otros ACE de todo el mundo. 
Al horario de la cena, estaba la apertura con Larry Ellison que me lo perdi, por suerte se pueden ver los videos On Demand de Open World Keynotes, JavaOne Keynotes, Executive Solutions Sessions y General Sessions https://www.oracle.com/openworld/on-demand/index.html
Con el pase full se tiene de lunes a jueves el almuerzo incluido. El martes a la noche Oracle organizó una cena para los asistentes de Latinoamerica donde tuve oportunidad de conocer gente y de encontrarme con conocidos. El miércoles a la noche Oracle organizó un recital que lo llama Oracle Appreciation Event, este año fue en el AT&T Park Gwen Stefani y Sting. Estuvo buenisimo!!
Asisti a muchas sesiones y varias meetings entre otras de Accenture, Bloggers, etc. Tuve oportunidad de hablar y tener contacto con profesionales de todo el mundo y con Product Managers de Oracle, ademas de asistir al Oracle Application User Expirience, un Tour programado para conocer el lab en Oracle HQ (Nave Nodriza) y las tendencias. 
Además de participar en estas actividades aproveche a conocer San Francisco que es una ciudad espectacular!
Aprovecho este blog para agradecer a todos mis compañeros de AROUG y en especial a Gustavo Gonzalez que gracias a su apoyo pude llegar a ser speaker en este evento.
Si tenes alguna vez la oportunidad de asistir a un Open World, no lo dudes, es una experiencia inolvidable!

Moscone Center
Mi presentación


Mi presentación
Con Arup Nanda


En el Hall de Exposiciones
Oracle ACE Dinner

Con Alex Zabala, Mauro Pagano, Carlos Sierra y Mike Dietrich

Tour Oracle User Experience




martes, 11 de octubre de 2016

OTN Appreciation Day : SQL Profiles

Los SQL Profiles son objetos de la base de datos persistentes en el diccionario de datos. Estos objetos son diferentes a otros objetos de la base porque no se crean con la sentencia "CREATE" como "CREATE TABLE" o "CREATE INDEX", estos objetos tienen que ser generados.
El objetivo de los SQL Profiles es mejorar la performance de los SQL sin modificar el código, y son implementados usando HINTS. Si bien con la vista dba_sql_profiles podemos ver los SQL Profiles creados no hay ninguna vista para ver los HINTS que continen.
Los SQL Profiles una vez generados tienen que ser aceptados para su implementación.
Un SQL Profile se genera e implementa para una sentencia SQL especifica. Una vez implementado, cada vez que ejecuta esa sentencia SQL el optimizador usa el SQL Profile para dicha sentencia y genera un mejor plan de ejecución.
Inicialmente fueron creados por Oracle en 10g para que sean generados por el SQL Tuning Advisor. Luego Carlos Sierra desarrollo un script coe_xfr_sql_profile dentro de su herramienta SQLT que genera SQL Profiles.
Se usan para dos situaciones diferentes:
1 - Cuando tenemos un problema de un SQL con alto consumo de recursos y el plan de ejecución mejoraría con un ajuste de estadisticas, cuando invocamos al SQL Tuning Advisor va a generar un SQL Profile.
2 - Cuando tenemos una sentecia SQL que cambia el elapsed time de un dia para el otro pasando a aumentarlo dramaticamente, el script coe_xfr_sql_profile encuentra el mejor plan de ejecución anterior en el AWR y genera un SQL Profile.

Hay varias diferencias entre los SQL Profiles generados por el SQL Tuning Advisor y los generados por el script coe_xfr_sql_profile.

SQL Profiles generados por SQL Tuning Advisor 
- Son HINTS que ajustan las estadisticas para que el optimizador elija un mejor plan
- Son generados por el ATO (Automatic Tuning Optimizer) que es el optimizador en modo Tuning
- Tiene total dependencia con las estadisticas, si cambian las estadisticas ya quedan obsoletos estos ajustes y el optimizador puede elegir otro plan

SQL Profiles generados por el script coe_xfr_sql_profile
- Son Hints para reproducir un plan de ejecución específico
- Son generados por el script coe_xfr_sql_profile desde el mejor plan de ejecución para esa sentencia que encuentra en el AWR
- No tiene dependencia con las estadisticas, si cambian las estadisticas igual va a repodrocir el mismo plan

Para saber si un SQL esta usando un SQL Profile podemos verlo en su plan de ejecución en la sesion NOTE
Ejemplo:


SQL> select * from table(dbms_xplan.display_cursor);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------
SQL_ID g3wubsadyrt37, child number 1
-------------------------------------
select count(*) from plan_stability where owner='SYS'

Plan hash value: 363261562

-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2476 (100)| |
| 1 | SORT AGGREGATE | | 1 | 6 | | |
|* 2 | TABLE ACCESS FULL| PLAN_STABILITY | 23092 | 135K| 2476 (1)| 00:00:30 |
-------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("OWNER"='SYS')

Note
-----

- SQL profile coe_g3wubsadyrt37_363261562 used for this statement



El SQLT se puede bajar desde MOS
Using Sqltxplain to create a 'SQL Profile' to consistently reproduce a good plan (Doc ID 1487302.1)
o del Blog de Carlos Sierra
https://carlos-sierra.net/2012/04/09/custom-sql-profile-and-plan-stability-on-10g/


La otra forma de generar SQL Profiles manualmente no documentada por Oracle es importando los HINTS con el DBMS_SQLTUNE.IMPORT_SQL_PROFILE.

Este es mi post en agradecimiento a OTN, OTN Appreciation Day es una iniciativa de Tim Hall https://oracle-base.com/blog/2016/09/28/otn-appreciation-day/


domingo, 24 de julio de 2016

Data Guard. Como Verificar el Rol de la Base de Datos

En este ejemplo tengo una base de datos en cada Data Center (DC1 y DC2).
En el Datacenter 1 se encuentra la Base de Datos PRIMARIA que esta en el servidor srv_rrhh_dc1 y el nombre de la instancia es RRHH_DC1.
En el Datacenter 2 se encuentra la Base de Datos STANDBY que esta en el servidor srv_rrhh_dc2 y el nombre de la instancia es RRHH_DC2

Para verificar el rol en que esta la base de datos en ese momento, se puede ejecutar la siguiente consulta :

  • En servidor srv_rrhh_dc1:

$export ORACLE_SID=RRHH_DC1
$sqlplus / as sysdba
SQL> col db_unique_name format a15
SQL> col database_role format a25
SQL> select name, db_unique_name,database_role from v$database;

NAME                        DB_UNIQUE_NAME  DATABASE_ROLE
--------------------------- --------------- -------------------------
RRHH                        RRHH_DC1            PRIMARY


  • En servidor srv_rrhh_dc2:
$export ORACLE_SID=RRHH_DC2

$sqlplus / as sysdba

SQL> col db_unique_name format a15
SQL> col database_role format a25
SQL> select name, db_unique_name,database_role from v$database;

NAME                        DB_UNIQUE_NAME  DATABASE_ROLE
--------------------------- --------------- -------------------------
RRHH                        RRHH_DC2            PHYSICAL STANDBY

viernes, 24 de junio de 2016

Como crear una Base de Datos CDB vacia en 12c

Para crear una Base de Datos CDB usamos el utilitario dbca. En este caso la vamos a crear vacia, o sea sin ninguna PDB, excepto la PDB$SEED que se crea por default.

$dbca


Dejamos seleccionada la opción que aparece por default "Create Database".
Next->


Seleccionamos la opción "Advanced Mode". Next->


Seleccionamos el template que se adecue mejor al tipo de PDB's que posteriormente vamos a implementar, en este caso dejo seleccionada la opción default "General Purpose or Transaction Proccessing" que es la mejor para OLTP. 
Next-> 


Ingresamos el nombre de la CDB en "Global Database Name". Seleccionar "Create as Container Database" y la opción "Create an empty Container Database".  Next->


Dejamos el default que setea el port para el EM Express. En este punto podemos configurar otro port o no seleccionar esta opción. Si tenemos EM Cloud Control podemos seleccionar "Register with EM Cloud Control" e ingresamos los datos del OMS y del usuario Admin del OMS asi la registra. Next->


Ingresamos en esta pantalla la password para los usuarios privilegiados. Selecciono en este ejemplo la opción "Use the Same Administrative Password for all Accounts" e ingreso la password. Next->


En este caso dejo seleccionado el Listener Default que aparece, es el único que hay en este servidor. Si hay varios podemos elegir cual va a ser el Listener de este CBD o podemos crear un Listener nuevo desde esta pantalla. Next->


Ingresamos el path para los datafiles y el fast_recovery_area. Next->



Ingresamos si tenemos para configurar Database Vault y/o Label Security. En este caso lo dejo sin configurar. Next->


Modificamos si es necesario la cantidad de Memoria (PGA+SGA) en este caso dejo el default recomendado.Next->


Dejamos la opción default Create Database seleccionada.Next->


Revisamos la pantalla de Summary.  Finish->


Demora varios minutos la creación de la base de datos pero el tiempo va a depender de los recursos del servidor. Al finalizar aparece la siguiente pantalla con el resumen.  Close->


De esta forma quedo creada la base de datos CDB vacia sin ninguna PDB.

miércoles, 8 de junio de 2016

Como eliminar una Base de Datos 12c NON-CDB con DBCA

La forma más fácil para eliminar una base de datos es con el dbca (Database Configuration Assistant). Además de eliminar los datafiles, como podriamos hacerlo desde sistema operativo, nos asegura que no nos quede ningún archivo suelto ya que entre otras cosas la elimina del inventario.
Este ejemplo es en un servidor linux que tengo creadas 3 bases de datos Non-CDB en 12c.
Una recomendación es asegurarse de tener backup de la base de datos que se quiere eliminar, siempre puede aparecer alguien que necesitaba algo de esa base de datos.
Debido justamente a que es muy fácil eliminar una base de datos, les recomiendo cuando hagan esta tareas estar atentos y leer bien el nombre de la base de datos que se selecciona y verificarlo en el resumen. Sobre todo porque en muchas instalaciones por nomenclatura las bases tienen nombres muy similares con cambio de un solo digito o letra.
Ante la posibilidad de equivocación en la selección de la base de datos a eliminar, les recomiendo asegurarse de tener backup de todas las bases de datos que estan en el servidor antes de empezar.

1. $dbca

2. Nos va a aparecer la pantalla inicial "Operacion de Base de Datos" donde debemos seleccionar "Suprimir Base de Datos"
3. Presionar Siguiente y en la próxima pantalla eligir la base de datos a eliminar e ingresar un usuario sysdba y su password, en este caso ingrese el usuario sys


4. Presionar siguiente y en la próxima pantalla aparece la opción para eliminar el registro en Cloud Control, Si es que lo tenemos, en este momento ingresamos los datos del OMS y del Administrador del EM. En mi caso no lo tenia.

5. Presionar siguiente y aparece el resumen. Verificar el nombre de la base de datos, asegurarse que es la que se quiere eliminar y despliega los archivos que va a eliminar controlfiles y datafiles pertenecientes a la base de datos.
6. Presionar Terminar. Nos va a aparecer un cuadro de dialogo preguntando si estamos seguros. Tener en cuenta que esta operación no tiene un "deshacer" si nos equivocamos de base de datos hay que restaurarla de un backup.
7. Presionamos SI para continuar. Nos va a aparecer la "Pantalla de Progreso"

8. En mi caso demoro 1 minuto y apareció la pantalla "Terminar"