Oracle XE en Ubuntu Jaunty Jackalope
Como parte de mi puesta a punto de un ambiente de desarrollo Java en Linux, instalé Oracle XE. Aquí una crónica de lo ocurrido. Después de varios meses, inicié sesión nuevamente en Ubuntu 8.10 (Intrepid Ibex), el cual notó el atraso en las actualizaciones y ofreció actualizar a 9.04, como acababa de hacer un full-backup, acepté. La actualización tomó muy poco tiempo y ocurrió de una manera bellísima. Descargué Oracle XE para Linux en formato de paquete Debian desde el sitio OTN y procedí a instalar sin leer el maldito manual (RTFM). Algo salió mal y desinstalé sin leer el maldito manual (RTFM). Repetí un par de veces todo el proceso y algo más salió peor y provoqué inconsistencias en los conffiles. Me cansé de usar sudo, cambié a root, limpié el desastre a mano hasta que conseguí lo siguiente:
Una vez que casi no había trazas de mis tonterías anteriores, pues ahora sí comencé la instalación una vez mas, esta vez como root:
No quise meterme en problemas, así que acepté los valores por omisión:
La maldita cosa funcionó a la primera. Considerando que se trata de Oracle sobre un sistema POSIX, tampoco lo podía creer: una instalación mayormente sin problemas (una vez que lo hice de esta manera) al final de la cual ahí estaban: el SGA de Oracle y el listener levantaditos los dos:
Oracle XE proporciona inclusive el script requerido para configurar el ambiente de manera adecuada, mismo que agregué a mi script de inicio.
Coloqué un viejo script SQL para cambiar el prompt de sqlplus y para el cual requiero la variable SQLPATH que no es definida por el script de Oracle (a partir de 10g, hay mejores maneras de cambiar el prompt, además de ser más confiable, mi script no aguanta, o lo que es peor, proporciona un prompt incorrecto si desde dentro del shell sqlplus me conecto a otra instancia en otro nodo, pero esa es otra historia)
Actualicé mi entorno, y me preocupó ver que no se encontraron un par de scripts
Había llegado el momento de la verdad para probar la instancia de ejemplo HR:
¡Ugh! Primero hay que desbloquear el usuario y al mismo tiempo otorgarle una contraseña, en este caso "mi_password":
La prueba final para comprobar que la instancia HR está corriendo y tengo acceso a ella, es preguntar por las tablas a las que tengo acceso, deben ser las de la base de datos de recursos humanos que se instala por omisión:
Sabiendo que la comunicación con la base de datos por medio de pipes funciona a la perfección, faltaba probar la conectiviad por medio del listener:
¡Bien! En tanto especifique adecuadamente los parámetros de conexión en JDBC, no tendré problema para conextar con mi nueva instancia. Ahora sí, a cambiar el puerto del servidor web para no ocasionar conflictos con Tomcat et al.
Para que todo quedara muy bonito, modifiqué el valor del puerto HTTP en el siguiente script, con lo cual el acceso desde el ambiente gráfico se dirija al nuevo URL de entrada de Oracle Express http://127.0.0.1:8000/apex/
A continuación, afiné la memoria utilizada por el servidor de base de datos. Oracle siempre usará tanta RAM como pueda encontar, en el caso de Oracle XE está limitado a un máximo de 1GB, lo cual en mi caso es excesivo para una máquina de desarrollo.
Como puede verse, de cuaerdo con
, Linux ve en mi máquina alrededor de 3.5GB, y
me reporta que Oracle utiliza cerca de 800 MB, sumando la memoria del servidor en sí mismo más el listener (recuérdese que aunque se vean varios procesos, todos ellos comparten la misma memoria)
¡Uf! Ahí están mis 800MB. Le diremos a Oracle que no vive solo en esta máquina, y que trate de conformarse con 256 MB y que no use más de 448MB de RAM
Salimos de sqlplus, reiniciamos Oracle y consultamos el resultado desde bash:
Todavía falta personalizar SQL*Plus (sqlplus), para mi lo más importante es que funcione igual que en Windows, es decir, que al pulsar la flecha arriba muestre la historia de comandos tecleados. Para ellos utilizo rlwrap, pero este procedimiento no lo detallaré aquí. más bien haré una última prueba con Java 6, que permite no especificar el nombre del driver JDBC en el código, para lo cual utilicé el JAR de JDBC de Oracle con soporte para Java 6, que ya trae un archivito especial dentro del JAR con el nombre del driver (META-INF/services/java.sql.Driver). El SID o nombre de instancia es XE.
La documentación de Oracle para la instalación:
Aquí hay otra entrada de blog equivalente a esta, hay pequeñas diferencias en el procedimiento debidas principalmente a preferencias personales, mismas que me llevaron a publicar aquí mi memoria de instalación, pero les paso el vínculo:
Javier Castañón
gqlplus
personalmente no sobreviviría en la consola con el sqlplus "pelón", casi casi lo odio.
Existen por ai' varios wrappers para sqlplus, de los cuales yo me quedo con gqlplus.
"gqlplus is a drop-in replacement for sqlplus, an Oracle SQL client, for UNIX and UNIX-like platforms. The difference between gqlplus and sqlplus is command-line editing and history, plus table-name and column-name completion. As you know if you have used sqlplus, it is notoriously difficult to correct typing errors and other mistakes in your SQL statements. sqlplus does give you ability to use external editor to edit a statement, but only the last statement you typed..."
La belleza de los sistemas
La belleza de los sistemas Debian-based!! Apt es la mera onda :-)
Espero que funcione igual en Debian Lenny.
--
Javier Benek
sqlplus
No uso extensivamente SQL*Plus, pero me gusta tenerlo a mano para establecer una conexión rápida a la base de datos y emitir algunos comandos. También, como en este caso, para copiar su salida e intercambiarla por correo. Para lo demás, uso ToRA o SQL Developer.
Saludos
Gallina
Justo después de que ejecutas el comando
Tienes que matar una gallina negra y derramar su sangre sobre el disco duro, o si no después no vas a poder agregar tablespaces nuevos con volúmenes virtuales.
Ya en serio, la neta qué buena guía, porque echar Oracle a andar es de las cosas más cercanas a magia negra que he visto (después de configurar sendmail editando los puros archivos de texto, o un DNS también con puros archivos de texto, para mover los registros MX que también tienen que ver con mail).
Gallina: ROTFL
Estimado ezamudio, la intención del blog era mostrar lo fácil que es actualmente configurar Oracle XE para desarrollo. Obviamente {Oracle|yo} {ha|he} fracasado :-S
Pero en realidad me dejó sorprendido Oracle con esta instalación, no lo esperaba de los creadores del infame Universal Installer. Tal vez la memoria me falle, pero fue hace casi 10 años cuando instalé por primera vez Oracle 8.0 en Linux basado en la versión original de este how-to:
La pieza original contenía una parte que decía "be prepared, very prepared" y a Dios gracias, no habían inventado el instalador gráfico universal.
Aunque el HOWTO afirme no soportar versiones anteriores a RedHat 6.0 ni Oracle 8.1.6, estoy seguro que sus primeras versiones sí lo hacía, pues fue la primera vez que tuve que recompilar un kernel [3], el cual estoy casi seguro era 2.0 pues no recuerdo haber usado RPMs y además trabajé mucho con RedHat 5.x [1]. Además, el Oracle que instalamos no incluía un servidor Apache ni JVM en la panza [2], por lo tanto era 8.0 y no 8i. Y por último, la instalación se realizó con éxito y por supuesto que yo era (y sigo siendo) lo suficientemente wey como para seguir requiriendo llantas para nadar. Me apoyé más en el HOWTO que en la documentación de Oracle.
Sendmail nunca he tenido el valor de configurar uno, eso si es vudú: difícil e inseguro. Claro, mi doble moral me permitía instalar WU-FTP. Y con respecto a DNS, los archivos de BIND 8 ya eran muy amigables, por la dificultad imagino te referirás a los de BIND 4.x.
A fines del año pasado tiré a la basura todos los HOWTOs impresos que tenía de ese tiempo. No lo debí haber hecho, formaban parte de mis memorias. Snif.
Saludos afectuosos (me has hecho tener muchas remembranzas)
Javier Castañón
[1] Nota para los chavitos: nada que ver con RHEL 5.x, estamos hablando de mediados de 1999
[2] Por cierto, Oracle XE sólo trae el Apache, no trae la JVM, ni se le puede instalar una para crear procedimientos almacenados en Java.
[3] O si acaso la segunda vez que recompilaba un kernel Linux, la primera tal vez fue para cambiar el string que devolvía la identificación de la versión del servidor, pero no me queda claro si fue un Linux, un apache o quizá un BIND. Ya sabes, para distraer a los maldosos, hazme el fav.. cab..