martes, 21 de octubre de 2014

AGENT_BLOCKED: Agent is out-of-sync with repository. - How to unblock the agent?

Este error para por fallo de conexión entre el Cloud Control 12c y el host destino por algún inconveniente de red dejan de estar sincronizados y por ello aparece en la consola de administración como desconocido.

Problema

Realizamos todos los pasos que a primera vista fuesen suficientes para solventar el inconveniente que son:

1. Bajar el agente en el host destino

bash-4.2$ ./emctl stop agent
Oracle Enterprise Manager Cloud Control 12c Release 2
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
Agent is Not Running

2. Setiar nuevamente la contraseña del agente

bash-4.2$ ./emctl secure agent
Oracle Enterprise Manager Cloud Control 12c Release 2
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
Agent is already stopped...   Done.
Securing agent...   Started.
Enter Agent Registration Password :
EMD gensudoprops completed successfully
Securing agent...   Successful.

3. Verificar el estado actual del agente

bash-4.2$ ./emctl status agent
Oracle Enterprise Manager Cloud Control 12c Release 2
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
---------------------------------------------------------------
Agent is Not Running

4. Subir el agente en el host destino

bash-4.2$ ./emctl start agent
Oracle Enterprise Manager Cloud Control 12c Release 2
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
Starting agent ..................... started.
bash-4.2$ ./emctl status agent
Oracle Enterprise Manager Cloud Control 12c Release 2
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
---------------------------------------------------------------
Agent Version     : 12.1.0.2.0
OMS Version       : (unknown)
Protocol Version  : 12.1.0.1.0
Agent Home        : /u01/app/agent12c/agent_inst
Agent Binaries    : /u01/app/agent12c/core/12.1.0.2.0
Agent Process ID  : 33685686
Parent Process ID : 22020106
Agent URL         : https://Toachi.senplades.int:3872/emd/main/
Repository URL    : https://palmar.senplades.int:4901/empbs/upload
Started at        : 2014-10-21 12:30:45
Started by user   : usrsogr
Last Reload       : (none)
Last successful upload                       : (none)
Last attempted upload                        : 2014-10-21 12:30:59
Total Megabytes of XML files uploaded so far : 0
Number of XML files pending upload           : 808
Size of XML files pending upload(MB)         : 9.36
Available disk space on upload filesystem    : 21.96%
Collection Status                            : Collections enabled
Heartbeat Status                             : Agent is blocked
Last attempted heartbeat to OMS              : 2014-10-21 12:30:59
Last successful heartbeat to OMS             : (none)
Next scheduled heartbeat to OMS              : 2014-10-21 12:33:59

---------------------------------------------------------------
Agent is Running and Ready

5. Subir el agente al servidor Cloud Control

bash-4.2$ ./emctl upload agent
Oracle Enterprise Manager Cloud Control 12c Release 2
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
---------------------------------------------------------------
EMD upload error:full upload has failed: The agent is blocked by the OMS. Agent is out-of-sync with repository. This most likely means that the agent was reinstalled or recovered. Please contact an EM administrator to unblock the agent by performing an agent resync from the console. (AGENT_BLOCKED)


Al momento de realizar el upoload nos indica que el agente esta bloqueado en el Cloud Control.

Solución

A continuación se detalla los pasos para poder solventar este inconveniente.

Desbloquear agente desde el Cloud Control

1. Pantalla principal: Elegir agentes


 2. Seleccionar los desconocidos


3. Seleccionar el agente a reparar


4. Seleccionar Agent >>Resynchonization 



Nota: Se puede observar que un proceso esta en ejecución y puede tardar varios minutos, una vez finalizada la actividad automáticamente el Host ya es accesible.

miércoles, 15 de octubre de 2014

ERROR: Enterprise Manager - OC4J Configuration issue.

Causa:

Este error es causado por la IP del host donde esta configurado a sido cambiada o por que no puede resolver el nombre en el listener

[oracle@local ~]$ emctl start dbconsole
OC4J Configuration issue. /u01/app/oracle/product/11.2.0/dbhome_1/oc4j/j2ee/OC4J_DBConsole_refund.oracle.com_test not found.


Solución:

1. Editar el archivo hosts

Para editar este archivo por ser de sistema debe ser con usuario root
Nota: Previamente validar que IP se tiene actualmente con el comando ifconfig
[root@local~] vi /etc/hosts
127.0.0.1       localhost.localdomain   localhost
<Agregar la nueva>XXX.XXX.XXX.XXX     test.rfcg.ec  mcpebi

Nota: para salir del editor vi ingresamos las teclas :wq!

2. Cambiar el Listener.ora por la ip

[oracle@local~]$ vi $ORACLE_HOME/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = XXX.XXX.XXX.XXX)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle


3. Borrar y crear el repositorio del Enterprise Manager

[oracle@local~]$ $ORACLE_HOME/bin/emca -deconfig dbcontrol db -repos drop

EMCA iniciado en 15-oct-2014 13:55:31
Asistente de Configuración EM, Versión 11.2.0.3.0 Producción
Copyright (c) 2003, 2011, Oracle. Todos los Derechos Reservados.

Introduzca la siguiente información:
SID de Base de Datos: test
Número de Puerto del Listener: 1521
Contraseña de Usuario SYS: <Ingresar la clave de SYS>  
Contraseña de Usuario SYSMAN:  <Ingresar la clave de SYSMAN>

----------------------------------------------------------------------
ADVERTENCIA: Durante el borrado del repositorio, se cambiará el modo de la base de datos al modo desactivado.
----------------------------------------------------------------------
¿Desea continuar? [sí(Y)/no(N)]: y
15-oct-2014 13:55:49 oracle.sysman.emcp.EMConfig perform
INFO: Esta operación se está registrando en /u01/app/oracle/cfgtoollogs/emca/test/emca_2014_10_15_13_55_31.log.
15-oct-2014 13:55:49 oracle.sysman.emcp.util.GeneralUtil initSQLEngineLoacly
ADVERTENCIA: ORA-28000: the account is locked

15-oct-2014 13:55:49 oracle.sysman.emcp.ParamsManager checkListenerStatusForDBControl
ADVERTENCIA: Error al iniciar la conexión SQL. No se pueden realizar las operaciones SQL
15-oct-2014 13:55:49 oracle.sysman.emcp.util.DBControlUtil stopOMS
INFO: Parando Database Control. Puede tardar unos minutos...
15-oct-2014 13:56:10 oracle.sysman.emcp.util.GeneralUtil initSQLEngineLoacly
ADVERTENCIA: ORA-28000: the account is locked

15-oct-2014 13:56:10 oracle.sysman.emcp.EMReposConfig stopDBMSJobs
ADVERTENCIA: Error al iniciar la conexión SQL. No se pueden realizar las operaciones SQL
15-oct-2014 13:56:10 oracle.sysman.emcp.EMReposConfig invoke
ADVERTENCIA: No se han podido eliminar los trabajos DBMS.
15-oct-2014 13:56:10 oracle.sysman.emcp.EMReposConfig invoke
INFO: Borrando el repositorio de EM. Puede tardar unos minutos...
15-oct-2014 13:59:00 oracle.sysman.emcp.EMReposConfig invoke
INFO: El repositorio se ha borrado correctamente
La configuración de Enterprise Manager se ha realizado correctamente
EMCA terminado en 15-oct-2014 13:59:12


[oracle@local~]$ $ORACLE_HOME/bin/emca -config dbcontrol db -repos create

EMCA iniciado en 15-oct-2014 14:00:28
Asistente de Configuración EM, Versión 11.2.0.3.0 Producción
Copyright (c) 2003, 2011, Oracle. Todos los Derechos Reservados.

Introduzca la siguiente información:
SID de Base de Datos: test
Número de Puerto del Listener: 1521
ORACLE_HOME de Listener [ /u01/app/oracle/product/11.2.0/dbhome_1 ]: 
Contraseña de Usuario SYS:  <Ingresar la clave de SYS>
Contraseña de Usuario DBSNMP:  <Ingresar la clave de DBSNMO>
Contraseña de Usuario SYSMAN:  <Ingresar la clave de SYSMAN>
Dirección de Correo Electrónico para Notificaciones (opcional): 
Servidor de Correo Saliente (SMTP) para Notificaciones (opcional): 
-----------------------------------------------------------------

Ha especificado los siguientes valores

ORACLE_HOME de Base de Datos ................ /u01/app/oracle/product/11.2.0/dbhome_1

Nombre de Host Local ................ test.rfcg.ec
ORACLE_HOME de Listener ................ /u01/app/oracle/product/11.2.0/dbhome_1
Número de Puerto del Listener ................ 1521
SID de Base de Datos ................ test
Dirección de Correo Electrónico para Notificaciones ............... 
Servidor de Correo Saliente (SMTP) para Notificaciones ............... 

-----------------------------------------------------------------
¿Desea continuar? [sí(Y)/no(N)]: y
15-oct-2014 14:00:53 oracle.sysman.emcp.EMConfig perform
INFO: Esta operación se está registrando en /u01/app/oracle/cfgtoollogs/emca/mcpe/emca_2014_10_15_14_00_28.log.
15-oct-2014 14:00:53 oracle.sysman.emcp.EMReposConfig createRepository
INFO: Creando el repositorio de EM. Puede tardar unos minutos...
15-oct-2014 14:08:32 oracle.sysman.emcp.util.DBControlUtil secureDBConsole
INFO: Database Control se ha protegido correctamente.
15-oct-2014 14:08:32 oracle.sysman.emcp.util.DBControlUtil startOMS
INFO: Iniciando Database Control. Puede tardar unos minutos...
15-oct-2014 14:08:58 oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: Database Control se ha iniciado correctamente
15-oct-2014 14:08:58 oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: >>>>>>>>>>> La dirección URL de Database Control es https://test.rfcg.ec:1158/em <<<<<<<<<<<
15-oct-2014 14:09:00 oracle.sysman.emcp.EMDBPostConfig invoke
ADVERTENCIA: 
************************  WARNING  ************************

El repositorio de gestión se ha colocado en el modo seguro en el que se cifrarán los datos de Enterprise Manager. La clave de cifrado se ha colocado en el archivo: /u01/app/oracle/product/11.2.0/dbhome_1/mcpebi.rfcg.ec_mcpe/sysman/config/emkey.ora. Asegúrese de que se ha realizado una copia de seguridad de este archivo ya que los datos cifrados no se podrán utilizar si éste se pierde. 

***********************************************************
La configuración de Enterprise Manager se ha realizado correctamente
EMCA terminado en 15-oct-2014 14:09:00


Una vez finalizada la creación y configuración del Enterprise Manager ya podemos acceder a URL que nos indica https://test.rfcg.ec:1158/em o  https://IP:1158/em


viernes, 19 de septiembre de 2014

Activar Flash Recovery Area

Flash Recovery Area


Desde Oracle 10g R1 aparece un recurso destinado a guardar y organizar fácilmente todos los archivos que permiten la recuperación de la base de datos: Flash Recover Area (FRA). Almacena backups, copias de datafiles, controlfiles, archivelogs. 
Por que tener activada la FRA?
El manejo de archivos con FRA hace la tarea del DBA más eficiente, permite recuperarte de  una falla más rápidamente y realiza algunas funciones de limpieza automáticamente.
Como esta opción no viene activada por defecto, es necesario alterar  parámetros con ALTER SYSTEM para que entre en efecto. 
Nota: No necesitaremos reiniciar la base, a menos que no la tengamos en ARCHIVELOG mode. y es necesario que este en modo ARCHIVELOG para poder activar Flash Recover Area.

1) Colocar la base de datos en modo ARCHIVELOG (Si tu base ya esta en modo archivelog saltar al punto 2)

[oracle@localhost ~]$sqlplus / as sysdba
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP MOUNT;
SQL>ALTER DATABASE ARCHIVELOG;
SQL>ALTER DATABASE OPEN;

2) Crear un directorio destino para los archivos en el sistema operativo. En nuestro caso será: /fra
En caso de estar usando ASM , crearemos un grupo llamado  +FRA.

3) Configurar los siguientes parámetros con usuario sys:

SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 10G SCOPE=BOTH SID='PRUEBA';
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/disk1/fra' SCOPE=BOTH SID='PRUEBA';

El tamaño de la FRA se recomienda reservar 2 veces el tamaño actual de la base como mínimo.

jueves, 28 de agosto de 2014

MATAR PROCESOS Y SESIONES QUE ESTÁN COLGADAS EN LA BASE DE DATOS


El por que saber como encontrar procesos y sesiones resulta util cunado estos quedan colgados en los procesos de la base y otros usuarios desean hacer uso de objetos bloqueados por otras sesiones, Para poder liberar estos objetos de los procesos colgados es necesario matar las sesiones.

La problemática se produjo cuando al intentar borrar un usuario utilizando la sentencia :

DROP USER usuario1 CASCADE;

Y a continuación creamos el mismo usuario eliminado con la sentencia

CREATE USER usuario1 
IDENTIFIED BY password
DEFAULT TABLESPACE tbs_1
ACCOUNT UNLOCK;

Nos retorna errores ORA-00604 y  ORA-00054. 





Aparentemente el mensaje indica que otra sesión esta ocupando ese objeto por lo cual la transacción no puede realizarse.

SOLUCIÓN

Existen varios pasos para solventar esta acción, realizar en el orden que se encuentran a continuación es lo recomendable para no afectar a la base ni realizar acciones innecesarias.

Nos conectamos como sys / as sysdba a la intancia de base de datos por toad. Ir al utilitario buscador de sesiones e  identificar el usuario que esta ocupando el objeto. Damos clic derecho sobre el id sesión y poner matar sesión.

Esperamos unos minutos y Re-intentar ejecutando el script.

Si el problema persiste tenemos que realizar esta acción de forma manual ya que, aunque el toad indica que la sesión ya no esta activa existen procesos colgados en la base de datos que no permiten el desbloqueo efectivo del objeto. Para ello ejecutamos el siguiente query en un editor de SQL del Toad o directamente en SQLPlus* como sysdba.

SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, P.SPID, S.PROGRAM,S.USERNAME,
S.MACHINE,S.PORT , S.LOGON_TIME,SQ.SQL_FULLTEXT
FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S,
V$PROCESS P, V$SQL SQ
WHERE L.OBJECT_ID = O.OBJECT_ID
AND L.SESSION_ID = S.SID AND S.PADDR = P.ADDR
AND S.SQL_ADDRESS = SQ.ADDRESS;


Esta sentencia nos permite identificar el id de sesión y el número de serial de los procesos ejecutados, con esos dos valores, enviando como parámetro podemos ejecutar la sentencia ALTER para matar la sesión.desde Oracle.

ALTER SYSTEM KILL SESSION  '<id>, <serial#>';

Esperamos unos minutos y Re-intentar ejecutando el script.

Si el problema persiste y pude darse el caso que así sea, se debe matar el proceso de sistema operativo que esta ejecutando el bloqueo al objeto como root, para ello nos sirve el valor arrojado en la query anterior que es el SPID, con este valor podemos matar el proceso de sistema operativo utilizando el comando kill.

Nota: Dejar como ultima opción esta ya que, el matar el proceso de sistema operativo que no sea, puede afectar la integridad y consistencia de la base de datos.

[oracle@localhost ~]$ ps -ef|grep <spid>
root 11942 11928 0 11:57:57 pts/3 0:00 grep <spid>
[oracle@localhost ~]$ kill -9 <spid>

viernes, 8 de agosto de 2014

OPTIMIZA: BASH PARA BAJAR Y SUBIR UNA INSTANCIA DE BASE DE DATOS

Hola Amig@s,

Este post enseñare a crear un script para bajar y subir una instancia de base de datos Oracle de forma segura.

Datos Generales:

-Sistema Operativo : Linux (Funciona en cualquier ambiente Linux incluso AIX )
-Nombre de la Instancia de Base de Datos: PRUEBA

Paso 1:  Creemos un archivo profile para configurar las variables de ambiente de la instancia. Para ello nos conectamos con usuario Oracle a nuestro servidor y ejecutamos:

oracle@test ~]$ cd
[oracle@test ~]$ pwd
/home/oracle

Es para ubicamos en el Home del usuario Oracle a nivel de sistema operativo. Creamos el archivo .profilePrueba, el cual almacenara las configuraciones de variables para nuestra instancia.

[oracle@mcpebi ~]$ vim .profilePRUEBA

En este archivo vamos a agregar las siguientes lineas:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=PRUEBA
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib



Paso 2: Crear archivo bash para subir la instancia de base de datos.

[oracle@test ~]$ vim prueba_start.sh

En este archivo vamos a agregar las siguientes lineas:

#!/bin/bash
cd /home/oracle/
. ./.profileMCPE
sqlplus "/as sysdba" << EOF
startup;
exit;

Salimos del editor vim, y ya tenemos nuestro bash para subir la instancia de base de datos.

Paso 3: Crear archivo bash para bajar la instancia de base de datos.

oracle@test ~]$ vim prueba_stop.sh

En este archivo vamos a agregar las siguientes lineas:

#!/bin/bash
cd /home/oracle/
. ./.profileMCPE
sqlplus "/as sysdba" << EOF
shutdown immediate;
exit;

Salimos del editor vim, y ya tenemos nuestro bash para bajar de forma segura  la instancia de  base de datos.

Paso 4: Dar permisos a archivos como ejecutables.

Para este paso es necesario ser usuario root, ejecutamos el siguiente comando

[root@mcpebi test]# chmod 777 prueba_start.sh prueba_stop.sh

Para poder ejecutar el comando desde cualquier directorio que nos encontremos podemos copiar estos archivos en la carpeta /bin

[root@mcpebi oracle]# scp prueba_start.sh prueba_stop.sh  /bin/

Ya tenemos nuestros archivos para bajar y subir nuestra Instancia de base de datos de forma segura.

Archivos en Acción (Demo)
Archivo prueba_stop.sh

[oracle@test ~]$ prueba_stop.sh 
/bin/prueba_stop.sh: línea 6: aviso: el documento-aquí en la línea 4 está delimitado por fin-de-fichero (se esperaba `EOF')

SQL*Plus: Release 11.2.0.3.0 Production on Fri Aug 8 12:22:28 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> 
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@mcpebi ~]$

Archivo prueba_start.sh

[oracle@test ~]$ preuba_start.sh 
/bin/prueba_start.sh: línea 6: aviso: el documento-aquí en la línea 4 está delimitado por fin-de-fichero (se esperaba `EOF')

SQL*Plus: Release 11.2.0.3.0 Production on Fri Aug 8 12:24:22 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> ORACLE instance started.

Total System Global Area 6263357440 bytes
Fixed Size    2239976 bytes
Variable Size 2030043672 bytes
Database Buffers 4211081216 bytes
Redo Buffers   19992576 bytes
Database mounted.
Database opened.
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@test ~]$

miércoles, 6 de agosto de 2014

CONSULTA LA VERSIÓN DE PARCHES APLICADOS (PSU)

Hola Amig@s,

Se han preguntado si su base de datos tiene algún parche aplicado y desean saber en que versión esta, pues bien aqui les dejo el Query que les permitira saber cuando y que parche fue aplicado en su Base de Datos Oracle.

Para ello primero explicaremos que es un PSU (Patch Set Updates)

Patch Set Updates (PSU) son los mismos parches acumulativos que incluyen tanto los parches de seguridad y correcciones prioritarias. La clave con la PSU es que son actualizaciones menores de versión (por ejemplo, 11.2.0.1.1 a 11.2.0.1.2). Una vez que se aplica una fuente de alimentación, sólo las UPM se puede aplicar en los próximos trimestres hasta que la base de datos se actualiza a una nueva versión de la base.

La consulta para obtener la información de los parches aplicados seria:

SQL> set lines 255
SQL> col action_time for a40
SQL> col action for a8
SQL> col namespace for a7
SQL> col version for a11
SQL> col comments for a40
SQL>  select substr(ACTION_TIME,1,40) action_time,substr(ACTION,1,8) action,substr(NAMESPACE,1,7) namespace,
substr(VERSION,1,11) version,ID,substr(COMMENTS,1,40) comments,BUNDLE_SERIES
from registry$history; 



ACTION_TIME ACTION   NAMESPA VERSION      ID COMMENTS  BUNDLE_SERIES
---------------------------------------- -------- ------- ----------- ---------- ---------------------------------------- ------------------------------
17-SEP-11 10.21.11.595816 AM APPLY  SERVER  11.2.0.3       0 Patchset 11.2.0.2.0  PSU

10-APR-13 06.15.42.063248 AM APPLY  SERVER  11.2.0.3       0 Patchset 11.2.0.2.0  PSU


References: New Patch Nomenclature for Oracle Products [ID 1430923.1]

miércoles, 9 de julio de 2014

AUMENTAR PARÁMETRO DE LA SGA | ORACLE PERFORMANCE

AUMENTAR PARÁMETRO DE LA SGA

Hoy vamos a enseñar a aumentar el parámetro SGA de la base de datos Oracle, esto surgido por un problema al momento de generar un export.

[localhost@oracle ~]$ expdp full=y dumpfile=fulldb.dmp logfile=fulldb.log directory=EXPORT system/pasword

Export: Release 10.2.0.1.0 - Production on Tuesday, 16 December, 2008 17:07:44

Copyright (c) 2003, 2005, Oracle. All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
FLASHBACK automatically enabled to preserve database integrity.
Starting "SYSTEM"."SYS_EXPORT_FULL_02": full=y dumpfile=fulldb.dmp directory=d userid=system/********
Estimate in progress using BLOCKS method...
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
ORA-39125: Worker unexpected fatal error in KUPW$WORKER.GET_TABLE_DATA_OBJECTS while calling DBMS_METADATA.FETCH_XML_CLOB []
ORA-04031: unable to allocate 28 bytes of shared memory ("shared pool","SELECT /*+rule*/ SYS_XMLGEN(...","sql area","ub1[]: qkexrXformVal")

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPW$WORKER", line 6235

----- PL/SQL Call Stack -----
object line object
handle number name
64E077B4 14916 package body SYS.KUPW$WORKER
64E077B4 6300 package body SYS.KUPW$WORKER
64E077B4 9120 package body SYS.KUPW$WORKER
64E077B4 1880 package body SYS.KUPW$WORKER
64E077B4 6861 package body SYS.KUPW$WORKER
64E077B4 1262 package body SYS.KUPW$WORKER
64CB4398 2 anonymous block

Job "SYSTEM"."SYS_EXPORT_FULL_02" stopped due to fatal error at 17:08:03


La causa del error

El error ORA-04031, Oracle hace un barrido del espacio de memoria de objetos que ya no están en uso , si aun así no existe suficiente espacio disponible para satisfacer la solicitud devuelve este error.

Solución

la solución es aumentar el parámetro SGA.

Nota: Para esto deben tomar en cuenta que su base debe estar in-disponible ya que se debe reiniciar.

SQL> show parameter sga_t

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 772M

SQL> show parameter sga_max

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 800M

En la configuracón la SGA_TARGET de pende de la SGA_MAX_SIZE asi que debemos cambiar ambas para que tenga el efecto esperado.


SQL> alter system set sga_max_size=900M scope=spfile;

System altered.

SQL> alter system set sga_target=950M scope=spfile;

System altered.

SQL> startup force
ORACLE instance started.

Total System Global Area 314572800 bytes
Fixed Size 1248768 bytes
Variable Size 96469504 bytes
Database Buffers 209715200 bytes
Redo Buffers 7139328 bytes
Database mounted.
Database opened.

SQL> show parameter sga_target

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 900M


Ahora Oracle ya tienen la memoria necesaria para ejecutar el export.

viernes, 30 de mayo de 2014

Creación de directorios en Oracle

Amog@s,

En este post se enseñara a crear un directorio para realizar los export e import en diferentes rutas de la predefinida por Oracle

Comencemos.

Hoy en día  los export  no se guardan en el mismo servidor, y si lo tienen es mejor ponerse como meta sacarlos, ya que por daño de servidor físico o fallo de disco podría perder su información y para una empresa cualesquiera que sea el costo es elevado.

Indicando esto comencemos

Oracle en su configuración crea una ruta por defecto y la registra con el nombre de DATA_PUMP_DIR  la ruta es:

OWNER                  DIRECTORY_NAME              DIRECTORY_PATH
------------------------------ ------------------------------ ------------------------------
SYS                            DATA_PUMP_DIR           $ORACLE_BASE/admin/SID/dpdump/


Vamos a crear  un directorio siguiendo los siguientes pasos:

1. Nos conectarnos a SQLPlus*  como sysdba

[oracle@local ~]$ cd
[oracle@local ~]$ . ./.bash_profile 
[oracle@local ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Fri May 30 11:40:43 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

2. Verificamos los directorios existentes

SQL> select * from dba_directories;

OWNER DIRECTORY_NAME          DIRECTORY_PATH
---------  ------------------------   -----------------------------
SYS       IMPORT1                                              /u01/import/
SYS       IMPORTAR                                           /u01/app/oracle/admin/sid_prod
SYS       EXP_DIR                                               /home/oracle
SYS       XMLDIR                                                /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/xml
SYS       IMPORT                                                /u01/import
SYS       DATA_PUMP_DIR                               /u01/app/oracle/admin/sid_prod/dpdump/
SYS       ORACLE_OCM_CONFIG_DIR          /u01/app/oracle/product/11.2.0/dbhome_1/ccr/state

7 rows selected.

3. Sentencia para crear un directorio

Formato:

CREATE DIRECTORY <  Nombre del directorio > AS < Ruta del directorio> ;

Ejemplo:

SQL> CREATE DIRECTORY RESPALDOS_EXP AS '/bck_prod';     

Directory created.

Nota: la carpeta /bck_prod es un punto de montaje fuera del servidor

4. Permisos de lectura y escritura sobre el directorio para realizar import y export

SQL> GRANT READ,WRITE ON DIRECTORY RESPALDOS_EXP TO IMP_FULL_DATABASE;

Grant succeeded.

SQL> GRANT READ,WRITE ON DIRECTORY RESPALDOS_EXP TO EXP_FULL_DATABASE;

Grant succeeded.


Esto es todo una vez creado esto ya pueden lanzar la sentencia de export o import apuntando al directorio RESPALDOS_EXP.

Ejemplo: 
[oracle@local ~]$ expdp directory:RESPALDOS_EXP dumpfile:exp_diag.dmp logfile:imp_diag.log schemas:diag exclude:statistics;

viernes, 23 de mayo de 2014

jueves, 22 de mayo de 2014

Vista Materializada (VM) Oracle


FORMATO

CREATE MATERIALIZED VIEW mi_vista_materializada
 [TABLESPACE mi_tablespace]
 [BUILD {IMMEDIATE | DEFERRED}]
 [REFRESH {ON COMMIT | ON DEMAND | [START WITH fecha_inicio] NEXT fecha_intervalo } |
          {COMPLETE | FAST | FORCE} ]
 [{ENABLE|DISABLE} QUERY REWRITE] AS
     SELECT t1.campo1, t2.campo2
     FROM mi_tabla1 t1 , mi_tabla2 t2
     WHERE t1.campo_fk = t2.campo_pk AND …

OPCIONES DE SENTENCIA

Carga de datos en la vista

BUILD IMMEDIATE: Los datos de la vista se cargan en el mismo momento de la creación
BUILD DEFERRED: Sólo se crea la definición, los datos se cargarán más adelante.

Para realizar esta carga se puede utilizar la función REFRESH del package DBMS_MVIEW:

      begin
         dbms_mview.refresh('mi_vista_materializada');
      end;

Cada cuánto tiempo se refrescarán:

REFRESH ON COMMIT: Cada vez que se haga un commit en los objetos origin definidos en la select

REFRESH ON DEMAND: Como con la opción DEFERRED del BUILD, se utilizarán los procedures
REFRESH, REFRESH_ALL_MVIEWS o REFRESH_DEPENDENT del package DBMS_MVIEW
REFRESH [START WITH fecha_inicio] NEXT fecha_intervalo:

          START WITH: indica la fecha del primer refresco (fecha_inicio suele ser un SYSDATE)

          NEXT: indica cada cuánto tiempo se actualizará (fecha_intervalo podría ser SYSDATE +1 para       realizar el refresco una vez al día)

De qué manera se refrescarán

REFRESH COMPLETE:

El refresco se hará de todos los datos de la vista materializada, la recreará completamente cada vez que se lance el refresco.
Utiliza todo el recurso necesario para completar la actualización en la hora indicada.

REFRESH FAST:

El refresco será incremental, es la opción más recomendable.
Este tipo de refresco tiene bastantes restricciones según el tipo de vista que se esté creando.
Se realiza ocupando el mínimo de recurso de memoria para completar la actualización. Terminara dependiendo del número de registros a actualizar como también la memoria que tiene disponible

Una de las cosas importantes a tener en cuenta es que para poder utilizar este método casi siempre es necesario haber creado antes un LOG de la Vista materializada, indicando los campos clave en los que se basará el mantenimiento de la vista.

Se utiliza la instrucción  "CREATE MATERIALIZED VIEW LOG ON":
 
CREATE MATERIALIZED VIEW LOG ON mi_tabla_origen    
   WITH PRIMARY KEY    
   INCLUDING NEW VALUES;
REFRESH FORCE:

Con esta opción se indica que si es posible se utilice el metodo FAST, y si no el COMPLETE.

Para saber si una vista materializada puede utilizar el método FAST, el package DBMS_MVIEW proporciona el procedure EXPLAIN_MVIEW

Activación de la reescritura de consultas para optimizar el Data warehouse

ENABLE QUERY REWRITE: Se permite a la base de datos la reescritura de consultas
DISABLE QUERY REWRITE: Se desactiva la reescritura de consultas

QUERY REWRITE es la que más vamos a utilizar si queremos las vistas materializadas para optimizar nuestro Data warehouse.

Esta opción permite crear tablas agregadas en forma de vistas materializadas, y que cuando se lance una SELECT la base de datos pueda reescribirla para consultar la tabla o vista que vaya a devolver los datos solicitados en menos tiempo, todo de manera totalmente transparente al usuario.

Lo único que hay que hacer es crear las tablas agregadas como vistas materializadas con QUERY REWRITE habilitado.

miércoles, 21 de mayo de 2014

LINUX: Pasos para bajar una base de datos ORACLE en forma segura

Cuando se generen inconvenientes en su empresa y por A o B razón deben bajar las bases de datos, la forma segura de realizar esto es siguiendo los siguientes pasos:

1.-Ingresar al servidor 

ssh o por telnet para ingresar al SQLPlus* ya sea por putty , SSH-Security o cualquier herramienta que maneje su negocio para administrar servidores

2.-Cargar las variables de ambiente

Nota:Este paso es necesario cuando el ambiente de oracle no se encuentra cargado en la sesión actual de sistema operativo

[oracle@docec admin]$ cd
[oracle@docec ~]$ . ./.bash_profile
[oracle@docec ~]$ . oraenv
ORACLE_SID = [nueva] ? nueva
ORACLE_HOME = [/home/oracle] ? /u01/app/oracle/product/11.2.0/dbhome_1
The Oracle base remains unchanged with value /u01/app/oracle

3.-Detener el listener

Esta acción permite que usuarios nuevos no puedan conectarse

[oracle@docec ~]$ lsnrctl stop

LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 21-MAY-2014 14:24:08
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)))
The command completed successfully

4.-Apagar la base de forma segura

[oracle@docec ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Wed May 21 14:25:16 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> shutdown immediate;

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> exit

5.- Apagar el sistema operativo

[oracle@docec ~]$ poweroff

Nota: Realizar los pasos 2 y 4 por cada Instancia (SID) que se tenga en el servidor

Conexión de Base de datos DBLink

DATABASE LINK




Para que sirve un DBLink?

Un conexión de base de datos externa o simplemente DBLink, sirve para conectarte con otra base de datos y así poder extraer información de esa base.

Creación del DBLink

Para crear un dblink se deben tomar en cuenta los siguientes puntos


- Agregar la entrada de conexión en el tnsname.ora

[host@local ~]$ vim $ORACLE_HOME/networck/admin/tnsname.ora

Descripción de la nueva entrada:

NUEVA_ENTRADA =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = nueva_entrada.rfcg.com)
    )
  )

Nota: Para validar que todo se encuentre funcionando, realizamos una prueba ejecutando

 [host@local ~]$ tnsping NUEVA_ENTRADA

TNS Ping Utility for Linux: Version 12.1.0.1.0 - Production on 21-MAY-2014 12:09:23

Copyright (c) 1997, 2013, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = nuva.rfcg.com)))
OK (10 msec)


-En SQLPlus*, Toad , SqlDeveloper o cualquier ambiente que se tenga para poder ejecutar el scrip ejecutamos.

Formato:

CREATE [PUBLIC] DATABASE LINK <NOMBRE DEL DBLINK>
CONNECT TO <NOMBRE DEL USUARIO>
IDENTIFIED BY <CLAVE DEL USUARIO>
USING <NOMBRE DE LA ENTRADA EN EL TNSNAME>

Ejemplo:

SQL> CREATE PUBLIC DATABASE LINK "DBL_CONEXION_PROD.RGCG.COM"
CONNECT TO JFABRE
IDENTIFIED PassWOrD
USING 'NUVA_ENTRADA';









martes, 20 de mayo de 2014

Añadir un Datafile en 11g

AÑADIR DATAFILE

VERSION 11G


La creación de  datafile's para un DBA es muy común. y mas común aun es, no tener ambiente gráfico para crearlo por lo que en este blog se enseña  como crear un datafile por sqlplus*


Como saber cuando es necesario el incremento de un datafile, es cuando:

- El o los datafiles que componen el tablespace no se pueden extender más porque hemos llegado a la máxima capacidad del disco donde este ubicado
- Hemos llegado el máximo permitido por Oracle.

La recomendación para ampliar el datafile automáticamente va de la mano con la  transacción que posee su base de datos, si es una base que no posee mucha transacción con 10MB esta bien.

Se recomienda ampliar y crear un nuevo datafile si todos los que posee el tablespace estan al 100% y el ultimo esta a un 90%

Problema: Tenemos el tabelspace DATA de la base de datos TEST que esta por encima del 90% de ocupación y necesitamos ampliarlo, desde sqlplus*

 1.-Revisión de los datafile llenos.

SQL>SELECT FILE_NAME, BYTES FROM DBA_DATA_FILES WHERE TABLESPACE_NAME ='DATA';


FILE_NAME                                                                     Tamaño en MB
--------------------------------------------------------------                     -----------------
/u02/oradata/TEST/dat/TEST_DATA_01.dbf               32768
/u02/oradata/TEST/dat/TEST_DATA_02.dbf               32768

El tablespace DATA tiene ya 2 datafiles de 32GB que no podemos extender por loque vamos a añadirle un tercer datafile, vamos a añadir el datafile TEST_DATA_03.dbf de 5GB, nos aseguramos que tenemos el espacio libre el filesytem y realizamos la siguiente operación en sqlplus:

2.- Agregar datafile al tablesapce

SQL> ALTER TABLESPACE DATA ADD DATAFILE '/u02/oradata/TEST/dat/TEST_DATA_03.dbf’ SIZE 5120M;

3.- Revisión del datafile nuevo.

SQL>SELECT FILE_NAME, BYTES FROM DBA_DATA_FILES WHERE TABLESPACE_NAME  ='DATA';


FILE_NAME                                                                     Tamaño en MB
--------------------------------------------------------------                     -----------------
/u02/oradata/TEST/dat/TEST_DATA_01.dbf               32768
/u02/oradata/TEST/dat/TEST_DATA_02.dbf               32768
/u02/oradata/TEST/dat/TEST_DATA_03.dbf                 5120

Se puede? - export y import 10g a 11g

Hoy tuve la oportunidad de realizar  un ambiente de pruebas,  fue pasar un export de 10g a un servidor donde se tiene instalado 11g.

Nota: Se deben realizar las debidas pruebas en el servidor de 11g ya que paquetes propios de Oracle cambiaron sus nombres en esta versión así como también algunas funcionalidades.

 Esto si es posible siguiendo los siguientes pasos

1: Crea los  tablespaces, usuarios, roles y  perfiles en la base  11g.
2: Export full del SID la base en 10g utilizando el parámetro versión=10.<Release>
3: Copiar los archivos dumpfile del servidor con 10g al de 11g en la ruta por defecto DATA_PUMP_DIR o cualquier otra ruta.

         Nota: Si se envía a otra ruta se debe crear el directorio. Aquí explicamos como : http://oracle-             facil.blogspot.com/2014/05/creacion-de-directorios-oracle.html
4: Ejecutar el comando Import full en la base 11g.


<<Relato de un DBA>>

viernes, 16 de mayo de 2014

Consultas de Administración (DBA Query's) Oracle 11g

CONSULTAS DBA

VERSIÓN 11g




1. Introducción
2. Consultas SQL



1. Introducción

En estos días eh  tenido muchas experiencias como dba sin un entorno gráfico solo sqlplus*  y eh realizado un pequeño diccionario de query's que permiten la rápida administración de una base de datos, cada uno de estos pueden ser optimizado a las necesidades requeridas.

2. Consultas SQL


Nota: Para poder visualizar correctamente se puede dar formato a las columnas de salida en el sqlplus* con

SQL> SET LINESIZE 200

SQL> SET PAGESIZE 200



  • Instancia: Instancia a la que se esta conectado.

SQL> select host_name,instance_name,status from v$instance;

HOST_NAME INSTANCE_NAME  STATUS
----------------------------------------------------------------
rfcg1.oracle.com prod  OPEN

  • Directorios registrados:  Directorios registrados en la base de datos
SQL> select * from dba_directories;

OWNER       DIRECTORY_NAME                    DIRECTORY_PATH
------------------------------ ------------------------------  ----------------------       
SYS ORACLE_OCM_CONFIG_DIR      /u01/app/oracle/product/11.2.0/dbhome_1/ccr/state
SYS       DATA_PUMP_DIR      /u01/app/oracle/admin/prod/dpdump/
SYS       XMLDIR               /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/xml 


  • Registro de usuarios: Listado de usuarios que se conectaron con su numero de veces por día

SQL > SELECT USERNAME,LOGON_TIME,COUNT(*) AS NUMERO 
 FROM V$SESSION 
 WHERE USERNAME IS NOT NULL
--AND LOGON_TIME=SYSDATE
 GROUP BY LOGON_TIME,USERNAME 
 ORDER BY 3 DESC;


USERNAME        LOGON_TIM     NUMERO
------------------------------ --------- ----------
SYSMAN        30-APR-14   3
SYSMAN        01-MAY-14   1
DBSNMP        29-APR-14   1
DBSNMP        29-APR-14   1
SYS                07-MAY-14   1
SYSMAN        30-APR-14   1
SYSMAN        30-APR-14   1
SYSMAN        07-MAY-14   1
DBSNMP        29-APR-14   1



  • Tablespace: 
- Espacio disponible en tablespace

SQL> SELECT TABLESPACE_NAME, ROUND(SUM(BYTES)/1024/1024,0) as "MB free" FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;

TABLESPACE_NAME  MB free
------------------------------ ----------
SYSAUX       32
UNDOTBS1       22
USERS 3
SYSTEM 3

- Espacio total de tablespace

SQL> SELECT TABLESPACE_NAME, ROUND(SUM(BYTES)/1024/1024,0) as "MB free" FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME;

TABLESPACE_NAME  MB free
------------------------------ ----------
UNDOTBS1       30
SYSAUX      530
USERS 5
SYSTEM      700

  • Datafile
SQL> SELECT FILE_NAME,BYTES/1024/1024  AS MB FROM DBA_DATA_FILES;

FILE_NAME                                                             MB  
-----------------------------                                     ----------
/u01/app/oracle/oradata/prod/users01.dbf                  5
/u01/app/oracle/oradata/prod/undotbs01.dbf             30
/u01/app/oracle/oradata/prod/sysaux01.dbf              530
/u01/app/oracle/oradata/prod/system01.dbf              700
  • Modo de la base de datos: Identificar si la base esta corriendo sobre archivelog o noarchivelog
SQL> SELECT NAME,LOG_MODE FROM V$DATABASE;

NAME  LOG_MODE
--------- ------------
PROD  ARCHIVELOG

  • Auditoria: Identificar si la base esta activada la auditoria
SQL> SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME LIKE 'audit_trail';

NAME                          VALUE
----------------------    ----------------------------
audit_trail                       DB
  • Controlfile: Identificar la ruta donde se encuentran nuestros controlfile
SQL> show parameter control_files;

NAME       TYPE          VALUE
----------------    -----------    ------------------
control_files         string            /u01/app/oracle/oradata/prod/control01.ctl, 
                                               /u01/app/oracle/fast_recovery_area/prod/control02.ctl

  • Fast recovery Area (FRA): Tamaño de la FRA
SQL>SHOW PARAMETER DB_RECOVERY_FILE_DEST_SIZE;

NAME        TYPE            VALUE
----------------------------    -----------      ----------------------
db_recovery_file_dest_size big integer     4122M
  • Tamaño actual de la base de datos
SQL> SELECT SUM(BYTES)/1024/1024 MB FROM DBA_SEGMENTS;

MB
----------
    1201.5
  • Esquemas creados
SQL> SELECT USERNAME FROM DBA_USERS;

USERNAME
------------------------------
SYS
SYSTEM
DBVISIT7
OUTLN
MGMT_VIEW
FLOWS_FILES
MDSYS
ORDSYS
EXFSYS
DBSNMP
WMSYS
APPQOSSYS
APEX_030200
OWBSYS_AUDIT
ORDDATA
CTXSYS
ANONYMOUS
SYSMAN
XDB
ORDPLUGINS
OWBSYS
SI_INFORMTN_SCHEMA
OLAPSYS
SCOTT
ORACLE_OCM
XS$NULL
MDDATA
DIP
APEX_PUBLIC_USER
SPATIAL_CSW_ADMIN_USR
SPATIAL_WFS_ADMIN_USR
  • Tablas con propietario especifico

SQL> SELECT OWNER,OBJECT_NAME FROM DBA_OBJECTS WHERE ROWNUM < 11;

OWNER                                             OBJECT_NAME
------------------------------      --------------------------------------------------
SYS                                          ICOL$
SYS                                          I_USER1
SYS                                          CON$
SYS                                          UNDO$
SYS                                          C_COBJ#
SYS                                          I_OBJ#
SYS                                          PROXY_ROLE_DATA$
SYS                                          I_IND1
SYS                                          I_CDEF2
SYS                                          I_OBJ5