domingo, 1 de febrero de 2015

How to enable X11 forwarding on Solaris 11 text install

Software to Install:

    x11-server-utilities
    xauth
    x11-info-clients
    motif
    xclock

root@solaris:# pkg install -v x11-server-utilities
root@solaris:# pkg install -v xauth
root@solaris:# pkg install -v x11-info-clients
root@solaris:# pkg install -v motif
root@solaris:# pkg install -v xclock

Make sure that /etc/ssh/sshd_config has:

    # X11 tunneling options
    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost yes

If the file has been modified restart the ssh service:

root@solaris:# svcadm restart ssh

Go to other machine and start an ssh session:

root@other:# ssh -X root@solaris
Password:
Last login: Sun Feb  1 07:21:09 2015 from 192.168.56.1
Oracle Corporation      SunOS 5.11      11.2    June 2014

Test it:

root@solaris:# xclock

Enjoy!

domingo, 30 de septiembre de 2012

Tareas post-instalacion Oracle 11g release 2 en Debian 6.0 (Squeeze) de 64 bits

Por convencion durante la instalacion hemos llamado "deb664ora11gr2" al servidor, "odx" a la Instancia de base de datos y hemos instalado oracle en "/u01/app/oracle/product/11.2.0/dbhome_1".

Como "root", modificacion del fichero "oratab":

vi /etc/oratab

Cambiar:

odx:/u01/app/oracle/product/11.2.0/dbhome_1:N

por:

odx:/u01/app/oracle/product/11.2.0/dbhome_1:Y

Modificar el fichero "listener.ora":

vi /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

Añadir la entrada "SID_LIST_LISTENER":

SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC =
     (SID_NAME = odx)
     (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
     (PROGRAM = extproc)
   )
 (SID_DESC=
       (GLOBAL_DBNAME= odx.deb664ora11gr2)
       (ORACLE_HOME= /u01/app/oracle/product/11.2.0/dbhome_1)
       (SID_NAME=odx)
  )
 )

Si queremos que oracle escuche conexiones unicamente en las direcciones IPV4 modificamos la entrada "LISTENER":

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = deb664ora11gr2)(PORT = 1521)(IP=V4_ONLY))
    )
  )

Creamos el script de arranque de oracle:

vi /etc/init.d/oracle

Introducimos el siguiente contenido:

#!/bin/sh
# Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the 
# Oracle database in ORA_HOME.

### BEGIN INIT INFO
# Provides:          oracle
# Required-Start:    $remote_fs $syslog $named $network $time
# Required-Stop:     $remote_fs $syslog $named $network
# Should-Start:      tnslsnr
# Should-Stop:       tnslsnr
# Default-Start:     2
# Default-Stop:      0 1 6
# Short-Description: Oracle
# Description:       Oracle
### END INIT INFO

ORA_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
ORA_OWNER=oracle

if [ ! -f $ORA_HOME/bin/dbstart ]
then
    echo "Oracle startup: cannot start"
    exit
fi

case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"
        touch /var/lock/oracle
        ;;
    'stop')
        # Stop the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
        rm -f /var/lock/oracle
        ;;
esac

Hacemos que el fichero sea ejecutable y que sea arrancable/parable en el inicio/parada automaticamente:

chmod +x /etc/init.d/oracle

update-rc.d oracle defaults

Como "oracle", actualizar las variables de entorno del usuario:

echo "# Oracle Settings" >> /home/oracle/.profile
echo "TMP=/tmp; export TMP" >> /home/oracle/.profile
echo "TMPDIR=$TMP; export TMPDIR" >> /home/oracle/.profile
echo "ORACLE_HOSTNAME=deb664ora11gr2; export ORACLE_HOSTNAME" >> /home/oracle/.profile
echo "ORACLE_UNQNAME=odx; export ORACLE_UNQNAME" >> /home/oracle/.profile
echo "ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE" >> /home/oracle/.profile
echo "ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME" >> /home/oracle/.profile
echo "ORACLE_SID=odx; export ORACLE_SID" >> /home/oracle/.profile
echo "PATH=$ORACLE_HOME/bin:$PATH; export PATH" >> /home/oracle/.profile
echo "LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH" >> /home/oracle/.profile
echo "CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH" >> /home/oracle/.profile

Para comprobar que todo esta bien podemos probar "sqlplus":

oracle@deb664ora11gr2:~$ sqlplus -v

SQL*Plus: Release 11.2.0.1.0 Production

Y tras reiniciar desde "root":

root@deb664ora11gr2:/etc# netstat -lp | grep tnslsnr | grep -v STREAM
tcp        0      0 *:1521                  *:*                     LISTEN      982/tnslsnr

root@deb664ora11gr2:/etc# netstat -lp | grep ora_
tcp6       0      0 [::]:33079              [::]:*                  LISTEN      1227/ora_d000_odx
udp6       0      0 ip6-localhost:62128     [::]:*                              1229/ora_s000_odx
udp6       0      0 [::]:38848              [::]:*                              1223/ora_mmon_odx
udp6       0      0 ip6-localhost:37339     [::]:*                              1195/ora_pmon_odx
udp6       0      0 ip6-localhost:23137     [::]:*                              1227/ora_d000_odx





martes, 4 de septiembre de 2012

Instalando Oracle 11g release 2 en Debian 6.0 (Squeeze) de 64 bits

Partimos de la base de que hemos creado una maquina virtual con cuatro discos de 8GB y 1280MB de RAM:

/dev/sda - Es el primer disco.
/dev/sdb - El segundo.
/dev/sdc - Tercero.
/dev/sdd - Cuarto.

Instalamos el SO (Debian 6.0 de 64 bits), instalando unicamente el servidor SSH y las utilidades estandard del sistema.

En /dev/sda hemos creado las siguientes particiones de tipo EXT4 (Para no complicarlo mucho he elegido este sistema, si el espacio en disco estuviese supeditado a LUNs y similares mejor emplear LVM):

fdisk -l

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000cdbef

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1045     8386560   83  Linux

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000870d0

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         256     2050048   82  Linux swap / Solaris
Partition 1 does not end on cylinder boundary.
/dev/sda2             256         511     2051072   83  Linux
Partition 2 does not end on cylinder boundary.
/dev/sda3   *         511        1045     4285440   83  Linux

Disk /dev/sdc: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00009b43

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1045     8386560   83  Linux

Disk /dev/sdd: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003d3e5

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1        1045     8386560   83  Linux

df

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3              4218056    905036   3098748  23% /
tmpfs                   642496         0    642496   0% /lib/init/rw
udev                    640848       144    640704   1% /dev
tmpfs                   642496         0    642496   0% /dev/shm
/dev/sda2              2018832     35800   1880480   2% /tmp
/dev/sdb1              8254904    149492   7686084   2% /u01
/dev/sdc1              8254904    149492   7686084   2% /u02
/dev/sdd1              8254904    149492   7686084   2% /u03

Como el instalador de oracle es grafico y no hemos instalado las X en el servidor, necesitamos un servidor de X, yo me siento mas comodo usando las X de mi portatil con Xubuntu pero voy de describir aqui como exportarlas via una sesion con Putty usando Xming en Windows XP:

Arrancamos Windows e instalamos Xming y Putty. Iniciamos la aplicacion Xming simplemente haciendo doble click en el icono de la aplicacion.
Iniciamos la aplicacion Putty y creamos una conexion SSH a nuestro servidor de la manera habitual solo que en el arbol de la izquierda que muestra Putty, en "Connection -> SSH -> X11" marcamos la casilla "Enable X11 forwarding", volvemos a la seccion "Session" y guardamos la conexion.

Para probar, iniciamos una sesion ssh con el usuario "root" en el servidor e instalamos alguna aplicacion que necesite un servidor grafico, como por ejemplo "xclock", para ello:

apt-get install x11-apps x11-utils

Comprobamos el valor de la variable de entorno DISPLAY:

echo $DISPLAY

Cuyo resultado debe ser "localhost:10.0". Y ejecutamos la aplicacion "xclock" para probar:

xclock

Una vez comprobado el asunto de las X, quien quiera que haga este pequeño tuneado, no es necesario para nada.

Desactivamos el maldito exim4:

update-rc.d exim4 disable

Como lo raro es usar IPV6, desactivamos el servicio SSH en IPV6 que algun recurso ahorrara:

cd /etc/sshd
vi sshd_config

Buscamos la linea:

#ListenAddress 0.0.0.0

Y la descomentamos:

ListenAddress 0.0.0.0

Tras ello, reiniciamos el servicio:

cd /etc/init.d
./ssh restart

Empezamos con oracle.

Antes que nada instalamos algunos paquetillos:

apt-get install libaio1 elfutils gobjc++ libaio-dev sysstat unixodbc unixodbc-dev pdksh expat

Instalamos la libreria "libstdc++5" del siguiente modo para que no nos de problemas con "libstdc++6" que ya viene instalada:

cd /root
mkdir tmp
cd tmp
wget http://ftp.es.debian.org/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.6-20_amd64.deb
dpkg-deb -x libstdc++5_3.3.6-20_amd64.deb libstdc5
cd libstdc5/usr/lib/
cp libstdc++.so.5.0.7 /usr/lib
cd /usr/lib
ln -s libstdc++.so.5.0.7 libstdc++.so.5


Creamos el resto de links:

ln -s /usr/bin/basename /bin/basename
ln -s /etc/alternatives/awk /bin/awk

Preparamos los grupos que va ha necesitar oracle, el usuario de oracle y la estructura de directorios:

groupadd oinstall
groupadd dba
useradd oracle -m -d /home/oracle -g oinstall -G dba -s /bin/bash
passwd oracle

Una vez tenemos los grupos y el usuario pasamos a los directorios:

mkdir -p /u01/app/oracle
mkdir -p /u02/oradata
mkdir -p /u03/recovery
chown -R oracle:oinstall /u01 /u02 /u03
chmod -R 775 /u01 /u02 /u03

Retocamos el sistema temporal de ficheros:

df -h /dev/shm
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 628M     0  628M   0% /dev/shm
cd /etc
vi fstab

Introducimos la siguiente linea:

tmpfs           /dev/shm        tmpfs   defaults,size=1280M    0       0

Remontamos el punto de montaje:

mount -o remount /dev/shm
df -h /dev/shm
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 1.3G     0  1.3G   0% /dev/shm

Por convencion he elegido igualar el tamaño de /dev/shm a la memoria RAM, mas tarde en el instalador establecere la memoria para oracle en 1024MB, cosa que no me permitia el tamaño original de /dev/shm.

Llegados a este punto ya podriamos iniciar la instalacion, solo seria necesario iniciar una sesion con el usuario "oracle", dirigirse donde se encuentre el instalador "runInstaller", ejecutarlo y seguir sus instrucciones.

Lo que sucede es que llegados al punto donde el instalador comprueba los requisitos, este fallaria. Para evitarlo se debe ejecutar el instalador con el parametro "-ignoreSysPrereqs". Pero resulta util no usar el parametro para ver que valores indica el instalador son necesarios para nuestro sistema ya que los siguientes comandos definen dichos valores principalmente para el sistema que he usado.

Desde una sesion con el usuario root, ejecutamos lo siguiente para establecer los limites de oracle:

echo "oracle hard nofile 65536" >> /etc/security/limits.conf
echo "oracle hard nproc 16384" >> /etc/security/limits.conf
echo "oracle soft nproc 2047" >> /etc/security/limits.conf

Establecemos los parametros del kernel:

echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf
echo "kernel.shmmax = 536870912" >> /etc/sysctl.conf
echo "fs.file-max = 6815744" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 9000 65500" >> /etc/sysctl.conf
echo "net.core.rmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.rmem_max = 4194304" >> /etc/sysctl.conf
echo "net.core.wmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.wmem_max = 1048576" >> /etc/sysctl.conf
echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf

sysctl -p

Iniciamos una sesion ssh con Putty como hemos señalado antes con el usuario "oracle":

cd /ruta_al_instalador/
./runInstaller -ignoreSysPrereqs

Una vez iniciado el instalador una de las primeras cosas que pide es configurar la memoria de oracle, por convencion he empleado 1024MB.
Otra de las cosas que el instalador solicitara sera configurar el directorio de oracle, el de la base de datos y el de recuperacion, los asignamos tal que:

oracle -> /u01/app/oracle
base de datos -> /u02/oradata
recuperacion -> /u03/recovery

El resto es seguir las sugerencias del instalador y nuestro capricho. En el siguiente post hablaremos de las tareas de post-instalacion.
Regards.


miércoles, 25 de julio de 2012

lunes, 16 de julio de 2012

Contando sesiones de Oracle 10g


SELECT COUNT(*) FROM v$session WHERE USERNAME='pepito';
SELECT COUNT(*) FROM v$session WHERE SCHEMANAME='juanito';