Archive for the ‘Oracle’ Category

Conectar Java (JDBC) a Oracle RAC

jueves, octubre 25th, 2012

Lo normal es que nuestras conexiones JDBC esten dadas a través del String URL de la siguiente forma

jdbc:oracle:thin:@HOST:1521:SID

En Oracle 10g me dio buenos resultados (ante el error ORA-12505)

jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST=host1) (PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=host2) (PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=service)))

Pero en 11g la documentación dice

jdbc:oracle:thin:@HOST:1521/SID

Con lo que ha funcionado completamente (notese que antes del SID los dos puntos cambia por slash).

Como iniciar Enterprise Manager en Oracle 11g

jueves, octubre 18th, 2012

El comando para iniciar es

emctl start dbconsole

Esto, asumiendo que esta todo configurado debiese iniciar correctamente.

impdp con cambio de tablespace

jueves, octubre 18th, 2012

La costumbre de la exportacion e impotacion con la base de datos Oracle se basaba en el uso de los comandos exp e imp respectivamente. Estos comando tienen cambios en la version 11g, que segun la documentación ayudan a la performance de Oracle, por ejemplo en la version Enterprise de Oracle Database el comando exp, no exporta las tablas cuando estas no tienen registros debido a que no tienen espacio asignado, por lo que hay que hacer un truco para que estas se puedan exportar.

Se crearon para esta versión los comando expdp e impdp, que se utilizan «casi» de la misma forma que los tradicionales, ejemplo de exportacion

expdp schemas=scott directory=export dumpfile=backup.dmp logfile=backup.log compression=all

En este caso export es un directorio que previamente debe ser creado en oracle de la siguiente forma

$ sqlplus /nolog 
SQL*Plus: Release 11.2.0.1.0 Production on Wed Oct 17 13:39:30 2012
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
SQL> conn / as sysdba
Connected.
SQL> create or replace directory export as '/opt/oracle/data';
Directory created.
SQL> grant read, write on directory export to GPI;
Grant succeeded.
SQL> exit

Para luego hacer la importacion.

 impdp user/password@sid directory=export dumpfile=backup.dmp logfile=backup.log 

Que en muchos de los casos es suficiente, pero para algunos como yo, que tiene ordenado cada usuario con su respectivo tablespace tiene la necesidad de «remapear» los tablespace de a los existentes dentro de la instancia actual añadiendo la clausula REMAP_TABLESPACE

 impdp user/password@sid directory=export dumpfile=backup1.dmp logfile=backup.log remap_tablespace=TS_SCHEMA_SDAT:SCHEMA_DAT,TS_SCHEMA_SIDX:SCHEMA_IND

Programación de GPU en Java: Project Sumatra

jueves, octubre 18th, 2012

Una de lo bueno de las GPU es la potencia en procesamiento matemático que hasta el momento era esquivo en Java. Es por eso que nació el proyecto Sumatra que le da la capacidad a la máquina virtual de Java de comunicarse directamente con la GPU sin añadir las complejidades de lo que esto significa, ya que aunque existen proyectos como JCuda, especificos para NVidia, es siempre útil que los padres del lenguaje le den su venia a este tipo de implementaciones.

Oracle no inicia luego de un reinicio

martes, octubre 9th, 2012

Debido a que en un servidor Linux se le estableció más RAM hubo que apagarlo, en el estaba instalado Oracle pero la máquina nunca había sido reiniciada luego de la instalacion de Oracle. Quizas el hecho de hacer una instalación Oracle descuidada ayudo a que luego de un reinicio no partiera Oracle, aun cuando estaba claro que en el futuro lo iba a iniciar a linea de mando debido a que al ser instalado no lo introduje en el proceso de init de linux.

Primero, conectarse como usuario de oacle, es conocido que en Linux las operaciones sobre base de datos NO deben hacerse como root. Para cambiarme de usuario al de Oracle y luego iniciar la base de datos ejecute

su - oracle

Luego iniciar la base de datos, previa revision de variables de configuracion del entorno.

Se inicia además el listener, de forma que así se pueda conectarse a la base de datos.

Se conecta a través de SQLPlus para ejecutar el inicio de la base de datos

sqlplus /nolog
connect / as sysdba
startup

Esto puede generar el error

ORA-00205: error in identifying control file, check alert log for more info

Lo que significa que no esta configurado el archivo de control o esta perdido.
Hay que crear un pfile, para luego modificar sus parametros coonsiderando el archivo ctl quese tenga.

Pero para volver a ejecutar el comando debes detener

shutdown abort

Corta todas las conexiones y hace el proceso de shutdown. Puede existir la posibilidad de que aun con esto puedan existir procresos Oracle corriendo a través de un ps -fea, verificar que ninguno este corriendo, puedes identificarlo debido a que estan utilizados por el usuario oracle.

Luego de detener, inicias nuevamente la base de datos apuntando al nuevo pfile

SQL> startup pfile='/opt/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora'
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size                  2220200 bytes
Variable Size             616566616 bytes
Database Buffers          444596224 bytes
Redo Buffers                5554176 bytes
Database mounted.
Database opened.
SQL> exit

Con lo que desde ese momento tienes tu base de datos levantada.

ORA-12505: TNS: el SID es desconocido

martes, octubre 9th, 2012

Esto te puede ocurriral iniciar el listener de Oracle

lsnrctl start

o al intentar conectarte a Oracle a través de un cliente Oracle. Esto puede significar que no existan las variables de entorno, sobre todo ORACLE_SID (SID, Service Identificator)

Si esta configurado revisa dos archivos tnsnames.ora y/o listener.ora.

En el caso de tnsnames.ora, luego de crear la base de datos debiese existir una anotación sobre el nombre y el protocolo que se utilizará. Ejemplo

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

Que en mi caso estaba correcto.
En cambio al listener.ora le faltaba referenciar al SID orcl. Para hacerlo, se debe agregar dentro de la lista de listener, que en mi caso solo era este

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/11.2/db_1)
      (SID_NAME = orcl)
    )
  )