instalar oracle en linux y no morir en el intento (parte ii)

12 de diciembre de 2009

Es posible que al finalizar ya podamos acceder directamente a la consola de administración desde: http://ip_server:1158/em

Pero si reiniciamos veremos como Oracle no arranca por defecto. Hay muchos scripts por Internet para arrancar automáticamente la BBDD.
Lo que primero haremos es indicarle a Oracle que BBDD queremos arrancar al arrancar Oracle.

Editamos el /etc/oratab e indicamos que queremos que la única base de datos creada arranque:

dbora01:/u01/app/oracle/oracle/product/10.2.0:Y

Iniciar Oracle:
# su oracle
# . oraenv (cargamos las variables de entorno)
$ . oraenv
ORACLE_SID = [oracle] ? dbora01

$ lsnrctl start (arrancamos el listener)
$ dbstart (arrancamos la bbdd)
$ emctl start dbconsole (arrancamos la consola de administración)

Podemos ver todos lo procesos que se arrancan:
$ ps -x
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.3/FAQ
  PID TTY      STAT   TIME COMMAND
 6439 pts/0    S      0:00 bash
 6469 ?        Ssl    0:00 /u01/app/oracle/oracle/product/10.2.0/bin/tnslsnr LISTENER 
-inherit
 6514 ?        Ss     0:00 ora_pmon_dbora01
 6516 ?        Ss     0:00 ora_psp0_dbora01
 6518 ?        Ss     0:01 ora_mman_dbora01
 6520 ?        Ss     0:00 ora_dbw0_dbora01
 6522 ?        Rs     0:03 ora_lgwr_dbora01
 6524 ?        Ss     0:00 ora_ckpt_dbora01
 6526 ?        Ss     0:04 ora_smon_dbora01
 6528 ?        Ss     0:00 ora_reco_dbora01
 6530 ?        Ss     0:02 ora_cjq0_dbora01
 6532 ?        Ss     0:04 ora_mmon_dbora01
 6534 ?        Ss     0:00 ora_mmnl_dbora01
 6536 ?        Ss     0:00 ora_d000_dbora01
 6538 ?        Ss     0:00 ora_s000_dbora01
 6542 ?        Ss     0:00 ora_qmnc_dbora01
 6544 ?        Ss     0:00 ora_q000_dbora01
 6546 ?        Ss     0:00 ora_q001_dbora01
 7029 pts/0    S      0:00 /u01/app/oracle/oracle/product/10.2.0/perl/bin/perl 
/u01/app/oracle /oracle/product/10.2.0/bin/emwd.pl dbc
 7054 pts/0    Sl     0:28 /u01/app/oracle/oracle/product/10.2.0/jdk/bin/java 
-server -Xmx256M -XX:MaxPermSize=96m -XX:MinHeapFreeRa
 7219 ?        Ss     0:00 oracledbora01 (LOCAL=NO)
 7226 ?        Ss     0:01 oracledbora01 (LOCAL=NO)
 7230 ?        Ss     0:04 oracledbora01 (LOCAL=NO)
 7235 ?        Ss     0:02 oracledbora01 (LOCAL=NO)
 7260 ?        Ss     0:00 oracledbora01 (LOCAL=NO)
 7274 ?        Ss     0:00 oracledbora01 (LOCAL=NO)
 7866 pts/0    Sl     0:01 /u01/app/oracle/oracle/product/10.2.0/bin/emagent
 7897 ?        Ss     0:01 oracledbora01 (LOCAL=NO)
 7941 ?        Ss     0:02 oracledbora01 (LOCAL=NO)
 7973 ?        Ss     0:04 oracledbora01 (LOCAL=NO)
 8253 ?        Ss     0:00 ora_j000_dbora01
 8268 pts/0    R+     0:00 ps -x
El primero que arrancamos es el listener. El listener es un servicio TCP que por defecto escucha en el 1521 y provee la conexión de clientes que necesitan realizar operaciones con la base de datos. Por ejemplo si tenemos una aplicación Java o PHP que desea realizar consultas contra la BBDD deberá contactar con el listener de Oracle pasándole su usuario/password y el SID de la base de datos.

La configuración del listener está en: $ORACLE_HOME/network/admin.

Luego levantamos la BBDD y con ello aparecen toda una serie de procesos llamados ora_*. Explicaré rápidamente algunos de estos procesos:

+ Ora_pmon: Es el Process Monitor. Es el encargado de limpiar los bufer y las caches que un usuario haya podido dejar sin liberar. Por ejemplo la conexión de red de un usuario cae y este tiene bloqueos de tablas, pmon libera las tablas, realiza rollbacks, etc de los recursos consumidos.

+ Ora_smon: Es el System Monitor. Es el encargado de recuperar la base de datos en caso de fallo de Oracle. Para ello utiliza los archivos de rehacer.

+ Ora_dbw: Es el Dabase Writer. Es proceso encargado de escribir en los ficheros fisicos los bloques de datos nuevos o modificados. Dependiendo del redimiento y necesidades de nuestro Oracle, podemos arrancar hasta 20 dbw.

+ Ora_lgwr: Es el Log Writer. Es el encargado de escribir los bloques del rehacer. Cuando tenemos una transacción primero se escriben los datos en los registros de rehacer antes que el ora_dbw los escriba finalmente en los ficheros de datos. Una transacción es correcta si ora_lgwr ha podido escribir los datos en sus archivos de rehacer.

Finalmente arrancamos la consola de administración que no es más que una aplicación Java (http://ip_server: 1158/em).
Ahora que parece que todo está arrancado vamos a conectarnos a la base de datos y hacer unas cuantas consultas de administración. No conectamos a la BBDD.
$ sqlplus /nolog
> connect / as sysba
Connected.

Veamos cuantas base de datos tenemos creadas:
SQL> select name, created, log_mode, open_mode, platform_name from v$database;

NAME      CREATED  LOG_MODE     OPEN_MODE
--------- -------- ------------ ----------
PLATFORM_NAME
--------------------------------------------------------------------------------
DBORA01   08/12/09 NOARCHIVELOG READ WRITE
Linux IA (32-bit)

Vemos que tenemos una BBDD llamada DBORA01 y que está abierta para lectura/escritura.

Veamos cuantos tablespaces tiene esta base de datos:
SQL> select tablespace_name, contents from dba_tablespaces;

TABLESPACE_NAME                CONTENTS
------------------------------ ---------
SYSTEM                         PERMANENT
UNDOTBS1                       UNDO
SYSAUX                         PERMANENT
TEMP                           TEMPORARY
USERS                          PERMANENT
EXAMPLE                        PERMANENT

6 rows selected.

Todos a excepción del EXAMPLE son los que nos encontraremos en una instalación estándar de Oracle. En el tablespace EXAMPLE encontraremos tablas de ejemplo para hacer pruebas.

Juguemos ahora con el schema SCOTT que se encuentra dentro del tablespace EXAMPLE. Para ello primero habilitamos el usuario que por defecto está cerrado:
SQL> ALTER USER scott ACCOUNT UNLOCK;

Entramos ahora con este nuevo usuario que por defecto tiene el password “tiger”.
$ sqlplus /nolog
> connect scott/tiger

Veamos ahora su schema:
Sql> select * from cat;
TABLE_NAME                     TABLE_TYPE
------------------------------ -----------
DEPT                           TABLE
EMP                            TABLE
BONUS                          TABLE
SALGRADE                       TABLE

SQL> select ename,job,sal from emp;

ENAME      JOB              SAL
---------- --------- ----------
SMITH      CLERK            800
ALLEN      SALESMAN        1600
WARD       SALESMAN        1250
JONES      MANAGER         2975
MARTIN     SALESMAN        1250
BLAKE      MANAGER         2850
CLARK      MANAGER         2450
SCOTT      ANALYST         3000
KING       PRESIDENT       5000
TURNER     SALESMAN        1500
ADAMS      CLERK           1100

ENAME      JOB              SAL
---------- --------- ----------
JAMES      CLERK            950
FORD       ANALYST         3000
MILLER     CLERK           1300

14 rows selected.

¿Parece que Oracle funciona no?