Posts

Showing posts from 2019

ALTER SYSTEM ARCHIVE LOG CURRENT vs ALTER SYSTEM SWITCH LOGFILE

Ambos comandos forzan el Switch de los grupos de Redo Log Online, pero ALTER SYSTEM SWITCH LOGFILE: Es asíncrono, no espera la confirmación que los archivos de redolog online se hayan sido archivados, mientras que ALTER SYSTEM ARCHIVE LOG CURRENT: Es síncrono y espera la confirmación que los Redo Log Online fueron archivados por el ARCHIVER. 00.- Nuestro ambiente: Un RAC de 2 nodos con 3 grupos de Redo Log Online en cada Instancia de Base de Datos. SQL> select inst_id, instance_name from gv$instance; INST_ID INSTANCE_NAME ---------- ---------------- 1 CURSO1 2 CURSO2 select thread#, group#, status,bytes/1024/1024 size_mb from v$log order by thread#, group#; THREAD# GROUP# STATUS ---------- ---------- ---------------- 1 1 INACTIVE 1 2 INACTIVE 1 3 CURRENT <---Grupo que esta siendo escrito por el Log Writter. 2 4 INACTIVE 2

ORA-20005 Estadisticas bloqueadas.

El error ORA-20005 significa que las estadísticas fueron bloqueadas y estas tratando de colectarlas BEGIN dbms_stats.gather_table_stats(ownname=> 'ESQUEMA', tabname=> 'TABLE_TEST',Degree=> 8, cascade=>false, estimate_percent=> DBMS_STATS.auto_sample_size); END; / ERROR at line 1: ORA-20005: object statistics are locked (stattype = ALL) ORA-06512: at "SYS.DBMS_STATS", line 34634 ORA-06512: at line 1 Verificamos que las estadísticas están bloqueadas. col owner for a24 col table_name for a32 select owner,table_name,STATTYPE_LOCKED from dba_tab_statistics where table_name='TABLE_TEST' and owner='ESQUEMA'; OWNER TABLE_NAME STATT ------------------------ -------------------------------- ----- ESQUEMA TABLE_TEST ALL Los posible valores para el campo STATTYPE_LOCKED son :NULL, DATA, CACHE y ALL. Si esta en NULL significa que no esta bloqueada. Para desblqu

Datapump 06 - Como respaldar el AWR con export datapump

Este es el sexto artículo sobre datapump, igualmente este pudiera ser un post referente a AWR. Vamos a ver como respaldar los datos del AWR (Automatic Workload Repository) con el Oracle Datapump. Como sabemos el AWR tiene una retención definida, por defecto solo guarda los últimos 8 días. Si queremos preservar un periodo en particular o llevarlo a otro ambiente para su posterior análisis podemos respaldarlo con un export datapump, Oracle trae un script que simplifica esta tarea. Paso 01.- Creamos el objeto directorio. sqlplus / as sysdba CREATE OR REPLACE DIRECTORY DPUMP_AWR AS '/home/oracle/dbprocs/awr'; Paso 02.- Exportamos el AWR con el script awrextr.sql. El script va a requerir que ingresemos 4 datos. sqlplus / as sysdba @?/rdbms/admin/awrextr.sql Paso 02.1.- database id, el script te sugiere uno. The default database id is the local one: '3645396109'. To use this database id, press to continue, otherwise enter an alternative. Enter value f

FULL TABLE SCAN-Oracle no quiere utilizar mi índice

Image
Quizás esta imagen les sea conocida, 7 ó 12 personas apiladas detrás del DBA de turno viendo su pantalla, preguntando que sucede o haciendo suposiciones, te llaman para que apoyes, llegas, te abres paso entre la multitud de jefes y lo primero que vez es una gran franja azul en el Cloud Control (OEM), luego de dos clic en el OEM o tres consultas al ASH, es evidente que una consulta SQL está realizando muchísimas lecturas a disco. Un desarrollador refuta que la tabla tiene un índice por el campo búsqueda en el WHERE, sin embargo, la Base de Datos decide hacer Table Full Scan. ¿Por qué está pasando esto? Comencemos: Consulta SQL que está generando afectación: SELECT ID_EMBRQ FROM DIST_EMBARQUE_OPER WHERE ID_EMBRQ =:1; Podemos observar que el campo "ID_EMBRQ" es de tipo VARCHAR2 Column Type Name Data DATA_LENGTH N POS -------------------------------- ------------ ----------- - ---- ID_EMBRQ

Datapump 05 - Cómo funcionan los parámetros DUMPFILE, FILESIZE Y PARALLEL en un expdp.

DUMPFILE, FILESIZE y PARALLEL son parámetros dentro de la herramienta expdp, los cuales tienen una estrecha relación y se llegan afectar entre sí. En este post vamos a descubrir esa relación. Comencemos: DUMPFILE indica el nombre del archivo o los archivos generados (dump file), incluso también se puede definir la ruta donde se van a almacenar a través de un objeto directorio. Tenemos el comodín “%U” si lo colocamos en el nombre del archivo va a sustituir ese comodín por un valor entero de forma consecutiva desde el 01 hasta el 99 según lo requiera. PARALLEL indica cuántos procesos van a trabajar simultáneamente para cargar los datos en los archivos (dump file). (Nota: El paralelismo únicamente funciona en la versión Enterprise Edition) FILESIZE especifica el tamaño máximo que pueden alcanzar los archivos generados (dump file) Ejemplos: Supongamos vamos a exportar una tabla de aproximadamente 240MB, veamos que sucede en diferentes casos: Caso 01: En el siguiente ejemplo

Datapump - 04 Export con flashback time

Image
Cuando escucho la palabra "Flashback" lo primero que pienso es el video juego de los años 90, muy divertido y adelantado para su época. Sin embargo, en esta oportunidad vamos a hablar de Oracle Flashback en el Datapump y como nos permite hacer viajes en el tiempo. Flashback es una tecnología que comenzó con Oracle 9i y sigue evolucionando. Esta herramienta permite a los administradores y usuarios ver y manipular estados pasados de los datos sin necesidad de recuperar toda la base de datos a un punto de tiempo en especifico. Vamos a crear un respaldo de una tabla pero con su imagen de hace 30 minutos y no con la imagen actual. Comencemos: 01.- Insertamos 5 registros a la 14:00, la tabla tiene un campo llamado "fecha" donde vamos a insertar la hora actual a través de la función SYSDATE. 14:00:33 SQL> INSERT INTO test.tab01 (ID,NOMBRE,FECHA) SELECT level, 'First Load', sysdate FROM dual CONNECT BY level <= 5; 5 rows created. 14:00:46 SQL>

Datapump – 03 Directorios

Una diferencia obvia entre Datapump y el export/import tradicional es el uso de objetos Directorio, lo cual algunas personas les causa un poco de confusión. Son objetos de base de datos que apuntan a un directorio específico en el sistema operativo, estos permiten flexibilidad en el manejo de códigos y script, a diferencia de poner explícitamente la ruta del directorio, lo que se conoce como *"quemar" o "harcodear",  solo utilizas este alias, es decir si la ruta cambia no afecta al código. Comencemos: Como crear un directorio: CREATE OR REPLACE DIRECTORY EXP_DIR AS '/u01/workarea'; Si requerimos que otros usuarios tengan acceso de lectura y/o escritura: GRANT READ, WRITE ON DIRECTORY EXP_DIR TO otro_usuario; Chequear quienes tienen permisos sobre el directorio: COL TABLE_NAME FOR A32 COL GRANTEE FOR A24 COL OWNER FOR A16 COL GRANTOR FOR A16 COL PRIVILEGE FOR A12 SELECT * FROM DBA_TAB_PRIVS WHERE TABLE_NAME='EXP_DIR'; Revisar los directori

Datapump – 02 ¿Por qué falla el comando el Export Datapump con la opción Parallel en Oracle RAC?

Teníamos un script para un export/import datapump que funcionaba cuando la BD era single y ahora que fue llevada a Oracle RAC está fallando. ¿Qué sucedió? Cuando se activa la opción de PARALLEL el datapump va a invocar varios trabajadores para separar el trabajo y así optimizar el proceso, sin embargo hay que tener en cuenta un detalle cuando estamos en una configuración de Oracle RAC. Estos trabajadores van a estar en cada nodo del RAC, entonces el dumpfile debe estar ubicado en un almacenamiento compartido como ASM o un Clustered-filesystem, sino va a suceder el siguiente error. ORA-31693: Table data object "TEST"."TEST_15" failed to load/unload and is being skipped due to error: ORA-31617: unable to open dump file "/datadir/temp_expdp /TEST_test_03.dmp" for write ORA-19505: failed to identify file "/datadir/temp_expdp /TEST_test_03.dmp" ORA-27037: unable to obtain file status Como conclusión, Datapump(PARALLEL) en Oracle RAC el d

Datapump - 01 Extraer sentencias DDL de un export Datapump

Saludos, estoy comenzando el día de hoy con una serie de al menos 10 artículos relacionados con la herramienta de datapump, esta apareció con oracle 10g como la evolución del export/import. Datapump trae mejoras e interesantes funcionalidades con cada nueva versión de Oracle. Si solo lo has usado para mover y hacer un respaldo lógico de una tabla o esquema, quizás te estás perdiendo de algunas utiles caracteristicas que pueden simplificar tu vida. Si deseamos extraer en un archivo el script de creación y carga de un export datapump que realizamos previamente. impdp  DUMPFILE=EXP_DIR:expADM_ADMIN.dmp sqlfile=EXP_DIR:sqlADM_ADMIN.sql

Excluir los usuarios por defecto en Oracle

Las bases de datos tienen varios usuarios por defecto, por ejemplo el más conocido es SYSTEM y otros que se crean al activar o instalar una opción adicional como “Oracle Application Express”. En muchas ocasiones no estamos interesados en conocer los detalles de ellos cuando hacemos consultas al diccionario de la base de datos. Por ejemplo si quieres conocer un resumen por tipo de objetos pero solo te interesan los usuarios propios del negocio, entonces debemos excluir los esquemas que crea Oracle por defecto o para sus funcionalidades. Revisando la documentación en línea de Oracle se pueden conseguir varios ejemplos de los usuarios que deberíamos excluir en nuestras consultas sino queremos verlos. A continuación les muestro la  lista de los usuarios que excluyo en mis consultas de monitoreo: owner not in ('ANONYMOUS','AUDSYS','CTXSYS','DBSNMP','LBACSYS','MDSYS','OLAPSYS','ORDDATA','ORDPLUGINS','ORDSYS