sábado, 15 de diciembre de 2012

ORA-00845: MEMORY_TARGET not supported on this system

En la WEB de Oracle se puede descargar una imagen completa del sistema operativo Linux con software de Oracle pre-instalado para ser usada con Virtual Box. El problema de esta máquina virtual es que funciona con lentitud, debido a su baja asignación de memoria en la configuración de dicha máquina.

He decido cambiarle la cantidad de memoria disponible a 3GB. Después he iniciado la MV y he cambiado el parámetro estático MEMORY_MAX_TARGET. A continuación el tamaño actual:

SQL> show parameter mem;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
memory_max_target                    big integer 436M
memory_target                        big integer 436M
shared_memory_address                integer     0
Realizo el cambio y paro la base de datos (BD):
SQL>alter system set memory_max_target=2G scope=spfile;

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
Reinicio y se produce un error, no se puede arrancar la BD:
SQL> startup;
ORA-00845: MEMORY_TARGET not supported on this system
En esta situación no puedo iniciar la BD, ni siquiera ponerla en NOMOUNT ya que existe algún error en el archivo de parámetros spfile.

Se puede optar por dejar el spfile como estaba o bien solucionar el error.
Para recuperar el spfile podemos tirar de copia de seguridad o bien editarlo con el objetivo de dejar el valor modificado como se encontraba originalmente.
Para este último caso podemos genera un archivo de texto a partir del spfile (que es binario) usando el siguiente comando:

SQL> create pfile='/home/oracle/app/oracle/product/11.2.0/dbhome_2/dbs/sptxt.ora' from spfile;
Ahora podemos usar vi para editar el archivo y dejar el valor correcto en MEMORY_MAX_TARGET. Seguidamente podemos volver a crear el archivo spfileorcl.ora a partir del nuestro.

SQL> create spfile='/home/oracle/app/oracle/product/11.2.0/dbhome_2/dbs/spfileorcl.ora' from pfile='/home/oracle/app/oracle/product/11.2.0/dbhome_2/dbs/sptxt.ora';

Iniciamos de nuevo la BD sin ningún problema:

SQL> startup;
ORACLE instance started.

Total System Global Area  456146944 bytes
Fixed Size                  1344840 bytes
Variable Size             369101496 bytes
Database Buffers           79691776 bytes
Redo Buffers                6008832 bytes
Database mounted.
Database opened.
Lo correcto sería solucionar el error ya que nos interesa disponer de más memoria para el uso de Oracle.
El error ORA_00845 MEMORY_TARGET NOT SUPPORTED ON THIS SYSTEM, se genera cuando el tamaño de MEMORY_MAX_TARGET es mayor que el configurado en /dev/shm (memoria de intercambio requerida por Oracle).

Para conocer el tamaño de shm:

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1              11G  2.3G  7.3G  24% /
/dev/hdb1              12G  7.0G  4.2G  63% /home
tmpfs                 1.8G     0  1.8G   0% /dev/shm
/dev/hdc               53M   53M     0 100% /media/VBOXADDITIONS_4.2.4_81684

Para modificar el valor de forma permanente hay que editar como root el archivo fstab e indicar un valor igual o superior a MEMORY_MAX_TARGET:
# vi /etc/fstab
....
tmpfs         /dev/shm       tmpfs   defaults,size=2G        0 0
....
Una vez editado hay que montar de nuevo shm:
# mount -o remount /dev/shm
Ahora, ya podemos iniciar la BD con un tope de memoria de 2G, también indicamos el uso de MEMORY_TARGET a 1G:

SQL> startup nomount;
ORACLE instance started.

Total System Global Area 2042241024 bytes
Fixed Size                  1345204 bytes
Variable Size            1929382220 bytes
Database Buffers          100663296 bytes
Redo Buffers               10850304 bytes
SQL> show parameters mem;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
memory_max_target                    big integer 2G
memory_target                        big integer 448M
shared_memory_address                integer     0

SQL> alter system set memory_target=1G scope=both;

SQL> show parameter mem;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
memory_max_target                    big integer 2G
memory_target                        big integer 1G
shared_memory_address                integer     0

Espero que os sirva y podéis consultar las siguientes fuentes:
http://asktom.oracle.com
http://www.orasite.com
http://www.cyberciti.biz



miércoles, 5 de diciembre de 2012

java.lang.Exception: UnknownHostException sending request

Cuando se cambia el nombre del Host de un equipo que soporta un SGBDR Oracle, al acceder como SYS al Enterprise Manager Database Control se muestra un error de Java:

java.lang.Exception: UnknownHostException sending request::nombrehost

Esto es debido a que el nombre de Host se almacena en archivos de configuración y repositorio del EM Control. Para ello debemos realizar unos pasos como son:
  1. Eliminar los archivos de configuración existentes.
  2. Eliminar los objetos del repositorio existentes.
  3. Crear de nuevo los archivos de configuración y objetos del repositorio

Todos estos pasos se pueden realizar en uno sólo y para ello utilizaremos el Enterprise Manager Configuration Assistant (EMCA) una herramienta de consola. (http://docs.oracle.com/cd/B28359_01/server.111/b28319/emca.htm)

Por ejemplo para la versión 10gR2 desde la línea de comandos ejecutaremos:

C:\> emca -config dbcontrol db -repos recreate

Este comando nos preguntará si realmente deseamos realizar el proceso, si seguimos a delante le deberemos indicar el nombre del SID de la BBDD y el puerto del Listener. Con ello, y después de una confirmación final se realizará el proceso de eliminación y configuración de los elementos necesarios para el Enterprise Manager.

A continuación se muestra el proceso de cambio:

EMCA iniciado en 05-dic-2012 11:12:50
Asistente de Configuraci¾n de EM, Versi¾n 10.2.0.1.0 Producci¾n
Copyright (c) 2003, 2005, Oracle. Todos los Derechos Reservados.
Introduzca la siguiente informaci¾n:
SID de Base de Datos: orcl
Database Control ya estß configurado para la base de datos orcl
Ha seleccionado configurar Database Control para gestionar la base de datos orcl
Se eliminarß la configuraci¾n existente y los valores por defecto y se realizarß
 una configuraci¾n nueva
┐Desea continuar? [sÝ(Y)/no(N)]: y
N·mero de Puerto del Listener: 1521
Contrase±a de Usuario SYS:
Contrase±a de Usuario DBSNMP:
Contrase±a de Usuario SYSMAN:
Contrase±a de Usuario SYSMAN: Direcci¾n de Correo Electr¾nico para Notificacione
s (opcional):
Servidor de Correo Saliente (SMTP) para Notificaciones (opcional):
-----------------------------------------------------------------
Ha especificado los siguientes valores
ORACLE_HOME de Base de Datos ................ C:\oracle\product\10.2.0\db_1
Nombre del host de la base de datos ................ edi00041.octaedin.local
N·mero de Puerto del Listener ................ 1521
SID de Base de Datos ................ orcl
Direcci¾n de Correo Electr¾nico para Notificaciones ...............
Servidor de Correo Saliente (SMTP) para Notificaciones ...............
-----------------------------------------------------------------
┐Desea continuar? [sÝ(Y)/no(N)]: y
05-dic-2012 11:13:56 oracle.sysman.emcp.EMConfig perform
INFO: Esta operaci¾n se estß registrando en C:\oracle\product\10.2.0\db_1\cfgtoo
llogs\emca\orcl\emca_2012-12-05_11-12-50-AM.log.
05-dic-2012 11:13:58 oracle.sysman.emcp.util.DBControlUtil stopOMS
INFO: Parando Database Control. Puede tardar unos minutos...
05-dic-2012 11:14:48 oracle.sysman.emcp.EMReposConfig dropRepository
INFO: Borrando el repositorio de EM. Puede tardar unos minutos...
05-dic-2012 11:16:10 oracle.sysman.emcp.EMReposConfig invoke
INFO: El repositorio se ha borrado correctamente
05-dic-2012 11:16:10 oracle.sysman.emcp.EMReposConfig createRepository
INFO: Creando el repositorio de EM. Puede tardar unos minutos...
05-dic-2012 11:19:35 oracle.sysman.emcp.EMReposConfig invoke
INFO: El repositorio se ha creado correctamente
05-dic-2012 11:19:46 oracle.sysman.emcp.util.DBControlUtil startOMS
INFO: Iniciando Database Control. Puede tardar unos minutos...
05-dic-2012 11:20:26 oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: Database Control se ha iniciado correctamente
05-dic-2012 11:20:26 oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: >>>>>>>>>>> La URL de Database Control es http://edi00041.octaedin.local:1
158/em <<<<<<<<<<<
La configuraci¾n de Enterprise Manager se ha realizado correctamente
EMCA terminado en 05-dic-2012 11:20:26

miércoles, 14 de noviembre de 2012

Yum con privilegios de root


En Fedora al ejecutar el comando:

sudo yum install java-1.0.6-opendjdk-devel                            

Nota: Sería más correcto usar
su -c "yum install java-1.0.6-opendjdk-devel"                         

pude obtenerse el siguiente mensaje de error:

"username is not in sudoers file. The incident will be reported."

El problema puede ser debido a :
  • No se ha introducido correctamente la contraseña del usuario.
    • La solución, entrar correctamente la contraseña.
  • Durante el proceso de instalación de Fedora, no se ha añadido el usuario al grupo de administradores.
    • La solución, añadirlo al grupo. En una ventana del Shell, iniciaremos sesión como root y añadiremos el usuario al grupo wheel
su -                                                                              
gpasswd -a nombreldelusuario wheel                            


miércoles, 3 de octubre de 2012

Pentaho SPOON: JDBC error al conectar con Oracle

Con la versión 4.3.0 del Spoon-Kettle de Pentaho, al crear una nueva conexión de base de datos y después de introducir los parámetros oportunos, se puede producir un error en la conexión de la base de datos. Uno de los posibles errores puede ser causado por intenta usar un driver JDBC que no está instalado.


Exception while loading class
oracle.jdbc.driver.OracleDriver

La solución es fácil, sólo se requiere instalar los drivers correspondientes, para ello podemos seguir los siguientes pasos:

  • Determinaremos con el siguiente código la versión de Oracle. Para ello podemos utilizar cualquier herramienta que tenga acceso a Oracle (SQL*PLus, SQL Developer, Toad, etc.).
SELECT banner
  FROM v$version
 WHERE lower(banner) like '%oracle%';
La salida anterior podría mostrar un resultado parecido a este:
"Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production"
  • Ahora debemos saber qué JDK estamos usando. Podemos ejecutar el comando siguiente en una ventana de sistema.
 java -version
La salida anterior podría mostrar un resultado parecido a este:
"java verison 1.6.0_24..."
  • Siguiente paso es descargar el driver JDBC correspondiente a la versión de Oracle y al JDK que estamos usando. Para ello:
    • Accederemos a la web de Oracle para descargarlo.
    • Localizaremos la sección de "Drivers" y seleccionaremos JDBC drivers.
    • En la siguiente ventana nos mostrará los diferentes drivers según la versión de Oracle. Localizaremos por ejemplo la 11.0.2.2.
    • En la nueva ventana, demos descargar los archivos del driver y el soporte de idioma. En nuestro caso descargaremos:
      • ojdbc6.jar      Clase para usar con JDK 1.6.
      • orai18n.jar     Clase NLS para usar con JDK 1.5 y 1.6.
  • Por último debemos copiar los dos archivos descargados anteriormente en el directorio de los drivers que usa Spoon.
 ....\libext\JDBC
Con estos pasos ya se puede configurar una conexión a una base de datos Oracle sin ningún problema.



martes, 21 de febrero de 2012

VirtualBox - Ubuntu Server: Desaparece la interface de red

Al virtualizar Ubuntu server con VirtualBox, puede surgir un problema con el reconocimiento de la interface de red por parte del sistema operativo cliente.


Pongamos por ejemplo que el sistema operativo cliente (SOC), en nuestro caso Ubuntu server, tiene configurada correctamente la interface de red y se encuentra totalmente funcional. Por otro lado la configuración del adaptador de red de VirtualBox esta establecida en modo puente, existiendo ostras máquinas virtuales que pueden acceder a esta mediante la red.

El problema surge en el momento que se modifica la configuración del adaptador de red en VirtualBox. Siguiendo con el ejemplo anterior, al cambiar la configuración del adaptador de red a modo de red interna, en el SOC desaparece el dispositivo de red "eth0".

En esta situación al efectuar un ifconfig el dispositivo "eth0" ha desaparecido y solamente se muestra el dispositivo de loopback.

Este problema, también puede surgir si se modifica la dirección MAC del adaptador de red en la configuración de VirtualBox.

Para corregir el problema se deberá modificar el archivo de reglas de persistencia de nombres de dispositivos de red para todos los dispositivos de red con direcciones de MAC que empiecen por "08:00:27:". También si cambiamos de dirección de MAC se deberá modificar el archivo donde se almacena la información de la interface de red.

Modificar reglas:
  • Editar el archivo de reglas de persistencia de los nombres de los dispositivos de red:
    sudo vi/lib/udev/rules.d/75-persistent-net-generator.rules
  • Localizar la línea:
    #ignore KVM virtual interfaces
  • Introducir las siguientes líneas antes de la línea que hemos localizado anteriormente:
    #ignore VirtualBox virtual interfaces
    ENV{MATCHADDR}=="08:00:27:*", GOTO="persistent_net_generator_end"
  • Guardar el archivo.
Modificar información interface:


  • Editar el archivo de reglas donde se almacena la información de la interface de red. También sería posible eliminar el archivo pero no lo recomiendo:
    sudo vi /etc/udev/rules.d/70-persistent-net.rules
  • Localizar la línea donde aparece el nombre del dispositivo de interface de red que nos interesa modificar.
  • Modificar la dirección MAC por la que corresponda según la configuración de VirtualBox:
    ....ATTR{address}=="08:00:27:52:7D:FF",... ddd 

Una vez efectuadas las modificaciones debemos reiniciar el SOC para comprobar el correcto funcionamiento del dispositivo de red.
 

martes, 31 de enero de 2012

CAMBIAR LA DISTRIBUCION DE TECLADO EN UBUNTU SERVER

En ocasiones después de la instalación del servidor Ubuntu Server 11.10 y habiendo configurado el teclado, nos encontramos que dicha configuración no se ha realizado. En consecuencia, algunos símbolos no estarán en la posición correspondiente a la tecla.

Para cambiar la configuración podemos utilizar el siguiente comando:

sudo dpkg-reconfigure keyboard-configuration

Este comando modifica el contenido del fichero "/etc/default/keyboard", quedando por ejemplo:

XKBMODEL="latitude"
XKBLAYOUT="es"
XKBVARIANT=""
XKBOPTIONS=""


Y también reconfigura el archivo "/boot/initrd.img-3.0.0-12-generic".


Diferentes modelos de teclado y distribuciones de teclado.


A continuación tenéis un link de diferentes distribuciones de teclado.