feedburner

Lorem ipsum dolor sit amet,
consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua.

Mostrando entradas con la etiqueta Oracle tips. Mostrar todas las entradas
Mostrando entradas con la etiqueta Oracle tips. Mostrar todas las entradas

Cambiar el entorno de sesión de Oracle al vuelo

Etiquetas:

Cuando tenemos varias instalaciones de binarios de Oracle en un mismo host ( multihomed ) como por ejemplo ASM + varias bases de datos con varios juegos de binarios y tenemos que actuar en uno determinado ( asmcmd, listeners, arranque y parada de instancias ) debemos modificar variables de entorno ( ORACLE_SID, ORACLE_HOME, PATH...) para que apunten al entorno en el que queremos trabajar. Normalmente se dispone de una serie de scripts que modifican en parte dichas variables de entorno, cambiando ORACLE_BASE y ORACLE_HOME/SID pero para PATH normalmente lo que se hace es añadir al principio el valor del nuevo ORACLE_HOME/bin y exportar la variable. Con unos cambios de estos podemos terminar con una variable de PATH bastante extensa a la par que 'sucia'.

Dejo aquí un script para cambiar los valores típicos del entorno Oracle de una manera más limpia, o al menos eso creo yo :)

De lo que se trata es de, basándose en el ORACLE_HOME actual, buscarlo en el contenido del PATH actual y sustituirlo por el nuevo ORACLE_HOME que vamos a usar, exportando después este cambio como PATH.

Por ejemplo, estos son los 2 scripts necesarios para cambiar de un entorno ASM a un entorno de base de datos ( sid = test ). Yo siempre los ubico en ~/bin del usuario oracle



carga_entorno_asm

export ORACLE_BASE=/u01/app/oracle
export ORACLE_ASM=$ORACLE_BASE/product/10.2.0/ASM
export PATH=`echo $PATH | sed "s|$ORACLE_HOME|$ORACLE_ASM|g"`
export ORACLE_HOME=$ORACLE_ASM
export ORACLE_SID=+ASM


carga_entorno_bdtest

export ORACLE_BASE=/u01/app/oracle
export ORACLE_TEST=$ORACLE_BASE/product/10.2.0/TEST
export PATH=`echo $PATH | sed "s|$ORACLE_HOME|$ORACLE_TEST|g"`
export ORACLE_HOME=$ORACLE_TEST
export ORACLE_SID=TEST


Cada vez que tengamos que cambiar de entorno solo tendremos que ejecutar . $HOME/bin/carga_entorno_xxxx y lo tendremos disponible inmediatamente y libre de suciedad

También acostumbro a crear alias en
~/.bash_profile para cada carga de entorno, del tipo

alias cea='. ~/bin/carga_entorno_asm'
alias cet='. ~/bin/carga_entorno_bdtest'

y así agilizar los cambios

HTH

( If you want this post translated to english, let me know )

oracm fails on Red Hat 4

Etiquetas:

( sorry for my English, is not my first language. Sometimes is bad, sometimes is worse :P )

I've seen several people having this problem - as I had before -, here comes one explanation and a workaround


Oracle RAC 9iR2 Cluster Manager ( oracm ) installed on RedHat 4 x86_64 ( AMD64 / EM64T ). Starting oracm on first node shows only one oracm process and starting oracm on the second one dumps both oracm process on each node tracing dumps on $ORACLE_HOME/oracm/log/cm.log and the process dies.


Cause

oracm and all other oracle binaries for GNU/Linux on 9i uses the 'old kernel API' ( 2.4 series ) and now 2.6 kernels offers new improvements ( glibc, modules, etc... ) then the start up oracm script - $ORACLE_HOME/oracm/bin/ocmstart.sh - contains a verification condition to apply corrections in the execution environment to force the use of the correct libraries and avoid malfunctions on executables that only understand the old way:

$ORACLE_HOME/oracm/bin/ocmstart.sh verification:

"(...)
#
# 3. Startup
#


#check if RH3.0, then set LD_ASSUME_KERNEL for starting CM.
if [ -e /etc/redhat-release ]
then
version=`rpm -qf /etc/redhat-release --queryformat "%{VERSION}\n"`
if [ $version == 3AS -o $version == 3ES ]
then
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
fi
fi
(...)
"


that's OK if we are running RedHat 3 but under RedHat 4 this condition returns false miserably :), then the LD_ASSUME_KERNEL correction is not applied and oracm crashes when trying to create new threads.


Possible Solution

You can modify the condition to return TRUE on RedHat 3 or RedHat 4 or simply, 'cause you know where are you running, force the declaration of LD_ASSUME_KERNEL=2.4.19 at the beginning of the ocmstart.sh script ( on all nodes )

"
(...)
#
# 1. Configuration
#
export LD_ASSUME_KERNEL=2.4.19
if test -z "$ORACLE_HOME"
then
echo 'ocmstart.sh: Error: environment variable ORACLE_HOME is not set'
(...)
"

Remember that you've modified this script manually and check the content after application of any patch related to Oracle Cluster Manager. Some of them could overwrite this script and the forced export LD_ASSUME_KERNEL=2.4.19 should be inserted again

After this changes you will be able to start oracm correctly on all nodes and see how each one is registered on the cluster software layer



Good explanations about LD_ASSUME_KERNEL


http://developer.novell.com/wiki/index.php/LD_ASSUME_KERNEL
http://people.redhat.com/drepper/assumekernel.html

Oracle XE en Ubuntu Edgy amd64 / em64t ( x86-64 )

Etiquetas:

Oracle XE sólo se distribuye en binarios de 32bits, lo que provoca que no pueda instalarse en distribuciones linux de 64bits 'tal cual'. Por necesidades de un proyecto interno he tenido que ver la viabilidad de instalar y usar una base de datos XE bajo Ubuntu Edgy 64 bits, y después de comentarlo un poco con hali en el canal #oracle de irc.freenode.org y unas búsquedas en Google, no ha resultado nada difícil. Aunque estas explicaciones estén descritas para Ubuntu, con entender la idea del porqué de cada cosa, tiene que ser trivial reproducir el proceso en otras distribuciones basadas por ejemplo en RedHat.

  • Debemos instalar librerías de 32 bits para que el proceso de linkado de los binarios de Oracle se pueda realizar.
apt-get install libc6-i386


Explicación de la librería libc6-i386

( luego me he dado cuenta que existen unas librerías libc6-i686 que son la compilación optimizada para i686 de libc6, así que sería más óptimo usarlas en vez de las libc6-i386 )

  • Debemos instalar la versión de 32bits de la librería libaio. Este proceso tengo que mirar si sería posible hacerlo con apt ( en un post anterior indiqué como instalar paquetes de distintas arquitecturas usando up2date en RedHat ), pero de momento lo haremos de forma manual ya que sólo es un paquete y lo tenemos bien localizado.
Podemos bajarlo de http://packages.ubuntu.com/edgy/libs/libaio1 , clickando en el link i386 del apartado Download libaio1 y seleccionando el mirror que más nos convenga ( leed el porqué de la existencia de estas librerías para que entendáis como mejora el rendimiento de I/O ).

y una vez aceptada la licencia de uso, descargamos el paquete .deb en el apartado Oracle Database 10g Express Edition ( Universal ) para tener soporte para varios idiomas

  • Para instalar estos 2 últimos paquetes ( libaio y oracle XE en 32bits ), deberemos forzar dpkg a que los instale aún viendo que la arquitectura donde estamos corriendo no es la misma o compatible con la compilación del software que tratamos de instalar. Para eso utilizaremos la opción --force-arquitecture
dpkg -i --force-architecture libaio1_0.3.106-0ubuntu1_i386.deb
dpkg -i --force-architecture oracle-xe-universal_10.2.0.1-1.0_i386.deb


Como supongo que quien intenta instalar un Oracle ya sabe mínimamente los requerimientos recomendados de entorno, no me meteré a explicar lo del tamaño de swap, memoria mínima... esto está muy bien explicado en cientos de webs, San Google os puede ayudar:)

Ahora ya tenemos los binarios correctamente instalados ( la instalación ya nos ha creado el usuario 'oracle' y el grupo 'dba', propietarios del software de Oracle que hemos instalado) . Sólo nos falta la configuración final y la puesta en marcha.

  • Debemos ejecutar un script proporcionado por Oracle que entre otras cosas creará los scritps de parada y arranque automático de la instancia Oracle y el listener. Este script debe ejecutarse como root, sin el uso de sudos, para ello primero obtendremos una sesión pura de root ( sin necesidad de habilitar el login directo del superusuario )
sudo -s


  • Ahora que ya tenemos una sesión de root, lanzamos el script de configuración del servicio para Oracle XE ( puerto del listener, de la aplición web de administración, passwords... )
/etc/init.d/oracle-xe configure

  • Al cabo de un rato nos debería dar el ok al porceso de configuración/creación de la BD y tener varios procesos de oracle corriendo ( el listener, pmon, smon, reco... ) y deberíamos poder acceder a la administración de la nueva BD mediante el navegador web local al servidor, yendo a la dirección http://127.0.0.1:(puerto que hayamos configurado antes)/apex
  • Es imperativo la definición de las variables de entorno ORACLE_HOME y ORACLE_SID para el usuario oracle, así podréis trabajar con las herramientas de consola ( lnsrctl, sqlplus, rman... ) sin tener problemas
su - oracle
vi $HOME/.bash_profile
export ORACLE_SID=XE
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export PATH=$ORACLE_HOME/bin:$PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin


Salid de la sesión oracle, volved a entrar y ya podréis trabajar normalmente con la nueva instancia

oracle@nclserver02:~$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Apr 10 16:37:03 2007

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

SQL> conn /as sysdba
Connected.

SQL> select INSTANCE_NAME,VERSION,DATABASE_STATUS,EDITION from v$instance;

INSTANCE_NAME VERSION DATABASE_STATUS EDITION
---------------- ----------------- ----------------- -------
XE 10.2.0.1.0 ACTIVE XE

SQL> exit
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production


oracle@nclserver02:~$ rman target / nocatalog

Recovery Manager: Release 10.2.0.1.0 - Production on Tue Apr 10 16:39:59 2007

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

connected to target database: XE (DBID=2500655873)
using target database control file instead of recovery catalog

RMAN>


Fuentes: canal #oracle en irc.freenode.org
Google me llevó a http://valery.bgit.net/blog-en/2006/07/09/oracle-database-10g-express-edition-in-linux
os recomiendo la lectura de acciones post instalación