Instalación de oracle en GNU/Linux Debian o Ubuntu. 5 de diciembre de 2007 Copyright (c) 2007 Santa. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Section being Agradecimientos, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is avaliable at http://www.gnu.org/licenses/fdl.html Para erratas, sugerencias, consejos, insultos: panfaust@nospam.org, cambia nospam por gmail. 1. Qué es Oracle? Oracle es un DBMS, como también lo es MySQL, que a diferencia del primero es libre, sin embargo en la FIC se utiliza el Oracle. 2. Antes de empezar Este pequeño manual indica como instalar oracle en cualquier distribución basada en Debian que tenga disponible un paquete llamado libc6 con una versión mayor o igual a la 2.3.2. Y sí, lector, es el caso de ubuntu gutsy gibbon. El que escribe esto sin embargo, ahora mismo está usando Debian etch (la versión estable en este momento). Para los más despitados, aclarar que en las siguientes explicaciones, ciertas cosas que hay que hacer requieren privilegios de root, para ejecutar un comando como root en ubuntu se hace así en el terminal: $ sudo apt-get install oracle-xe 1
En otros sistemas lo normal es teclear el comando su y a continuación lo que queramos, sería lo mismo que si hacemos en ubuntu sudo su. Por lo tanto cuando haya que ejecutar un comando como root que cada cual lo haga según el sistema que tenga. No se ofenda, no creo que necesite estas estúpidas explicaciones, es sólo por si acaso. Por si acaso el lector no conoce el fichero /etc/apt/sources.list explicaré brevemente lo que es: es un fichero donde se almacenan urls que indican de donde se descargan los paquetes (ficheros.deb) para instalar los programas. Como el oracle no viene en los repositorios que trae debian/ubuntu debemos añadirlos a mano, así que hay que añadir la siguiente línea al /etc/apt/sources.list: deb http://oss.oracle.com/debian unstable main non-free Para ello, hay que ser root y abrirlo con un editor de texto, como habrá supuesto el lince del lector. 3. Instalación. Una vez añadida la línea al sources.list deb http://oss.oracle.com/debian unstable main non-free Hacemos apt-get update para actualizar el cache del apt, si aparece un mensaje como este: W: GPG error: http://oss.oracle.com unstable Release: Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 2E2BCDBCB38A8516} W: Tal vez quiera ejecutar apt-get update para corregir estos problemas No le vamos a hacer caso. A continuación podemos hacer como root apt-get install oracle-xe o bienapt-get install oracle-xe-universal. Aviso: El tamaño de los paquetes es del orden de 400 MB, aproveche para ir al baño. Otra cosa, el oracle pide swap de al menos 1009 MB, compruebe que dispone de suficiente swap. 4. Configuración posterior a la instalación. El lector, que seguramente estuvo observando el terminal como un halcón durante la descarga y configuración de los paquetes se habrá fijado en esto: You must run /etc/init.d/oracle-xe configure as the root user to configure the database. 2
Así que ejecutamos ese script. Nos manda contestar a varias preguntas, pulsamos enter para que asuma las respuestas por defecto. También nos manda introducir la contraseña del administrador de la BDD, como el lector ya sabrá ni palabras susceptibles de estar en una lista, ni exclusivamente números, ni el propio login ni estupideces por el estilo, y no, nunca piense Para qué? Si nadie va a.... Se equivoca, por cada pardillo que piensa nadie va a... hay otras cien personas que van a... Y dicha esta obviedad pongo el resultado de ejecutar el script, paciencia, después de responder a las preguntas el script tarda un poco en hacer sus cosas. # /etc/init.d/oracle-xe configure Oracle Database 10g Express Edition Configuration ------------------------------------------------- This will configure on-boot properties of Oracle Database 10g Express Edition. The following questions will determine whether the database should be starting upon system boot, the ports it will use, and the passwords that will be used for database accounts. Press <Enter> to accept the defaults. Ctrl-C will abort. Specify the HTTP port that will be used for Oracle Application Express [8080]: Specify a port that will be used for the database listener [1521]: Specify a password to be used for database accounts. Note that the same password will be used for SYS and SYSTEM. Oracle recommends the use of different passwords for each database account. This can be done after initial configuration: Confirm the password: Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]: Starting Oracle Net Listener...Done Configuring Database...Done Starting Oracle Database 10g Express Edition Instance...Done Installation Completed Successfully. To access the Database Home Page go to "http://127.0.0.1:8080/apex" Bien, una vez ejecutado el script, los más impacientes ya habrán notado que tecleando sqlplus el intérprete de comandos dice que no encuentra el 3
comando. Esto es porque no tenemos la variable de entorno PATH. Para solucionar el problema añadimos la siguiente línea al.bashrc: source /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle env.sh De esta manera poemos ejecutar sqplus desde línea de comandos. 5. Creación de las tablas utilizadas en las prácticas de la fic. En el oracle de la fic, hay un usuario por defecto de nombre scott y contraseña tiger, este es un usuario que viene por defecto en bastantes versiones de oracle. AVISO: Aunque en los ejemplos de esta sección se utilice el usuario scott con contraseña tiger, no sea estúpido, no cree un usuario que se llame así y con esa contraseña por motivos evidentes de seguridad. Bien, pues lo primero es crear el mítico usuario scott con el que vamos a crear las tablas para la docencia. Para ello ejecutamos sqlplus y entramos con nombre de usuario system y de contraseña la que indicamos en el script de configuración. Una vez dentro disponemos del siguiente comando para crear un usuario: CREATE USER usuario INDENTIFIED {BY contrase~na EXTERNALLY}; Podemos hacerlo así: santa@mateo:~$ sqlplus SQL*Plus: Release 10.2.0.1.0 - Production on Jue Nov 29 19:20:07 2007 Copyright (c) 1982, 2005, Oracle. All rights reserved. Introduzca el nombre de usuario: system Introduzca la contrase~na: Conectado a: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production SQL> CREATE USER scott IDENTIFIED BY tiger; Usuario creado. SQL> Una vez creado debemos darle permisos para conectarse, crear y leer tablas: 4
SQL> GRANT CONNECT,RESOURCE TO scott; Concesión terminada correctamente. Salimos tecleando quit. Ahora necesitamos el fichero que crea las tablas que vamos a llamar bd docencia.sql: CREATE TABLE dept ( deptno numeric(2,0) NOT NULL, dname character varying(14), loc character varying(13), CONSTRAINT dept_pkey PRIMARY KEY (deptno) ); CREATE TABLE emp ( empno numeric(4,0) NOT NULL, ename character varying(10), job character varying(9), mgr numeric(4,0), hiredate date, sal numeric(7,2), comm numeric(7,2), deptno numeric(2,0), CONSTRAINT emp_pkey PRIMARY KEY (empno), CONSTRAINT emp_deptno_fkey FOREIGN KEY (deptno) REFERENCES dept(deptno), CONSTRAINT emp_mgr_fkey FOREIGN KEY (mgr) REFERENCES emp(empno) ); VALUES (10, ACCOUNTING, NEW YORK ); VALUES (20, RESEARCH, DALLAS ); VALUES (30, SALES, CHICAGO ); VALUES (40, OPERATIONS, BOSTON ); insert into emp values (7839, KING, PRESIDENT, NULL, to_date( 17/11/81, dd/mm/yy ), 5000, NULL, 10); 5
insert into emp values (7566, JONES, MANAGER, 7839, to_date( 02/04/81, dd/mm/yy ), 2975, NULL, 20); insert into emp values (7902, FORD, ANALYST, 7566, to_date( 03/12/81, dd/mm/yy ), 3000, NULL, 20); insert into emp values (7369, SMITH, CLERK, 7902, to_date( 17/12/80, dd/mm/yy ), 800, NULL, 20); insert into emp values (7698, BLAKE, MANAGER, 7839, to_date( 01/05/81, dd/mm/yy ), 2850, NULL, 30); insert into emp values (7499, ALLEN, SALESMAN, 7698, to_date( 20/02/81, dd/mm/yy ), 1600, 300, 30); insert into emp values (7521, WARD, SALESMAN, 7698, to_date( 22/02/81, dd/mm/yy ), 1250, 500, 30); insert into emp values (7654, MARTIN, SALESMAN, 7698, to_date( 28/09/81, dd/mm/yy ), 1250, 1400, 30); insert into emp values (7782, CLARK, MANAGER, 7839, to_date( 09/06/81, dd/mm/yy ), 2450, NULL, 10); insert into emp values (7788, SCOTT, ANALYST, 7566, to_date( 09/12/82, dd/mm/yy ), 3000, NULL, 20); insert into emp values (7844, TURNER, SALESMAN, 7698, to_date( 08/09/81, dd/mm/yy ), 1500, 0, 30); insert into emp values (7876, ADAMS, CLERK, 7788, to_date( 12/01/83, dd/mm/yy ), 1100, NULL, 20); insert into emp values (7900, JAMES, CLERK, 7698, to_date( 03/12/81, dd/mm/yy ), 950, NULL, 30); insert into emp values (7934, MILLER, CLERK, 7782, to_date( 23/01/82, dd/mm/yy ), 1300, NULL, 10); Una vez tenemos el fichero, desde el directorio donde tenemos este fichero hacemos sqlplus y lo ejecutamos dentro del oracle así: SQL> @bd_docencia.sql Debería decir que se crearon tablas y filas. Comprobamos que todo está en orden: SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- -------- ------- ------- ------ 7839 KING PRESIDENT 17/11/81 5,000 10 7566 JONES MANAGER 7839 02/04/81 2,975 20 6
7902 FORD ANALYST 7566 03/12/81 3,000 20 7369 SMITH CLERK 7902 17/12/80 800 20 7698 BLAKE MANAGER 7839 01/05/81 2,850 30 7499 ALLEN SALESMAN 7698 20/02/81 1,600 300 30 7521 WARD SALESMAN 7698 22/02/81 1,250 500 30 7654 MARTIN SALESMAN 7698 28/09/81 1,250 1,400 30 7782 CLARK MANAGER 7839 09/06/81 2,450 10 7788 SCOTT ANALYST 7566 09/12/82 3,000 20 7844 TURNER SALESMAN 7698 08/09/81 1,500 0 30 7876 ADAMS CLERK 7788 12/01/83 1,100 20 7900 JAMES CLERK 7698 03/12/81 950 30 7934 MILLER CLERK 7782 23/01/82 1,300 10 14 filas seleccionadas. SQL> select * from dept; DEPTNO DNAME LOC ------ -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 4 filas seleccionadas. Y como diría quien ya sabemos: Y esto es así de sencillo. 6. Agradecimientos: A quegrande.org, por el foro y el hosting. Al GPUL, por su manual de L A TEX. A César, por las correcciones. A los desarrolladores de GNU/Linux por hacer posible que escribiese este documento. A los que comparten su conocimiento, por enriqucernos a todos. La información NO es una propiedad privada! El que escribe se da cuenta de lo paradójico que resulta que un tipo al que le gusta el software libre escriba un manual para instalar software propietario, así que ahórrese el comentario. XD 7