ORACLE: Compile all invalid objects

Para compilar los objetos inválidos del usuario de BD actual podemos ejecutar el siguiente script:

1
2
3
4
5
6
7
8
SELECT 'ALTER '
  ||decode(object_type,'PACKAGE BODY','PACKAGE',object_type)
  ||' '
  ||object_name
  ||decode(object_type,'PACKAGE BODY', ' COMPILE BODY;',' COMPILE;')
   FROM user_objects
  WHERE STATUS   = 'INVALID'
AND object_type IN ('PACKAGE','PACKAGE BODY','FUNCTION','PROCEDURE');

Esto nos generará una serie de alters para poder recompilar los objetos inválidos.

Oracle: Script para hacer un drop de all user objects

Un ejemplo de script para hacer un drop de todos los objetos del usuario seria el siguiente:

1
2
3
4
5
6
7
8
9
SELECT 'drop sequence ' || sequence_name || ';' FROM user_sequences
UNION
SELECT 'drop trigger ' || trigger_name || ';' FROM user_triggers
UNION
SELECT 'drop view ' || view_name || ';' FROM user_views
UNION
SELECT 'drop index ' || index_name || ';' FROM user_indexes
UNION
SELECT 'drop table ' || table_name || ';' FROM user_tables;

De momento solamente hace drops de triggers, vistas, índices y tablas pero se puede añadir unions para generar el drop de lo que queramos.

Una vez ejecutada la consulta, copiar el resultado en una hoja de SQL y ejecutarla. Es posible que nos den errores por dependencias y no se borren todos los objetos, en ese caso lo que hago es ejecutar el script varias veces hasta que se borren todos los objetos (se debería hacer una nueva versión que calcule las dependencias pero eso ya seria demasiado tiempo…)

Averiguar con que versión de BD Oracle estamos trabajando

Para descubrir la versión de Base de Datos Oracle con la que estamos trabajando podemos ejecutar la siguiente sentencia SQL:

SELECT * FROM SYS.V_$VERSION;

Modificar un tablespace para que sea AUTOEXTEND

ALTER database datafile
'/oracle/oradata/tablespace.dbf'
autoextend ON;

Oracle: Crear un nuevo esquema de BD

Para crear un esquema de BD primero tendremos que crear un tablespace asociado y posteriormente crear el usuario. Aquí tenemos un ejemplo, suponiendo que queremos crear el usuario xx_schema con password xx_schema:

sqlplus /nolog
sql> CONNECT / AS sysdba
sql> CREATE tablespace xx_schema datafile '/oracle/oradata/xx_schema.dbf' size 500 M AUTOEXTEND ON MAXSIZE 1800M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
sql> CREATE USER xx_schema identified BY XX_SCHEMA DEFAULT tablespace xx_schema;
sql> Grant CONNECT,Resource TO xx_schema;

Iniciar el entorno en UNIX desde OnDemand

Hay un fichero que contiene todas la inicialización de todas las variables. Se puede encontrar en $ORACLE_HOME ([instancia]/product/[version])

si hacemos un:

ls *env*

veremos el listado de ficheros de incialización de entorno. Para ejecutarlos (supongamos un fichero llamado entorno.env):

. ./entorno.env

Una vez cargado el entorno podríamos entrar en el sqlplus, por ejemplo.

NOHUP: Comando para realizar una ejecución independiente de la sesión

En unix tenemos la posibilidad de usar el comando unix nohup que nos permite ejecutar en background un proceso. Esto quiere decir que si por cualquier motivo nuestra sesión se cerrase el proceso seguiría ejecución dejando un log informando del resultado de dicha ejecución.

Ejemplo:
 
nohup sqlplus SCHEMA/PASS @inserts.SQL 

Como hacer un export/import de un esquema de BD

Comando para EXPORT:

EXP userid=schema/password owner=schema file=file.dmp direct=Y rows=Y LOG= file.LOG

Comando para IMPORT:

imp userid=system/manager FROMUSER=schema TOUSER= file= file.dmp LOG=file.LOG

Como cambiar el password de un esquema de BD desde un usuario privilegiado

Con la siguiente instrucción ejecutada desde un esquema que tenga los privilegios adecuados sobre el esquema destino, podemos cambiar el password de un esquema que pasará a identificarse como: esquema/esquema:

 ALTER USER esquema IDENTIFIED BY esquema

Como averiguar el password del esquema APPS de Applications con pbrun

pbrun impdba password-manager instancia