martes, 21 de diciembre de 2010

Crear Una Base de Datos Oracle 11gR2 en Linux - Parte II

En la primera parte vimos como poder instalar la maquina virtual y la instalacion del sistema operativo Linux. Asi que en esta parte vamos a ver la instalacion de los binarios de Oracle, para en la ultima parte ver la creacion, via un script de sql, de la base de datos.

Instalacion de Binarios de Oracle
Como se menciona en la primera parte de esta entrada, tenemos que verificar los prerequisitos de instalacion, si no lo has hecho te recomiendo que lo verifiques en esta entrada.
  • Como mencionamos en la parte de prerequisitos, configuramos la variable de ambiente, en donde tenemos la ruta donde se va a instalar los binarios (ORACLE_HOME).
  • Una vez que tenemos inicializadas nuestras variables de ambiente, desde tenemos el Software de Oracle que descargamos mencionado en la primera parte, corremos runInstaller para iniciar la instalacion de los binarios.
  • Una vez que empieza el instalador, en mi caso deseleccione la configuracion con MOS (My Oracle Support), de la misma manera deje en blanco el correo electronico
  • En la siguiente parte, tambien le menciono que se brinque las actualizaciones de Software.
  • Ya como uno de los objetivos de esta entrada es la creacion de una base de datos via un script de SQL, en la siguiente seccion vamos a decirle al instalador que unicamente queremos instalar el Software.
  • Para continuar seleccione un tipo de instalacion de una sola instancia
  • Ahora seleccionamos el idioma en que vamos a correr, en mi caso seleccione ingles, este se los dejo a su convenincia.
  • El tipo de instalacion que lleve a cabo fue el de Enterprise Edition, esta es una seleccion que es de acuerdo a sus necesidades y licenciamiento que tienen.
  • En esta parte el instalador verifica lo que es el ORACLE_BASE y el ORACLE_HOME, como estas variables ya las habiamos definido, no hay realmente nada que hacer mas que continuar.
  • En la siguiente parte asignamos los grupos que van a tener permisos para nuestros binarios, en mi caso seleccione al mismo grupo dba, pero puede ser el grupo oinstall que creamos en los prerequisitos.
  • Si ya llegaste a esta parte del instalador y no has verificado los prerequisitos, el instalador te va a hacer mencion de cuales son los prerequisitos que no se cumplen para proseguir con la instalacion.
  • 11gR2 tiene una funcionalidad de crear un script llamado runfixup.sh, que tiene que correr con el usuario root, para corregir todos los prerequisitos necesarios que no tengan que ver con una modificacion directa con un tamaño de disco o instalar paquetes, como por ejemplo los parametros de Kernel necesarios.
  • Una vez que arreglamos todos los prerequisitos necesarios, le damos siguiente y nos lleva a una pantalla de resumen de instalacion,  en donde podemos verificar si queremos hacer algun cambio a nuestra instalacion, si estamos de acuerdo le damos siguiente e inicia la instalacion.
  • Por ultimo, tenemos que correr los scripts que te menciona el instalador, estos se corren con el usuario root.

Conclusion
Como podemos ver es sencilla la instalacion de los binarios, en lo que tenemos que tener cuidado es en haber cumplido los prerequisitos de instalacion, si es asi el caso, vamos a tener una instalacion sin complicaciones. En la ultima parte de esta entrada vamos a ver la creacion de una base de datos via un script de SQL.

viernes, 17 de diciembre de 2010

Requisitos Para Instalar Oracle 11gR2 en Linux x86 para RHEL5

Estos son los requerimientos para poder instalar Oracle 11gR2 en Oracle Linux x86 para RHEL 5. Siempre recomiendo tomar los ultimos valores disponibles en la documentacion oficial de Oracle disponible en este enlace
Si no especifico otro usuario, todos los comando mencionados son con el usuario root asi que debemos tener acceso a ese usuario.

Requisitos de Memoria
  • Por lo menos 1 GB de RAM
    Para verificar el tamaño de tu RAM
    grep MemTotal /proc/meminfo
  • Espacio swap
    Para verificar el tamaño de tu espacio Swap
    grep SwapTotal /proc/meminfo

RAM Disponible Espacion Swap Requerido
Entre 1 GB y 2 GB 1.5 veces el tamaño de la RAM
Entre 2 GB y 16 GB Igual al Tamaño de la RAM
Mas que 16 GB 16 GB

Requisitos de Hardware
  • 1 GB de espacio en el directorio /tmp
    Para determinar el espacio libre
    df -h /tmp
Tipo de Instalacion Requerimientos de Archivos SW (GB)
Enterprise Edition 3.95
Standard Edition 3.88

Tipo de Instalacion Requerimientos Para Datafiles (GB)
Enterprise Edition 1.7
Standard Edition 1.5

Requisitos de Software
  • Determinar la distribucion y version de Linux instalado. Acuerdate que estamos instalando una version de RHEL 5 con un kernel 2.6.32
    cat /proc/version
  • Kernel Requerido
    Para Asianux Server 3, Oracle Linux 5, y Red Hat Enterprise Linux 5:
    2.6.18 o posterior
    Para verificar que la version requerida del Kernel esta instalada
    uname -r
  • Paquetes Requeridos
    Todos son la version mencionada o posterior.
    binutils-2.17.50.0.6
    compat-libstdc++-33-3.2.3
    elfutils-libelf-0.125
    elfutils-libelf-devel-0.125
    elfutils-libelf-devel-static-0.125
    gcc-4.1.2
    gcc-c++-4.1.2
    glibc-2.5-24
    glibc-common-2.5
    glibc-devel-2.5
    glibc-headers-2.5
    kernel-headers-2.6.18
    ksh-20060214
    libaio-0.3.106
    libaio-devel-0.3.106
    libgcc-4.1.2
    libgomp-4.1.2
    libstdc++-4.1.2
    libstdc++-devel-4.1.2
    make-3.81
    numactl-devel-0.9.8.i386
    sysstat-7.0.2
    Para verificar si tienes el paquete instalado, utiliza el siguiente comando
    rpm -q nombre_paquete

    Ejemplo
    rpm -q binutils

Parametro Valor Minimo Archivo
semmsl
semmns
semopm
semmni
250
32000
100
128
/proc/sys/kernel/sem
shmall 2097152 /proc/sys/kernel/shmall
shmmax Ya sea 4 GB - 1 byte, or la mitad del tamaño de la memoria fisica (en bytes), El que sea Menor.
Default: 536870912

/proc/sys/kernel/shmmax
shmmni 4096 /proc/sys/kernel/shmmni
file-max 6815744 /proc/sys/fs/file-max
ip_local_port_range Minimo: 9000
Maximo: 65500
/proc/sys/net/ipv4/ip_local_port_range
rmem_default 262144 /proc/sys/net/core/rmem_default
rmem_max 4194304 /proc/sys/net/core/rmem_max
wmem_default 262144 /proc/sys/net/core/wmem_default
wmem_max 1048576 /proc/sys/net/core/wmem_max
aio-max-nr Maximo: 1048576 /proc/sys/fs/aio-max-nr

Para ver los valores de los parametros del Kernel, utiliza los comandos mencionados en la siguiente tabla

Parametro Comando
semmsl, semmns, semopm, y semmni # /sbin/sysctl -a | grep sem
shmall, shmmax, y shmmni # /sbin/sysctl -a | grep shm
file-max # /sbin/sysctl -a | grep file-max
ip_local_port_range # /sbin/sysctl -a | grep ip_local_port_range
rmem_default # /sbin/sysctl -a | grep rmem_default
rmem_max # /sbin/sysctl -a | grep rmem_max
wmem_default # /sbin/sysctl -a | grep wmem_default
wmem_max # /sbin/sysctl -a | grep wmem_max

  • Si cualquiera de los valores mencionados es menor a los valores recomendados, crea o edita el archivo /etc/sysctl.conf y añade o edita las lineas mencionadas abajo: 
    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    kernel.shmall = 2097152
    kernel.shmmax = 536870912
    kernel.shmmni = 4096
    kernel.sem = 250 32000 100 128
    net.ipv4.ip_local_port_range = 9000 65500
    net.core.rmem_default = 262144
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048586
  • Utiliza el siguiente comando para cambiar los valores actuales que tiene el kernel
    /sbin/sysctl -p
  • El siguiente comando te ayuda para confirmar que los parametros estan correctos
    /sbin/sysctl -a
Crear el usuario Oracle y sus grupos
Tomando en cuenta de que esta es una instalacion nueva vamos a crear los siguientes grupos
  • /usr/sbin/groupadd dba
  •  /usr/sbin/groupadd oinstall
A continuacion vamos a vamos a crear el usuario oracle
  • /usr/sbin/useradd -g oinstall -G dba oracle 
  • Para cambiar el password del usuario, vamos a usar el siguiente comando
    passwd oracle
Recursos Limites Para el Usuario que va a instalar los binarios
Estos son los valores recomendados por Oracle
Recurso Limite del Shel Recurso Limite Soft Limite Hard
Descriptores de Open file
nofile

por lo menos 1024

por lo menos 655
Numero de procesos disponibles a un solo usuario
nproc

por lo menos 2047

por lo menos 16384
Tamaño del segmento stack del proceso
stack

por lo menos 10240 KB

por lo menos 10240 KB, y a lo mas 32768 KB

  • Para verificar los recursos limites del usuarioEntra como el usuario que va a hacer la instalacion, en nuestro caso es el usuario Oracle
  • Verifica los limites soft y hard para los descriptores de archivo. Por ejemplo:
    $ ulimit -Sn
     4096
    $ ulimit -Hn
    65536
  • Verifica los limites soft y hard para los numeros de procesos disponibles al usuario. Por ejemplo:
    $ ulimit -Su
    2047
    $ ulimit -Hu
    16384
  • Verifica los limites soft y hard para los segmentos stack.Por ejemplo:
    $ ulimit -Ss
    10240
    $ ulimit -Hs
    32768
  • Si es necesario, actualiza los recursos limites en el archivo de configuracion /etc/security/limits.conf . Por ejemplo, añade las siguientes lineas al archivo /etc/security/limits.conf file:
    oracle              soft    nproc   2047
    oracle              hard    nproc   16384
    oracle              soft    nofile  1024
    oracle              hard    nofile  65536
    oracle              soft    stack   10240
Crear los Directorios Necesarios
En mi caso, yo rompo un poco de la arquitectura OFA, pero sigue teniendo mucho sentido, creo un mount point y dentro de ese creo todos los directorios necesarios para mi base de datos. En mi caso, uso el directorio de oracle para instalar los binarios.
oracle@localhost /mount
oracle $ ls
arch01     copy01     dba01      dump01     oracle   u01

Configurando la variable de ambiente
Aqui yo tambien me alejo un poco de lo que recomienda Oracle. Lo que hago es utilizar en el .profile del usuario oracle uso lo siguiente:

set -o vi
stty erase "^?"
export PS1="
`echo ${LOGNAME}`@`hostname` \${PWD}
`who am i | awk '{print $1}'` $ "
export EDITOR=vi
PATH=$HOME/bin:
$PATH
export PATH
 De ahi en el directorio $HOME/bin creo una variable de ambiente que refleje ahora si las necesidades de mi instancia, ya que puedo definir una variable distinta si tengo tengo otras versiones de Oracle en mi servidor.

ORACLE_HOME=/mount/oracle/product/11.2.0.2v1
DATA_PUMP_DIR=/mount/copy01/export01/TESTDB/
ORACLE_SID=TESTDB
ORACLE_BASE=/mount/oracle
export ORACLE_HOME ORACLE_SID ORACLE_BASE DATA_PUMP_DIR
ORACLE_CONFIG_HOME=/mount/oracle/product/cfg/TESTDB
export ORACLE_CONFIG_HOME
ADR_HOME=/mount/dump01/oracle/TESTDB/diag/rdbms/testdb/TESTDB
export ADR_HOME
SID_HOME=/mount/dba01/oracle/TESTDB
export SID_HOME
DBA_HOME=/mount/dba01/oracle
export DBA_HOME
TNS_ADMIN=$ORACLE_HOME/network/admin
export TNS_ADMIN
ORACLE_TERM=vt100
export ORACLE_TERM
Conclusion
Aqui no hay mucho que concluir, mas que les vuelvo a decir que esto es solo una guia, para cualquier cambio de los requisitos, consulten la documentacion oficial

miércoles, 15 de diciembre de 2010

Crear Una Base de Datos Oracle 11gR2 en Linux - Parte I

Algo de lo que no me habia dado fijado es que este blog siendo orientado a los principiantes como DBAs, no habia hecho una entrada de como crear un ambiente de pruebas y hacer una instalacion del sistema operativo Linux, por esta razon esta entrada la voy a dividir en dos o tres partes, ya que nos va a tomar algo de tiempo para poder hacerla.

Para empezar estos son los componentes que vamos a utilizar, antes de que instales cualquiera de los componentes, acuerdate de leer cada una de las licencias y sus restricciones de uso,asi como apegarte a ellas.
La instalacion de VMWare Server no la voy a cubrir, ya que es una instalacion muy directa. Asi que pasamos directo a la instalacion de Linux.

Te recomiendo que antes de empezar a hacer cualquier instalacion, leas la entrada que hice para los requerimientos de la instalacion de Oracle, ya que esto te puede dar una idea del espacio y requerimiento de memoria que le tienes que asignar a la maquina virtual.

Instalacion de Linux
  • Al seleccionar crear una Maquina virtual en el VMWare Server Console, te aparecera la siguiente pantalla en donde le damos un nombre de "Linux RHEL 5"

  • Ahora vamos a seleccionar el tipo de sistema operativo Linux, y la version RHEL 5 Linux 32 Bit

  • En este caso, por las limitaciones de la memoria, le voy a asignar 1.5g de memoria, tomando en cuenta que para la instalacion de 11gR2 necesitamos como minimo 1g de memoria.
  •  Vamos a crear un Disco Virtual, en mi caso lo cree con 20g de capacidad, el tamaño de este se los dejo a ustedes, pero si es menor a 20g podrian quedar limitados en lo que puedan hacer en el SO.



  • El tipo de Conexion de Red es de tipo NAT
  •  Como parte final de la configuracion de la maquina virtual, creamos un CD/DVD drive y seleccionamos que sea a partir de un archivo ISO, cargando el primer archivo ISO de la distibucion de Linux para este.
  •  Una vez que acabamos de configurar nuestra maquina virtual, la iniciamos, asegurandonos que el CD/DVD drive tiene cargado el primer archivo ISO de la distribucion Linux.
  •  En el siguiente paso seleccionamos el idioma, en mi caso seleccione Ingles, pero pueden seleccionar Español.
  •  El tipo de teclado debe de ser correspondiente a la maquina donde lo estan instalando, en mi caso es America Latina, una vez que le damos siguiente nos pide inicializar la nueva particion, esta es la misma que definimos en la maquina virtual.

  •  A continuacion definimos el tipo dispositivo de Red, asi como el nombre del Host y los DNS, en mi caso es como se muestra en la pantalla.

  • En la penultima pantalla, nos permite seleccionar los componentes adicionales que queremos instalar, por el momento lo deje por default ya que despues vamos a instalar las librerias requeridas necesarias para poder instalar Oracle.
  • Y por ultimo iniciamos la instalacion, cada vez que nos solicite tenemos que cambiar el dispositivo CD/DVD al siguiente archivo ISO correspondiente.

Conclusion
En esta primera parte vimos lo sencillo que es una instalacion y configuracion estandar de una maquina virtual, asi como la distribucion Linux. En la Parte II vamos a ver la configuracion e instalacion del software de Oracle y en la Parte III vamos a ver como crear una Base de Datos con un script de SQL.


lunes, 13 de diciembre de 2010

Cambiar el DBID de Nuestra Instancia

Algo para los que manejamos respaldos en RMAN con un catalogo y constantemente estamos clonando Bases de Datos via tradicional, no via RMAN, el DBID es algo de lo que tenemos que estar conscientes para poder registrar nuestras BDs en el mismo catalogo de RMAN donde se encuentra la BD fuente de la clonacion.

Si nunca has manejado un catalogo de RMAN, el DBID no era de gran importancia ya que si queriamos renombrar nuestra instancia, lo unico que teniamos que hacer era recrear el control file, y listo, nuestra base de datos tenia un nuevo nombre, pero hay que saber que el DBID se mantenia igual.
Oracle tiene una utileria llamada DBNEWID para poder cambiar el DBID de la instancia asi como el nombre de la instancia, y esta utileria tiene unas cuantas ramificaciones que hay que saber:
  • En el momento que cambiamos el DBID, cualquier respaldo y archived redo logs anterior a este proceso no nos va a servir para recuperar nuestra base de datos, se vuelven obsoletos para esta version de la base de datos, ya que a la vez tenemos que abrir la base de datos con la opcion de resetlogs, el cual recrea los online redo logs y regresa la secuencia a 1.
  • Si nada mas cambiamos el DBNAME, los respaldos y archived redo logs siguen sirviendonos ya que no tenemos que abrir la base de datos con open resetlogs, lo unico que hay que tomar en cuenta que tenemos que cambiar el parametro DB_NAME.
  • Si cambiamos el nombre con la utileria DBNEWID, hay que tomar en cuenta que no cambia el nombre unico global, GLOBAL_NAME, este lo cambiamos via el comando ALTER DATABASE
  • Si cambiamos el DBID, vamos a tener que recrear el password file.
Pasos para cambiar el DBID.
  1.  Asegurarnos que tenemos un buen respaldo de nuestra base de datos, ya que en este proceso vamos a abrir la base de datos con resetlogs y éste, en el peor de los casos,  va a ser nuestro punto a restaurar.
  2. Para poder hacer este proceso, la base de datos tiene que estar en modo MOUNT.

    oracle@localhost [TESTDB] /mount/oracle
    root $ sqlplus
    SQL*Plus: Release 11.2.0.2.0 Production on
    Mon Dec 13 07:38:14 2010
    Copyright (c) 1982, 2010, Oracle.  
    All
     rights reserved.
    Enter user-name: /as sysdba
    Connected to:

    Oracle Database 11g Enterprise Edition
    Release 11.2.0.2.0 - 64bit Production
    With the OLAP, Data Mining and Real
    Application Testing options

    TESTDB >shutdown immediate
    TESTDB >startup mount

    ORACLE instance started.

    TESTDB >exit

  3. En la linea de comandos vamos a llamar a la utileria DBNEWID, que se encuentra en $ORACLE_HOME/bin.

    oracle@localhost [TESTDB] /mount/oracle
    root $ nid target=sys/sys_password@TESTDB
    DBNEWID: Release 11.2.0.2.0 - Production on 
    Mon
     Dec 13 07:39:04 2010
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  
    All
     rights reserved.

    Connected to database TESTDB (DBID=3071275785)
    Connected to server version 11.2.0

    Control Files in database:
        /mount/u01/oracle/TESTDB/control/control01.ctl
        /mount/u01/oracle/TESTDB/control/control02.ctl
        /mount/u01/oracle/TESTDB/control/control03.ctl

    Change database ID of database TESTDB? (Y/[N]) => Y

    Proceeding with operation
    Changing database ID from 3071275785
    to 3073734488
        Control File /mount/u01/oracle/TESTDB/control/control01.ctl - modified
        Control File /mount/u01/oracle/TESTDB/control/control02.ctl - modified
        Control File /mount/u01/oracle/TESTDB/control/control03.ctl - modified

        Datafile /mount/u01/oracle/TESTDB/data/system.db - dbid changed

        Datafile /mount/u01/oracle/TESTDB/data/undotbs1.db - dbid changed

        Datafile /mount/u01/oracle/TESTDB/data/sysaux.db - dbid changed

        Datafile /mount/u01/oracle/TESTDB/data/users01.db - dbid changed

        Datafile /mount/u01/oracle/TESTDB/data/temp01.db - dbid changed

        Control File /mount/u01/oracle/TESTDB/control/control01.ctl - dbid changed

        Control File /mount/u01/oracle/TESTDB/control/control02.ctl - dbid changed

        Control File /mount/u01/oracle/TESTDB/control/control03.ctl - dbid changed

        Instance shut down

    Database ID for database TESTDB changed
    to 3073734488.
    All previous backups and archived redo logs
    for this database are unusable.
    Database has been shutdown, 
    open
     database with RESETLOGS option.

    Succesfully changed database ID.
    DBNEWID - Completed succesfully.
  4. Una vez que termino la utileria, hay que abrir la base de datos en modo MOUNT

    oracle@localhost [TESTDB] /mount/oracle
    root $ sqlplus
    SQL*Plus: Release 11.2.0.2.0 Production on
    Mon Dec 13 07:39:28 2010

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

    Enter user-name: /as sysdba
    Connected to an idle instance.

    TESTDB >startup mount
    ORACLE instance started.

    Database mounted.
  5. Ahora tenemos que abrir la base de datos con la opcion RESETLOGS, es recomendable que despues de que la base de datos este abierta, tengamos que hacer un respaldo completo de nuestra base de datos.
    TESTDB >alter database open resetlogs;

    Database altered.
  6. Por ultimo, si quieres revisar el cambio del DBID puedes hacer el siguiente query
    TESTDB >select DBID,name from v$database;

          DBID NAME
    ---------- ---------------------------
    3073734488 TESTDB
Conclusion
Esta utileria de Oracle es muy util para cuando hemos clonado una BD via un respaldo caliente o frio que no fue con RMAN, ya que RMAN hace este paso de manera implicita. Lo unico es que es una utileria muy facil de usar pero a su vez muy peligrosa ya que nos puede dejar sin un respaldo util para nuestras BDs.