Oracle obtener DDL de objetos

En ocasiones es muy útil obtener la instrucción DDL de un objeto de base de datos determinado.base_datos_objetos

Podemos por ejemplo recrear un usuario de un entorno a otro sin ni siquiera conocer la contraseña.

Las instrucciones DDL las podemos obtener llamando a la función:

Source   
DBMS_METADATA.GET_DDL (
object_type IN VARCHAR2,
name IN VARCHAR2,
schema IN VARCHAR2 DEFAULT NULL,
version IN VARCHAR2 DEFAULT 'COMPATIBLE',
model IN VARCHAR2 DEFAULT 'ORACLE',
transform IN VARCHAR2 DEFAULT 'DDL')
RETURN CLOB;

Continue reading

Oracle reconstruir índices y estado

En tablas donde hay cambios constantemente como un mantenimiento más de la BD, hay que reconstruir los índices B-TREE de forma periódica, por ejemplo (la sintaxis es más compleja):

Source   
ALTER INDEX SCOTT.PK_EMP REBUILD;

Un B-TREE ideal tiene todas las ramas perfectamete equilibradas, un B-TREE degradado puede ofrecer tiempos de búsqueda lineales en lugar de logarítmicos debido a un fuerte desequilibrio.

Para determinar si un índice debe ser reconstruido:

Continue reading

Oracle estadísticas base de datos, generación, velocidad y actividad redolog (Oracle DB)

Cada nueva versión del optimizador cada vez es más dependiente de las estadísticas, la calidad de ellas puede ser suficiente para una versión anterior pero para la actual no.

Como regla general se ha de analizar una tabla (en casacada, es decir incluyendo índices) cuando se realizan modificaciones importantes sobre ella. Por ejemplo:

  • truncates
  • Insert into .. select …
  • Cualquier inserción, actualización y borrado masivo (se entiendo por masivo que afecte a más de un 20% del total de los registros)

Las estadísticas se pueden obtener de muchas maneras, algunas más rápidas que otras (estimaciones parciales, completas, etc…) y con más o menos generación de redologs.

Por ejemplo si usamos el paquete DBMS_STATS (https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS059) concretamente el subprograma GATHER_TABLE_STATS (https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68582), la sintaxis es muy similar para los subprogramas:

Continue reading

Jobs en MySQL

Esta vez vamos a ver la forma de realizar una tarea programada dentro de MySQL (salvando las distancias, un job de Oracle).

Primero tenemos que asegurarnos de que tenemos el scheduler arrancado esto lo vemos con un:

Source   
mysql> SHOW processlist;
+----+------+-----------------+------------+---------+------+-------+------------------+
| Id | User | Host            | db         | Command | Time | State | Info             |
+----+------+-----------------+------------+---------+------+-------+------------------+
|  6 | root | localhost:49987 | assets_pru | Sleep   |  299 |       | NULL             |
|  8 | root | localhost       | assets_pru | Query   |    0 | NULL  | SHOW processlist |
+----+------+-----------------+------------+---------+------+-------+------------------+
2 rows IN SET (0.00 sec)

No está arrancado, para esto tenemos que modificar un parámetro de my.cnf en la seccion mysqld:

Continue reading

Poner una BD Oracle en modo QUIESCE (solo sesiones DBA)

En algunas ocasiones es necesario realizar operaciones sobre una BD cuando está abierta, por ejemplo mover datafiles o poner tablespaces en read only.

Estas operaciones generalmente se pueden realizar con la BD en producción, pero el problema surge cuando tenemos una actividad alta y tenemos que realizar cambios en masa. En estos casos lo mejor es restringir el acceso a los usuarios, permitiendo solo accesos DBA (sys o system si no hemos creado ningún otro).

Podemos poner la BD en modo quiesce (quieto o inactivo), solo sys y system pueden crear nueva sesiones, el resto siguen existiendo hasta que terminan la transacción.

Para ver el estado de la BD:

Continue reading

Oracle compactar tabla BLOB, compactado de tablas con objetos BLOB (Oracle)

Las tablas con objetos BLOB en tablespaces diferentes del resto de la tabla, tienen un tratamiento algo diferente.

Vamos a preparar un entorno de pruebas:

Creamos 2 tablespaces con:

Source   
CREATE SMALLFILE TABLESPACE "TS_PFIRMA_DATOS" LOGGING DATAFILE  '/u01/app/oracle/oradata/PRUEBA/TS_PFIRMA_DATOS.dbf' SIZE 10M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
CREATE SMALLFILE TABLESPACE "TS_PFIRMA_BLOB" LOGGING DATAFILE '/u01/app/oracle/oradata/PRUEBA/TS_PFIRMA_BLOB.dbf' SIZE 10M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

Continue reading

Índices fake en Oracle

Recientemente siguiendo el documento ID 456468.1, he realizado una verificación de la integridad del catálogo. El caso es que han aparecido un par de errores indicando un problema con un identificador de objeto:

1703982

Este objeto existe en dba_objets, la consulta:

Continue reading

Error ORA-13605 al ejecutar SQL Access Advisor en Oracle 10.2.0.5

Una vez más se vuelve a repetir la historio, se instala un PathSet con la idea de solucionar problemas y aparecen otros nuevos (esta vez sin documentas).

Esta vez ha sido al instalar el PatchSer 10.2.0.5 sobre la versión 10.2.0.1. El caso es que ahora al intentar ejecutar el SQL Access Advisor, no aparece la tarea recién creada pero si un error en el alert:

Continue reading

ORA-01591 bloqueo transacción distribuida

Es posible que una aplicación muestre en su log un error ORA-01591, que según la documentación oficial es debido a una trasacción de 2 fases que no puede completarse.

Este tipo de transacciones se usan, por ejemplo, cuando se hace un commit usando tablas obtenidas a partir de un dblink. Se verifica que se puede hacer un commit en remoto, otro en local y finalmente se hace en los 2 sitios de forma atómica.

Bueno pues cuando se pierde la conexión con un dblink durante una transacción, la transacción queda en un estado dudoso y si alguna otra sesión intenta modificar los objetos involucrados veremos el error ORA-01591.

Continue reading

Contraseña caducada oracle, Oracle 11

Con la versión más reciente de Oracle Database 11g, se ha reforzado la seguridad por defecto. Esto en principio debería ser positivo, pero hay algunas situaciones en las que pueden resultar desagradables algunos comportamientos.

El caso más claro lo podemos encontrar en la moficación del perfil (PROFILE) DEFAULT, que es aplicado a cualquier usuario creado de forma predeterminada.

Continue reading