Examináis las Escrituras porque vosotros pensáis que en ellas tenéis vida eterna; y ellas son las que dan testimonio de mí; (Juan 5:39)
Tomado de:DiabloEnLosDetalles
Continuamos dotando de funcionalidad a nuestra Jaula Debian GNU/Linux recién instalada. Para ello me he decidido por instalar Oracle 11gR2 para Linux, por tratarse de uno de los paquetes de software mas exigentes que se pueden encontrar; me parece que es una buena forma de explorar los limites de la solución propuesta.
Otra motivación es el hecho de que en el Manual de FreeBSD el capítulo dedicado a la instalación de Oracle se refiere a la versión Oracle 8.0.5, que es bastante antigua, y esta circunstancia estimuló mi curiosidad.
Esta plataforma no resulta idónea para un entorno de producción ya que no está certificada por Oracle, lo cual no le resta utilidad como entorno de pruebas e incluso entorno de desarrollo para pequeños proyectos; depende de la aventurado que sea uno.
Las ventajas de emplear FreeBSD como infraestructura para entornos virtualizados son:
- Sistema de Ficheros ZFS.
- Pila de TCP/IP virtual.
- Seguridad de red con pf.
- Análisis de rendimiento con Dtrace.
Las ventajas de emplear Debian GNU/Linux dentro de una Jaula son:
- Debian GNU es una de las distribuciones Linux mas fiables y con un ciclo de lanzamiento de versiones muy previsible.
- Utilizar una distribución completa nos ahorra bastante trabajo a la hora de instalar Oracle.
- Disponer de documentación técnica actualizada.
Como no soy partidario de instalar entornos gráficos en los servidores, especialmente si tienen que dar soporte a un motor de bases de datos tan pesado como lo es Oracle, voy a realizar una instalación en modo texto, empleado un fichero de respuestas para el instalador de Oracle.
Tareas previas a la instalación de Oracle
En todas las instalaciones de la base de datos Oracle hay que preparar el S.O para que se puede instalar y ejecutar correctamente. Estas tareas previas son específicas de cada S.O y la versión de Oracle.
Tareas específicas en FreeBSD
Las siguientes tareas se deben ejecutar como root:
1.- Clonamos la Jaula deb-master previamente definida, utilizando la versión Lenny, para crear la Jaula debora:
root@morsa:/root # zfs clone fbsdzpool1/jailz/deb-master@deboostrap fbsdzpool1/jailz/debora
2.- Configuramos semáforos, memoria compartida y E/S asíncrona conforme a los requerimientos de Oracle 11gR2, para ello editamos /boot/loader.conf y /etc/sysctl.conf.
// Comienza el fragmento de /boot/loader.conf
kern.ipc.shmmni=4096kern.ipc.semmns=32000kern.ipc.semmni=128aio_load="YES"
// Fin del fragmento de /boot/loader.conf
// Comienza el fragmento de /etc/sysctl.conf
security.jail.sysvipc_allowed=1kern.ipc.shmall=2097152kern.ipc.shmseg=128kern.ipc.shmmin=1kern.ipc.shmmax=1073741824kern.ipc.semaem=16384kern.ipc.semvmx=32767kern.ipc.semusz=632kern.ipc.semume=50kern.ipc.semopm=100kern.ipc.semmsl=340kern.ipc.semmnu=150
// Fin del fragmento de /etc/sysctl.conf
3.- Habilitamos la memoria compartida en la Jaula debora.
// Comienza fragmento de /jailz/etc/jail.conf
debora {path = /jailz/debora;allow.mount;allow.sysvipc;host.hostname = debora;mount.devfs;mount.fstab="/jailz/etc/fstab.debora";ip4.addr = 127.0.0.25;interface = lo0;exec.start = "/etc/init.d/rc 3";exec.stop = "/etc/init.d/rc 0";}
// Fin del fragmento de /jailz/etc/jail.conf
4.- Iniciamos la jaula y nos conectamos a ella.
root@morsa:/root # jail -f /jailz/etc/jail.conf -c deboradebora: createdStarting periodic command scheduler: crond.root@morsa:/root # jlsJID IP Address Hostname Path1 127.0.0.25 debora /jailz/deboraroot@morsa:/root # jexec 1 /bin/bashdebora:/# uname -aLinux debora 2.6.16 FreeBSD 9.1-RELEASE-p4 #0: Mon Jun 17 11:42:37 UTC 2013 i686GNU/Linux
Tareas específicas en Debian
Los siguientes pasos se ejecutan dentro de la Jaula debora como usuario root:
5 .- Instalamos los paquetes requeridos para Oracle 11gR2 en Debian:
debora:/# apt-get install gcc make binutils lesstif2 rpm libaio1 libdb4.6 libstdc++5 unzip openjdk-6-jdk
Nota: El paquete openjdk-6-jdk se instala para disponer un entorno jre alternativo al proporcionado por el instalador de Oracle.
6.- Creamos los siguientes enlaces simbólicos:
debora:/# ln -s /usr/bin/awk /bin/awkdebora:/# ln -s /usr/bin/rpm /bin/rpmdebora:/# ln -s /usr/bin/basename /bin/basename
7.- Creamos los grupos y usuarios dba, oinstall y oracle.
debora:/# groupadd oinstall -g 1000debora:/# groupadd dba -g 1001debora:/# useradd -m -g oinstall -G dba -p passwd -s /bin/bash -d /home/oracle -u 1000 oracledebora:/# passwd oracle
Enter new UNIX password:Retype new UNIX password:passwd: password updated successfully
8.- Creamos los directorios para el sofware y la base de datos y les asignamos como propietario el usuario oracle.
debora:/# mkdir -p /oracle/product/11.2.0debora:/# mkdir -p /oracle/admin/ORATEST/createdebora:/# mkdir /oracle/admin/ORATEST/adumpdebora:/# mkdir /oracle/admin/ORATEST/logbookdebora:/# mkdir /oracle/oraInventorydebora:/# mkdir /oracle/oradatadebora:/# mkdir /oracle/flash_recovery_areadebora:/# chown oracle.oinstall /oracledebora:/# chown -R oracle.oinstall /oracle/productdebora:/# chown oracle.oinstall /oracle/oraInventorydebora:/# chown -R oracle.dba /oracle/admindebora:/# chown oracle.dba /oracle/oradatadebora:/# chown oracle.dba /oracle/flash_recovery_area
9.- Añadimos el nombre de host al fichero /etc/hosts.
debora:/# echo '127.0.0.25 debora' >> /etc/hosts
10.- Creamos el archivo /etc/oraInst.loc y le asignamos como propietario al usuario oracle:
// Comienza /etc/oraInst.loc
inventory_loc=/oracle/oraInventoryinst_group=oinstall
// Fin de /etc/oraInst.loc
debora:/# chown oracle.oinstall /etc/oraInst.loc
Instalación del Software de Oracle
Los siguientes pasos se ejecutan dentro de la Jaula debora bajo el usuario oracle:
11.- Cambiamos el usuario root a oracle.
debora:/# su - oracle
oracle@debora:~$ iduid=1000(oracle) gid=1000(oinstall) groups=1000(oinstall),1001(dba)oracle@debora:~$
12.- Copiamos al directorio /oracle (por ejemplo) los ficheroslinux_11gR2_database_1of2.zip y linux_11gR2_database_2of2.zip que contienen el instalador y los descomprimimos:
oracle@debora:/oracle $ unzip linux_11gR2_database_1of2.ziporacle@debora:/oracle $ unzip linux_11gR2_database_2of2.zip
13.- Para realizar la instalación desatendida creamos el fichero de respuestas/oracle/database/response/install_debora.rsp. Están marcados en negrita los valores que puede resultar útil modificar, el resto del fichero debe dejarse inalterado, pues esta versión del instalador es problemática y este es el formato que debe mantener el fichero de respuestas.
// Comienza el fichero install_debora.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0oracle.install.option=INSTALL_DB_SWONLYORACLE_HOSTNAME=deboraUNIX_GROUP_NAME=oinstallINVENTORY_LOCATION=/oracle/oraInventorySELECTED_LANGUAGES=enORACLE_HOME=/oracle/product/11.2.0ORACLE_BASE=/oracleoracle.install.db.InstallEdition=SEoracle.install.db.isCustomInstall=falseoracle.install.db.customComponents=oracle.install.db.DBA_GROUP=dbaoracle.install.db.OPER_GROUP=dbaoracle.install.db.CLUSTER_NODES=oracle.install.db.config.starterdb.type=GENERAL_PURPOSEoracle.install.db.config.starterdb.globalDBName=oracle.install.db.config.starterdb.SID=oracle.install.db.config.starterdb.characterSet=AL32UTF8oracle.install.db.config.starterdb.memoryOption=falseoracle.install.db.config.starterdb.memoryLimit=oracle.install.db.config.starterdb.installExampleSchemas=falseoracle.install.db.config.starterdb.enableSecuritySettings=trueoracle.install.db.config.starterdb.password.ALL=oracle.install.db.config.starterdb.password.SYS=oracle.install.db.config.starterdb.password.SYSTEM=oracle.install.db.config.starterdb.password.SYSMAN=oracle.install.db.config.starterdb.password.DBSNMP=oracle.install.db.config.starterdb.control=DB_CONTROLoracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=oracle.install.db.config.starterdb.dbcontrol.enableEmailNotification=falseoracle.install.db.config.starterdb.dbcontrol.emailAddress=oracle.install.db.config.starterdb.dbcontrol.SMTPServer=oracle.install.db.config.starterdb.automatedBackup.enable=falseoracle.install.db.config.starterdb.automatedBackup.osuid=oracle.install.db.config.starterdb.automatedBackup.ospwd=oracle.install.db.config.starterdb.storageType=oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=oracle.install.db.config.asm.diskGroup=oracle.install.db.config.asm.ASMSNMPPassword=MYORACLESUPPORT_USERNAME=username@mailaddress.comMYORACLESUPPORT_PASSWORD=SECURITY_UPDATES_VIA_MYORACLESUPPORT=falseDECLINE_SECURITY_UPDATES=truePROXY_HOST=PROXY_PORT=PROXY_USER=PROXY_PWD=
// Fin del fichero install_debora.rsp
14.- Ejecutamos el instalador con las opciones indicadas tal y como están:
oracle@debora:~$ /oracle/database/runInstaller -silent -ignorePrereq -jreloc /usr/lib/jvm/java-6-openjdk -responseFile /oracle/database/response/install_debora.rspStarting Oracle Universal Installer...Checking Temp space: must be greater than 80 MB. Actual -2147483648 MB PassedChecking swap space: must be greater than 150 MB. Actual 4096 MB PassedPreparing to launch Oracle Universal Installer from /tmp/OraInstall2013-09-01_08-30-45PM. Please wait ...[WARNING] [INS-32055] The Central Inventory is located in the Oracle base.CAUSE: The Central Inventory is located in the Oracle base.ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory.[WARNING] [INS-32055] The Central Inventory is located in the Oracle base.CAUSE: The Central Inventory is located in the Oracle base.ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory.You can find the log of this install session at:/oracle/oraInventory/logs/installActions2013-09-01_08-30-45PM.log
The following configuration scripts need to be executed as the "root" user.#!/bin/sh#Root scripts to run/oracle/oraInventory/orainstRoot.sh/oracle/product/11.2.0/root.shTo execute the configuration scripts:1. Open a terminal window2. Log in as "root"3. Run the scripts4. Return to this window and hit "Enter" key to continueSuccessfully Setup Software.
15.- Revisamos los logs del instalador.
debora:~# tail -10 /oracle/oraInventory/logs/installActions2013-09-01_08-30-45PM.logINFO: Validating state <finish>WARNING: Validation disabled for the state finishINFO: Completed validating state <finish>INFO: Terminating all background operationsINFO: Terminated all background operationsINFO: Successfully executed the flow in SILENT modeINFO: Finding the most appropriate exit status for the current applicationINFO: Exit Status is 0INFO: Shutdown Oracle Database 11g Release 2 InstallerINFO: Unloading Setup Driver
16.- Si la instalación ha sido correcta, ejecutamos como usuario root los scriptsorainstRoot.sh y root.sh :
oracle@debora:~$ logoutdebora:~# iduid=0(root) gid=0(root) groups=5(tty)debora:~# /oracle/oraInventory/orainstRoot.shChanging permissions of /oracle/oraInventory.Adding read,write permissions for group.Removing read,write,execute permissions for world.Changing groupname of /oracle/oraInventory to oinstall.The execution of the script is complete.debora:~# /oracle/product/11.2.0/root.shCheck /oracle/product/11.2.0/install/root_debora_2013-09-01_20-39-01.log for theoutput of root scriptdebora:~# more /oracle/product/11.2.0/install/root_debora_2013-09-01_20-39-01.logRunning Oracle 11g root.sh script...The following environment variables are set as:ORACLE_OWNER= oracleORACLE_HOME= /oracle/product/11.2.0Creating /etc/oratab file...Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is createdFinished running generic part of root.sh script.Now product-specific root actions will be performed.Finished product-specific root actions.
Creación de una base de datos de Pruebas
Antes de crear una base de datos necesitamos un fichero de parámetros init.ora y un script con los comandos SQL que ejecutan la creación de la base de datos.
17.- Creamos el fichero /oracle/admin/ORATEST/create/initORATEST.ora:
// Comienza el fichero initORATEST.ora
db_name='ORATEST'db_domain=''sga_target=512Msga_max_size=1Gpga_aggregate_target=1Gprocesses = 150audit_trail ='db'db_block_size=8192db_recovery_file_dest='/oracle/flash_recovery_area'db_recovery_file_dest_size=2Gdiagnostic_dest='/oracle/'#dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'open_cursors=300remote_login_passwordfile='EXCLUSIVE'undo_tablespace='UNDOTBS1'compatible ='11.2.0'db_create_file_dest='/oracle/oradata'filesystemio_options = SETALLdisk_asynch_io = TRUE
// Fin del fichero initORATEST.ora
18.- Creamos los ficheros /oracle/admin/ORATEST/create/ORATEST.sh y/oracle/admin/ORATEST/create/cr_ORATEST.sh:
// Comienza el fichero ORATEST.sh
ORACLE_HOME=/oracle/product/11.2.0
ORACLE_SID=ORATEST
NLS_LANG=American_america.WE8ISO8859P15
ORA_NLS11=${ORACLE_HOME}/nls/data
PATH=$PATH:$ORACLE_HOME/bin
export PATH
export ORACLE_BASE
export ORACLE_HOME
export ORACLE_SID
export NLS_LANG
export ORA_NLS33
// Fin del fichero ORATEST.sh
// Comienza el fichero cr_ORATEST.sh
#!/bin/bash
. ./ORATEST.sh
rm ${ORACLE_HOME}/dbs/orapw${ORACLE_SID}
orapwd file=${ORACLE_HOME}/dbs/orapw${ORACLE_SID} password=diablo entries=2
rm -r /oracle/oradata/${ORACLE_SID}
sqlplus /nolog << EOF
spool ../logbook/cr_${ORACLE_SID}.log
conn / as sysdba;
CREATE SPFILE
FROM PFILE='/oracle/admin/${ORACLE_SID}/create/init${ORACLE_SID}.ora';
DISCONNECT;
conn / as sysdba;
STARTUP NOMOUNT;
CREATE DATABASE ${ORACLE_SID}
CHARACTER SET WE8ISO8859P15
NATIONAL CHARACTER SET UTF8
USER SYS IDENTIFIED BY diablo
USER SYSTEM IDENTIFIED BY diablo
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
DEFAULT TABLESPACE users;
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/sqlplus/admin/pupbld.sql
SHUTDOWN IMMEDIATE;
EXIT
spool off
EOF
// Fin del fichero cr_ORATEST.sh
19.- Concedemos a los scripts los permisos de ejecución:
oracle@debora:/oracle/admin/ORATEST/create$ chmod 750 *.shoracle@debora:/oracle/admin/ORATEST/create$ ls -latotal 31drwxr-xr-x 2 oracle dba 5 Sep 1 21:04 .drwxr-xr-x 5 oracle dba 5 Sep 1 20:11 ..-rwxr-x--- 1 oracle dba 258 Sep 1 21:02 ORATEST.sh-rwxr-x--- 1 oracle dba 782 Sep 1 21:04 cr_ORATEST.sh-rw-r--r-- 1 oracle dba 490 Sep 1 21:01 initORATEST.ora
20.- Iniciamos la creación de la base de datos:
oracle@debora:/oracle/admin/ORATEST/create$ nohup ./cr_ORATEST.sh &
21.- Comprobamos que la creación de la base de datos a concluido correctamente:
oracle@debora:/oracle/admin/ORATEST/create$ tail -10 nohup.outSQL> CREATE PUBLIC SYNONYM PRODUCT_USER_PROFILE FOR SYSTEM.PRODUCT_PRIVS;Synonym created.SQL>SQL> -- End of pupbld.sqlSQL> SQL> Database closed.Database dismounted.ORACLE instance shut down.SQL> SQL> Disconnected from Oracle Database 11g Release 11.2.0.1.0 - Production
22.- Arrancamos la base de datos y nos conectamos.
oracle@debora:/oracle/admin/ORATEST/create$ . ./ORATEST.shoracle@debora:/oracle/admin/ORATEST/create$ sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on Sun Sep 1 22:09:58 2013Copyright (c) 1982, 2009, Oracle. All rights reserved.SQL> conn / as sysdba;Connected to an idle instance.SQL> startup;ORACLE instance started.Total System Global Area 1071333376 bytesFixed Size 1341312 bytesVariable Size 750782592 bytesDatabase Buffers 314572800 bytesRedo Buffers 4636672 bytesDatabase mounted.Database opened.SQL>SQL> select * from v$instance;INSTANCE_NUMBER INSTANCE_NAME--------------- ----------------HOST_NAME----------------------------------------------------------------VERSION STARTUP_T STATUS PAR THREAD# ARCHIVE LOG_SWITCH_WAIT----------------- --------- ------------ --- ---------- ------- ---------------LOGINS SHU DATABASE_STATUS INSTANCE_ROLE ACTIVE_ST BLO---------- --- ----------------- ------------------ --------- ---1 ORATESTdebora11.2.0.1.0 01-SEP-13 OPEN NO 1 STOPPEDALLOWED NO ACTIVE PRIMARY_INSTANCE NORMAL NOSQL> !uname -aLinux debora 2.6.16 FreeBSD 9.1-RELEASE-p4 #0: Mon Jun 17 11:42:37 UTC 2013 i686GNU/LinuxSQL>
Conseguido.
![]() |
Oracle 11gR2 ejecutándose en FreeBSD 9 |
23.- Paramos la base de datos ORATEST.
SQL> SHUTDOWN IMMEDIATE;Database closed.Database dismounted.ORACLE instance shut down.SQL> SQL> Disconnected from Oracle Database 11g Release 11.2.0.1.0 - Production
24.- Paramos la jaula debora.
root@morsa:/root # jail -f /jailz/etc/jail.conf -r deboraUsing makefile-style concurrent boot in runlevel 0.Stopping device state change daemon: devd.Asking all remaining processes to terminate...done.All processes ended within 1 seconds....done.Stopping enhanced syslogd: rsyslogd./etc/init.d/umountnfs.sh: 106: cannot open /etc/mtab: No such fileDeconfiguring network interfaces...done.Cleaning up ifupdown....done.Deactivating swap...done.mount: /: unknown special file or file systemWill now halt.ifdown: shutdown usbus0: Operation not permittedifdown: shutdown ath0: Operation not permittedifdown: shutdown usbus1: Operation not permittedifdown: shutdown lo0: Operation not permittedifdown: shutdown wlan0: Operation not permittedstartpar: service(s) returned failure: umountnfs.sh ... failed!deb-master: removed
23.- Hacemos un snapshot de la jaula debora para así disponer de una plantilla de unajaula configurada para bases de datos Oracle.
root@morsa:/root # zfs snapshot fbsdzpool1/jailz/debora@oracle11gR2
Consideraciones finales
La decisión de instalar en la Jaula la versión Lenny de Debian GNU/Linux está motivada por dos razones; por una parte, la versión de kernel de Linux que requiere el instalador de Oracle como requisito previo es la 2.6.9 y por otro lado la versión de kernel mínima para squeeze es la 2.6.18, que es superior a la admitida por el módulo de compatibilidad para Linux de FreeBSD 9.
// Comienza el fragmento de installActions.log
INFO: *********************************************INFO: OS Kernel Version: This is a prerequisite condition to test whether the system kernel version is at least "2.6.9".INFO: Severity:CRITICALINFO: OverallStatus:SUCCESSFULINFO: -----------------------------------------------INFO: Verification Result for Node:deboraINFO: Expected Value:2.6.9INFO: Actual Value:2.6.16INFO: -----------------------------------------------INFO: *********************************************
// Fin del fragmento de installActions.log
Durante el desarrollo de este Post, detecté un problema durante la ejecución del Instalador de Oracle, que de forma aleatoria fallaba en en arranque inicial. Una manera de evitar este problema consiste en utilizar un jre alternativo al suministrado con el instalador.
No he podido configurar la gestión automática de memoria (AMM) que es una de la nuevas características introducidas en la versión 11g. Esto es así por que no he conseguido configurar el dispositivo /dev/shm dentro de la Jaula.
En consecuencia, no queda mas remedio que emplear la gestión automática de memoria compartida (ASMM) dando valores a los parámetros SGA_TARGET y SGA_MAX_SIZE en el fichero initORATEST.ora.
El sistema de ficheros ZFS sobre el que se ha creado la base de datos no está optimizado para los ficheros de la base de datos, es un aspecto que debe mejorarse para un uso más intenso de la base de datos.
No hay comentarios:
Publicar un comentario