Skip to main content

Instalar Oracle 10g R2 en Mac OS X Intel

· 14 min read

A continuación se van a describir los pasos que se deben seguir para la instalación de Oracle 10g R2 en un Mac OS X Intel. Este post pretende complementar el manual de guía de Instalación de Oracle en Mac, con la identificación Part Number B25286-01.

En esta guía se indica que la instalación se debe hacer en Mac que sea Server; sin embargo se puede realizar instalaciones en versiones  no-Server.

También se han seguido, en cierto modo, lo indicado en los enlaces How to install Oracle Database 10g on Mac OS X Snow Leopard y en Quick Install Guide for Oracle 10g Release 2 on Mac OS X Leopard & Snow Leopard (Intel)

Se va a proceder a realizar la instalación de Oracle 10gR2 (10.2.04) en un MacBookPro con Snow Leopard, versión 10.6.8, procesador 2 Ghz Intel Core i7 y con 4Gb de memoria. La descarga del producto se realiza de la página oficial Oracle Database Software Downloads, en la cual, tras haber aceptado el acuerdo de licencia, seleccionaremos el enlace de la última versión de Oracle para, en nuestro caso Oracle Database 10g Release 2 (10.2.0.4) for MAC OS X on Intel x86-64. De esta página nos bajaremos el archivo db.zip

Tareas de preinstalación

Autenticarse como usuario root

Tras abrir un Terminal ejecutaremos el comando

# sudo -i

Comprobar los requerimientos de hardware

A continuación se muestran los comandos que se deben ejecutar y los datos obtenidos confirman que disponemos de los requisitos suficientes para continuar.

 # /usr/sbin/system_profiler SPHardwareDataType | grep Memory   
Memory: 4 GB
# df -h /
Filesystem Size Used Avail Capacity Mounted on
/dev/disk0s2 465Gi 39Gi 426Gi 9% /
# uname -p
i386

Comprobar los requirimientos de software

En primer lugar comprobamos nuestra versión de software

# sw_vers  
ProductName: Mac OS X
ProductVersion: 10.6.8
BuildVersion: 10K549

Como podemos observar, nuestro ordenador no es un Server, a pesar de lo cual vamos a proceder a la instalación.

Teniendo instalado XCode v3.0, comprobamos las versiones del compilador de C y la versión de java con los siguientes comandos:

 # gcc -v  
Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5666.3~6/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)

# java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)

Creación del usuario y grupos requeridos

Debemos crear los grupos oinstall, dba y oper, así como el usuario oracle. Previamente, comprobamos que no existen ejecutando los comandos que se detallan a continuación:

# dscl . -list /groups gid name | grep oinstall  
# dscl . -list /groups gid name | grep dba
# dscl . -list /groups gid name | grep oper
_developer 204
_lpoperator 100
operator 5
# dscl . -list /users uid name | grep oracle

Creamos el grupo oinstall ejecutando:

# dscl . -create /groups/oinstall  
# dscl . -append /groups/oinstall gid 1025
# dscl . -append /groups/oinstall passwd "*"
# dscl . -append /groups/oinstall realname "Oracle Inventory"

Seguidamente, creamos el grupo dba:

# dscl . -create /groups/dba  
# dscl . -append /groups/dba gid 1026
# dscl . -append /groups/dba passwd "*"
# dscl . -append /groups/dba realname "OSDBA" ```

Del mismo modo, procedemos con el grupo oper:

# dscl . -create /groups/oper  
# dscl . -append /groups/oper gid 1027
# dscl . -append /groups/oper passwd "*"
# dscl . -append /groups/oper realname "OSOPER"

Finalmente, creamos el usuario oracle:

# dscl . -create /users/oracle  
# dscl . -append /users/oracle uid 1025
# dscl . -append /users/oracle gid 1025
# dscl . -append /users/oracle shell /bin/bash
# dscl . -append /users/oracle home /Users/oracle
# dscl . -append /users/oracle realname "Oracle software owner"
# mkdir /Users/oracle
# chown oracle:oinstall /Users/oracle
# defaults write /Library/Preferences/com.apple.loginwindow HiddenUsersList -array-add oracle
# passwd oracle

En el último comando debemos introducir la contraseña del usuario oracle. Con el comando anterior indicamos que no presente el usuario oracle para hacer login el ventana inicial cuando se rearranque el ordenador.

Configuración de los parámetros del Kernel

Los valores recomendados en la guía para los parámetros del Kernel son:

kern.sysv.semmns=87381  
kern.sysv.semmni=87381
kern.sysv.semmnu=87381
kern.sysv.semume=10
kernel.shmall=2097152
kernel.sys.shmmax=2147483648 o valor de tamaño de SGA que se necesita en la base de datos
kernel.sys.shmmni=4096
kern.maxfiles=65536
kern.maxfilesperproc=65536
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65000
kern.corefile=core
kern.maxproc=2068
kern.maxprocperuid=2068

Realizamos la comprobación de los valores actuales de nuestro sistemas ejecutando los comandos siguientes:

# /usr/sbin/sysctl -a | grep sem  
# /usr/sbin/sysctl -a | grep shm
# /usr/sbin/sysctl -a | grep maxfiles
# /usr/sbin/sysctl -a | grep net.inet.ip.portrange
# /usr/sbin/sysctl -a | grep corefile
# /usr/sbin/sysctl -a | grep maxproc

Seguidamente, ejecutamos los comando necesarios para ajustar los parámetros de nuestro sistema a los recomendados.

# /usr/sbin/sysctl -w kern.sysv.shmall=2097152  
kern.sysv.shmall: 8192 -> 2097152
# /usr/sbin/sysctl -w kern.sysv.shmmax=536870912
kern.sysv.shmmax: 33554432 -> 536870912
# /usr/sbin/sysctl -w kern.maxfiles=65536
kern.maxfiles: 12288 -> 65536
# /usr/sbin/sysctl -w kern.maxfilesperproc=65536
kern.maxfilesperproc: 10240 -> 65536
# /usr/sbin/sysctl -w net.inet.ip.portrange.first=1024
net.inet.ip.portrange.first: 49152 -> 1024
# /usr/sbin/sysctl -w kern.maxfilesperproc=65536
kern.maxfilesperproc: 65536 -> 65536
# /usr/sbin/sysctl -w kern.maxproc=2068
kern.maxproc: 532 -> 2068
# /usr/sbin/sysctl -w kern.maxprocperuid=2068
kern.maxprocperuid: 266 -> 2068

Hemos puesto el tamaño de la SGA 512MB ya que va a ser una base de datos de desarrollo/programación y en ningún momento va a ser una base de datos de producción.

Creamos un archivo /etc/sysctl.conf con los parámetros que acabamos de modificar para que se mantengan en los próximos rearranques. Por seguridad hemos hecho una copia del anterior /etc/sysctl.conf.

Variables de entorno del oracle

Seguidamente, vamos a configurar las variables de entorno del usuario oracle, así como otros parámetros dentro de su .bash_profile.

Para ello, en primer lugar nos conectamos con el usuario oracle:

# su - oracle  

Editamos el archivo .bash_profile del siguiente modo:

export ORACLE_BASE=$HOME  
umask 022
ulimit -Hn 65536
ulimit -Sn 65536
export ORACLE_BASE=$HOME
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export DYLD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_SID=orcl
export ORACLE_HOSTNAME=localhost
PATH=$PATH:/$ORACLE_HOME/bin

Como se puede observar, hemos establecido el home de oracle en el directorio raíz del usuario oracle. En nuestro caso, el ordenador tiene activado el DHCP por lo que cada vez que se arranca puede tener diferente ip. Para evitar este contratiempo y ya que no necesitamos que nuestra base de datos sea accedida de forma fija por otros ordenadores en red, antes de proceder a la instalación establece la varaible ORACLE_HOME  a localhost.

Si salimos del usuario oracle y volvemos a entrar, comprobamos que efectivamente se han asignado correctamente las variables de entorno ORACLE_BASE, ORACLE_HOME, etc.

Creamos un directorio Install bajo el directorio del usuario oracle, donde copiaremos el archivo db.zip que hemos bajado de la web, y seguidamente procederemos a descomprimir el archivo.

mkdir Install  
cd Install
unzip db.zip
cd db/Disk1

Instalación

Para poder realizar la instalación de oracle es necesario asegurarse que tenemos activas las X11. Por ello es aconsejable, desde Aplicaciones > Utilidades > X11 tener activado la opción de "Permitir la conexión de otros clientes de la red".

Seguidamente, cerramos sesión y volvemos a logarnos con el usuario oracle. Al abrir un Terminal comprobamos que funciona el comando xclock. Esto nos asegura que tenemos activado los gráficos y se pueden abrir ventanas.

En la guía de instalación se indica de forma expresa que debemos tener la versión de java JDK 1.4.2_16. Como nuestra versión de java será superior, procederemos a crear un enlace soft con el siguiente comando:

sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0 /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2  

Desde el directorio de db/Disk1 ejecutaremos el comando

./runInstaller -J-d32  

Es necesario poner el parámetro -J-d32 para forzar a java que se ejecute en 32 bits debido a que algunas librerías nativas son de 32 bits.

Al ejecutar este comando hemos cumplimentado las ventanas que nos han ido apareciendo del siguiente modo

Pulsamos Aceptar y continuamos.

Cuando se produce el error de la ventana anterior, antes de proceder debemos editar el archivo ins_rdbms.mk, situado en /Users/oracle/product/10.2.0/db_1/rdbms/lib. Debemos comentar la línea que contiene HSODBC_LINKLINE, poniendo un # al principio. Hecho esto, seguimos el proceso pulsando en Reintentar.

En esta ventana se nos pide, antes de pulsar Aceptar, que ejecutemos una serie de archivos de comandos como root. En primer lugar ejecutamos

# sudo /Users/oracle/oraInventory/orainstRoot.sh  
Password:
Cambiando permisos de /Users/oracle/oraInventory a 770.
Cambiando el nombre de grupo de /Users/oracle/oraInventory a oinstall.
La ejecución del archivo de comandos ha terminado

A continuación, ejecutamos:

# sudo /Users/oracle/product/10.2.0/db_1/root.sh  
Running Oracle 10g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /Users/oracle/product/10.2.0/db_1
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.

Al pulsar Aceptar, obtenemos

Configuración del listener y creación de base de datos

Antes de proceder a la configuración de listener y de la creación de la base de datos es MUY importante ejecutar los siguientes comandos. Si no se ejecutan, en uno de los pasos de creación de la base de datos obtendremos errores de "end of channel communications", debido a que los ejecutables creados en tiempo de instalación no son los correctos. Básicamente, en los comandos siguientes lo que hacemos es poner un ejecutable que funciona correctamente en nuestra versión de Snown Leopard (realmente, se trata de un ejecutable compilado en la versión Leopard).

cd $ORACLE_HOME/bin  
curl -O http://rayapps.com/downloads/oracle_ee.zip
unzip oracle_ee.zip
chmod ug+s oracle
rm oracle_ee.zip

En los comandos anteriores hemos utilizado el archivo oracle_ee.zip porque estamos instalando la versión Enterprise Edition. Si estuviéramos instalando la verisón Standard Editions, deberíamos utilizar el archivo oracle_se.zip.

Es recomendable hacer una copia de seguridad del ejecutable de oracle que tengamos.

Es cierto que da un poco de respeto el hecho de utilizar un ejecutable obtenido de una web no "oficial", pero lo cierto es que funciona y no hay problemas de virus, ni nada por el estilo (al menos en el momento de escribir este post).

Antes de ejecutar los comandos para crear la base de datos y para  establecer las conexiones de red, también deberemos editar el script java situado en  $ORACLE_HOME/jdk/bin. En este archivo ponemos el parámetro -d32 antes de  -Xbootclasspath..., quedando algo similar a ...java -d32  -Xbootclasspath...

Configuración del listener

Para la configuración del listener, ejecutaremos netca.

$ netca  
Configuración de Servicios de Red de Oracle:
Configurando Listener:LISTENER
Configuración de la nomenclatura local por defecto terminada.
Configuración del listener terminada.
Inicio del Listener de Red de Oracle:
Ejecutando Control del Listener:
/Users/oracle/product/10.2.0/db_1/bin/lsnrctl start LISTENER
Control del Listener Terminado.
Listener iniciado correctamente.
Configuración de Servicios de Red de Oracle terminada por el usuario. El c?digo de salida es -1

Las ventanas que nos va apareciendo son las siguientes:

]

En el directorio /Users/oracle/product/10.2.0/db_1/network/admin podremos ver los archivos listener.ora y tnsnames.ora que se han creado en este proceso.

Creación de la base de datos

Para la creación de una base de datos con esquemas de ejemplo ejecutaremos el comando dbca.

No llegaremos a la siguiente ventana si antes de ejecutar dbca no hemos sustituido previamente el ejecutable de oracle, tal y como se ha explicado anteriormente.

Si nos interesa desbloquear otras cuentas más adelante, siempre lo podremos hacer ejecutando desde el sqlplus, por ejemplo, la sentencia:

alter user hr account unlock identified by hr;  

Arranque manual de la base de datos

Tras realizar la instalación la base de datos está arrancada y se pueden hacer pruebas. Sin embargo, si paramos el ordenador y rearrancamos veremos que la base de datos está parada. Para realizar el arranque automático se deben crear una serie de scripts que se encargan de esta operación. Estos scripts se pueden encontrar en varios sitios en internet, como puede ser en el enlace How to install Oracle Database 10g on Mac OS X Snow Leopard mecionado al principio de este post.

Sin embargo, nuestro propósito es arrancar normalmente la base de datos de forma manual, ya que lo tenemos instalado en un ordenador personal y no queremos que se consuman recursos innecesariamente si no utilizamos Oracle.

La primera vez que arranquemos de forma manual la base de datos lo podemos hacer ejecutando los siguientes comandos:

$ sqlplus sys as sysdba  
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Aug 16 21:43:27 2011
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Enter password:
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 612368384 bytes
Fixed Size 2085872 bytes
Variable Size 167775248 bytes
Database Buffers 436207616 bytes
Redo Buffers 6299648 bytes
Database mounted.
Database opened.

Para poder establecer la conectividad de red con la base de datos Oracle, es necesario arrancar el listener. El listener, por defecto, pone la dirección ip de nuestro ordenador como escucha. Sin embargo, en el proceso de instalación hemos indicado que sea localhost. Por ello debemos ejecutar los siguientes comandos cuando arrancamos la base de datos por primera vez:

SQL> show parameter listener  
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string
remote_listener string
SQL> alter system set local_listener='localhost';
System altered.
SQL> alter system register
2 ;
System altered.

Para comprobar que todo está correctamente configurado, procederemos a parar la base y seguidamente arrancar el listener, y a continuación a arrancar de nuevo la base de datos, pero esta vez con el comando dbstart. dbstart arranca automáticamente aquellas base de datos cuyo SID tiene puesto a Y en el archivo /etc/oratab. Por tanto, editaremos este archivo y sustituiremos el valor N de nuestra instancia orcl, por el valor Y al final de línea, tal y como se muestra a continuación:

nano /etc/oratab  
GNU nano 2.0.6 File: /etc/oratab Modified
#
# This file is used by ORACLE utilities. It is created by root.sh
# and updated by the Database Configuration Assistant when creating
# a database.
# A colon, ':', is used as the field terminator. A new line terminates
# the entry. Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
# $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively. The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
orcl:/Users/oracle/product/10.2.0/db_1:Y

Cierre de la base de datos:

SQL> shutdown  
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Arranque de listener:

$ lsnrctl start  
LSNRCTL for MacOS X Server: Version 10.2.0.4.0 - Production on 16-AUG-2011 22:05:51
Copyright (c) 1991, 2007, Oracle. All rights reserved.
Starting /Users/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for MacOS X Server: Version 10.2.0.4.0 - Production
System parameter file is /Users/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /Users/oracle/product/10.2.0/db_1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for MacOS X Server: Version 10.2.0.4.0 - Production
Start Date 16-AUG-2011 22:05:51
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /Users/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File /Users/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

Arranque de la base de datos con dbstart:

$ dbstart $ORACLE_HOME  
Processing Database instance "orcl": log file /Users/oracle/product/10.2.0/db_1/startup.log

Para parar la base de datos utilizaremos dbshut:

$ dbshut $ORACLE_HOME  
Processing Database instance "orcl": log file /Users/oracle/product/10.2.0/db_1/shutdown.log

Si por comodidad queremos evitarnos el poner $ORACLE_HOME detrás de dbstart y dbshut, debemos editar ambos scripts y sustituir la línea donde pone ORACLE_HOME_LISTNER=$1 con ORACLE_HOME_LISTNER=$ORACLE_HOME.