Resolver problemas con objetos inválidos
En un primer momento todos los objetos tienen un estado válido:
- Pero los objetos PL/SQL y las vistas pueden invalidarse, y se pueden validar automáticamente teniendo acceso a ellos.
- Pero los índices también pueden hacerse inservibles con lo que no se pueden validar de forma automática, se requiere reconstruir el índice.
Objetos inválidos: Los procedimientos PL/SQL almacenados son código compilado y localizado en el DD como objetos de tipo PL/SQL:
- Procedimientos.
- Funciones.
- Triggers.
- Paquetes.
- Tipos de objeto.
Cuando una vista es creada está en estado válido, pero puede ser invalidada si la estructura de la tabla a la que hace referencia se le hace una operación DML o se cambia las claves. Otros objetos también pueden ser invalidados por muchos motivos.
Para ver los objetos inválidos podemos consultar la columna status=INVALID de la tabla dba_objects:
- SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE STATUS=[INVALID]
Siempre que un objeto PL/SQL este en estado inválido Oracle intentara compilarlo nuevamente pero no siempre se pasaran al estado válido.
Para compilar un objeto podemos usar la siguiente sentencia:
- ALTER object_type object_name COMPILE
Para mostrar los errores de los objetos que no sean las vistas, se puede usar la siguiente sentencia:
- SHOW ERRORS object_type object_name
Con la vista DBA_DEPENDENCIES se pueden ver las dependencias que tienen los objetos.
Para hacer una recompilación de todos los objetos de la Base de Datos se puede usar los siguientes comandos:
- Para Linux/Unix: @?/rdbms/admin./utlrp
- Para Windows: @?dbmsadmin.utlrp
Para ejecutar estos comando es necesario ser SYSDBA, y una vez finalizado, todos los objetos que sigan en estado inválido requerirán un análisis individual. Índices inservibles: Cuando un objetos PL/SQL se vuelven inválidos, la primera vez que Oracle tenga acceso a él intentará compilarlo de nuevo para ponerlo en estado válido. Pero si este objeto se trata de un índice, este tendrá que ser reparado antes de ser usado.
Los índices pueden invalidarse porque la tablaa la cual sus punteros indica
resolver problemas objetos invalidos