Archive for the ‘Oracle’ Category

Extraer la cantidad de registros de una tabla en Oracle

jueves, abril 26th, 2012

Para extraer la información de que cantidad de registros tiene una tabla en la base de datos Oracle se debe utilizar la siguiente consulta:

SELECT table_name
FROM all_Tables
WHERE owner = '&usuario' and num_rows=0;

Esta retornará todas las tablas con cero(0) registros

Instalar el cliente de Oracle 10g en windows 7 (Home Premium)

jueves, febrero 9th, 2012

Oracle no tiene certificadas las aplicaciones de Oracle 10g para Windows 7. Por mi parte al intentar instalar el cliente de Oracle 10g reclamaba porque las versiones no eran compatibles. Para la instalación ejecute el setup con el siguiente parametro:

setup.exe -ignoreSysPrereqs

Con ello la instalación se logró en Windows 7 Home Premium, el unico problema es que el menu solo apareció al reinicio.

Error de compilacion de un Package en Oracle (PLS-201 o PLS-00201)

jueves, enero 12th, 2012

Un error raro me apareció mientras compilaba un package

ERROR at line 1:
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-201: identifier 'UNDEFINED' must be declared

Este error se da comunmente a package que tienen relacionados una vista, una solución fue reconstruir la vista según lo explicado en un blog ya que las vistas que tenían ‘select *’ eran las que provocavan el problema.

Eectivamente el error desapareció, pero ninguna de mis vistas tienen el ‘select *’ por lo que la razon es otra. Como utilizo SQL Developer para desarrollar en Oracle, me di cuenta que en la definición de las vistas (al ver la lengueta SQL de la vista) guarda además los nombre de los campos de la vista, aun cuando esto se ocupe el ‘select *’, o sea, la vista se define

CREATE OR REPLACE FORCE VIEW "MI_VISTA" ("CAMPO_UNO", "CAMPO_DOS", ...)
AS ...

Si cambias sólo el select de la vista sin reconstruir la vista te aparecerá ese error en los packages relacionados con ella.

Creación de script para compilación de objetos inválidos en Oracle

jueves, enero 12th, 2012

Para generar sentencias de compilación para los objetos que se encuentran en estado inválido en Oracle sería útil el siguiente script:

select
   'ALTER ' || OBJECT_TYPE || ' ' ||
   OWNER || '.' || OBJECT_NAME || ' COMPILE;'
from
   dba_objects
where
   status = 'INVALID' and owner = 'nombre_del_schema'
and
   object_type in ('PACKAGE','FUNCTION','PROCEDURE','PACKAGE BODY')
;

Encontrando objetos inválidos en Oracle

jueves, enero 12th, 2012

Por lo general en los momentos de compilación de un Packages que esta basado en una vista muchas veces falla por que encuentra la vista o parte de la definicion de un package inválida. El siguiente script esta construido para detectar los objetos invalidos de un esquema

select
   owner, object_type, object_name
from
   dba_objects
where
   status != 'VALID' and owner = 'nombre_del_schema'
order by
   owner,
   object_type
; 

Obviamente si eliminas el «and and owner = ‘nombre_del_schema'» saldrán todos los objetos que se encuentran descompilados.

ORA-00439: función no activada: Online Index Build

lunes, noviembre 14th, 2011

Como ya escribí anteriormente, se puede hacer una reconstrucción de índices en línea en Oracle, pero puede aparecerte el siguiente error:

ORA-00439: función no activada: Online Index Build

Primero debes ver que tengas activada la funcionalidad con la siguiente consulta

select * from v$option

Esto debiese generarte una salida como la siguiente

PARAMETER                             VALUE                                                            
------------------------------------- ----- 
Partitioning                          TRUE
Objects                               TRUE
Real Application Clusters             FALSE
Advanced replication                  TRUE
Bit-mapped indexes                    TRUE
Connection multiplexing               TRUE
Connection pooling                    TRUE
Database queuing                      TRUE
Incremental backup and recovery       TRUE
Instead-of triggers                   TRUE
Parallel backup and recovery          TRUE
Parallel execution                    TRUE
Parallel load                         TRUE
Point-in-time tablespace recovery     TRUE
Fine-grained access control           TRUE
Proxy authentication/authorization    TRUE
Change Data Capture                   TRUE
Plan Stability                        TRUE
Online Index Build                    TRUE
Coalesce Index                        TRUE
Managed Standby                       TRUE
Materialized view rewrite             TRUE
Materialized view warehouse refresh   TRUE
Database resource manager             TRUE
Spatial                               TRUE
Visual Information Retrieval          TRUE
Export transportable tablespaces      TRUE
Transparent Application Failover      TRUE
Fast-Start Fault Recovery             TRUE
Sample Scan                           TRUE
Duplexed backups                      TRUE
Java                                  TRUE
OLAP Window Functions                 TRUE
Block Media Recovery                  TRUE
Fine-grained Auditing                 TRUE
Application Role                      TRUE
Enterprise User Security              TRUE
Oracle Data Guard                     TRUE
Oracle Label Security                 FALSE
OLAP                                  TRUE
Table compression                     TRUE
Join index                            TRUE
Trial Recovery                        TRUE
Data Mining                           TRUE
Online Redefinition                   TRUE
Streams Capture                       TRUE
File Mapping                          TRUE
Block Change Tracking                 TRUE
Flashback Table                       TRUE
Flashback Database                    TRUE
Data Mining Scoring Engine            FALSE
Transparent Data Encryption           TRUE
Backup Encryption                     TRUE
Unused Block Compression              TRUE

 54 filas seleccionadas 

Fijate en la linea Online Index Build debiese ser TRUE, si es false debes instalar por separado el producto o la version que tienes de oracle no soporta la funcionalidad (puede ser una versión standard, sin soporte de esta funcionalidad)

También puede dar en el caso que no se tenga permiso para ejecutar la funcionalidad, ya que si el usuario solo tiene privilegios de CONNECT no podrá realizar la tarea, por lo que se puede verificar el GRANT

GRANT ALTER ANY INDEX TO "USUARIO";

En donde «USUARIO» es el usuario que esta ejecutando la consulta, ahora si el usuario que estabas utilizando al darte este error era SYS o SYSTEM, entonces es necesariamente la primera causa.