Inicio y parada
Principios
Para hacer que una base de datos sea accesible a todos los usuarios hay que arrancar una instancia y abrir la base de datos con dicha instancia.
Existen tres grandes fases en el proceso de inicio:
-
inicio de la instancia;
-
montaje de la base de datos;
-
apertura de la base de datos.
De la misma manera, existen tres grandes fases en el proceso de parada:
-
cierre de la base de datos;
-
desmontaje de la base de datos;
-
parada de la instancia.
Una instancia se puede iniciar con tres niveles sucesivos de disponibilidad de la base de datos, correspondiente a las tres fases del inicio:
-
Instancia iniciada (estado NOMOUNT);
-
Base montada (estado MOUNT);
-
Base abierta (estado OPEN).
Durante el inicio de la instancia, se lee el archivo de argumentos, se asigna la SGA y se inician los procesos batch. En este estado, solo se ejecuta la instancia; no hay base de datos asociada. Se consultan las vistas dinámicas relativas a la instancia (V$INSTANCE, V$SGA, V$OPTION, V$PARAMETER, V$VERSION, etc.), pero no las vistas dinámicas relativas a la base de datos (V$DATABASE, por ejemplo).
Este estado es usa principalmente durante la creación de una nueva base de datos.
Durante el montaje de la base de datos, la instancia utiliza el argumento CONTROL_FILES del archivo de argumentos para localizar los archivos de control y abrirlos. En el archivo de control, la instancia extrae el nombre y el estado de los archivos de datos y de traza, pero no los abre y no comprueba su presencia;...
Inicio
1. Utilizar SQL*Plus
a. El comando STARTUP
En SQL*Plus, el comando STARTUP permite arrancar una instancia y asociarla una base de datos con el nivel de disponibilidad deseado.
Sintaxis simplificada
STARTUP [NOMOUNT | MOUNT [nombre_base] | OPEN [nombre_base]]
[RESTRICT] [PFILE=nombre_archivo]
Con
NOMOUNT | MOUNT | OPEN |
nivel de disponibilidad deseado. |
nombre_base |
nombre de la base de datos que se va a montar o abrir. |
RESTRICT |
restricción de acceso a la base de datos, solo para los usuarios que tienen el permiso RESTRICTED SESSION. |
PFILE |
nombre del archivo de argumentos que se va a utilizar. |
La opción RESTRICT
Una base de datos se puede abrir (OPEN) en un modo restringido (opción RESTRICT), en cuyo caso solo pueden conectarse los usuarios con el permiso particular RESTRICTED SESSION (consulte la sección Gestionar los permisos, en el capítulo Gestión de usuarios y sus permisos); generalmente, este permiso solo se da a los administradores.
Este modo restringido se puede utilizar para realizar algunas operaciones de administración que necesitan que la base de datos esté abierta, pero que es preferible (no obligatorio) realizar sin ningún usuario conectado. Por ejemplo:
-
reorganiza el almacenamiento de una tabla, reconstruir los índices;
-
hacer una exportación o importación;
-
hacer una carga de datos con SQL*Loader.
No tener usuarios conectados durante estas operaciones permite evitar actualizaciones concurrentes intempestivas y realizar la operación más rápidamente.
Cuando la operación termina, es posible salir del modo restringido con la sentencia SQL:
ALTER SYSTEM DISABLE RESTRICTED SESSION;
Archivo de argumentos y cláusula PFILE
Los nombres por defecto del archivo de argumentos de texto y del archivo de argumentos de servidor de una instancia son, respectivamente, init<SID>.ora y spfile<SID>.ora.
La ubicación por defecto de estos dos archivos depende de la plataforma:
-
%ORACLE_HOME%\database (Windows);
-
$ORACLE_HOME/dbs (Unix/Linux).
En lo que respecta al archivo de argumentos de texto, el nombre y la ubicación recomendados por el estándar OFA son diferentes: init.ora en la carpeta pfile del repositorio de administración. Para relacionar la ubicación por defecto y el estándar OFA es posible crear un archivo init<SID>.ora en el repositorio por defecto...
Parada
1. Utilizar SQL*Plus
a. El comando SHUTDOWN
En SQL*Plus, el comando SHUTDOWN permite cerrar la base de datos y parar la instancia.
Sintaxis
SHUTDOWN [NORMAL | IMMEDIATE | TRANSACTIONAL | ABORT]
Opciones:
NORMAL |
Oracle espera a que todos los usuarios se hayan desconectado (no se autoriza una nueva conexión) y cierra la base de datos. |
IMMEDIATE |
Oracle desconecta a todos los usuarios (haciendo un ROLLBACK de las eventuales transacciones en curso) y cierra la base de datos. |
TRANSACTIONAL |
Oracle espera a que todas las transacciones en curso terminen antes de desconectar los usuarios (no se autoriza una nueva conexión) y cierra la base de datos. |
ABORT |
Oracle desconecta a todos los usuarios (sin realizar ROLLBACK de las eventuales transacciones en curso) y cierra "bruscamente" la base de datos, sin realizar un punto de sincronización (checkpoint). Será necesaria una restauración de la instancia durante el siguiente arranque. |
El proceso de parada es el siguiente:
-
La base de datos está cerrada.
-
La base de datos está desmontada.
-
La instancia está parada (los proceso batch están parados y la SGA está liberada).
Una parada es, forzosamente, completa; no es posible parar en un estado intermedio (MOUNT o NOMOUNT). Para pasar a una base de datos abierta (OPEN) en estado montado (MOUNT) hay que parar la base (SHUTDOWN) y volver a arrancarla en el estado deseado (STARTUP MOUNT, por ejemplo).
Las paradas NORMAL, IMMEDIATE y TRANSACTIONAL son limpias; se realiza un punto de sincronización (checkpoint) en los archivos de datos. El reinicio posterior no necesitará una restauración de la instancia. Este no es el caso de la parada ABORT, para la que no se realiza ningún punto de sincronización; los archivos...
Automatización y scripts
1. En plataformas Unix o Linux
a. Automatización
En plataformas Unix o Linux, las bases de datos se pueden iniciar o parar automáticamente gracias al script de inicio que se ha presentado en la sección Instalación del servidor, del capítulo Instalación. Este script de inicio llama a los scripts dbstart y dbshut, proporcionados por Oracle.
Extractos del script:
# Inicio de las bases de datos
echo "** inicio de las bases de datos" >> $LOG
$ORACLE_HOME/bin/dbstart $ORACLE_HOME_LISTENER > $LOG 2>&1 &
...
# Parada de las bases de datos
echo "** parada de las bases de datos" >> $LOG
$ORACLE_HOME/bin/dbshut $ORACLE_HOME_LISTENER > $LOG 2>&1 &
Los scripts dbstart y dbshut utilizan el archivo /etc/oratab para determinar cuáles son las bases de datos que se van a arrancar o parar automáticamente. Este archivo contiene una o varias líneas parecidas a la siguiente:
<ORACLE_SID>: <ORACLE_HOME>: {Y|N}
Ejemplo:
ORCL: /u01/app/oracle/product/12.1.0/dbhome_1: Y
La ubicación del archivo oratab puede variar según el sistema operativo. Consulte la documentación Installation Guide de su plataforma.
Para arrancar o parar automáticamente una base de datos, es suficiente con poner una Y en el último campo del registro, correspondiente a la base de datos.
El script dbstart lanza SQL*Plus y utiliza el comando STARTUP sin cláusula PFILE; la secuencia de búsqueda del archivo de argumentos es, por lo tanto, la misma que para un inicio manual con el comando STARTUP en SQL*Plus.
Si tiene varias versiones...
Problemas habituales y soluciones
ORA-01033: ORACLE inicialization or shutdown in progress
Explicación |
La base de datos no está abierta. |
Causa(s) |
Intenta conectarse a una base de datos no abierta sin utilizar una conexión SYSDBA. La base de datos puede estar, efectivamente, arrancando o parando; la base de datos también puede estar simplemente no montada o montada. |
Acción(es) |
Conéctese AS SYSDBA y consulte la columna STATUS de V$INSTANCE. |
ORA-01034: ORACLE not available
Explicación |
La instancia está parada. |
Causa(s) |
Intenta conectarse a una instancia Oracle parada sin utilizar una conexión SYSDBA. |
Acción(es) |
Conéctese AS SYSDBA e inicie la instancia. |
ORA-01081: imposible ejecutar ORACLE ya arrancado - cierre el thread en primer lugar
Explicación |
Intenta arrancar una instancia ya iniciada. |
Causa(s) |
No está conectado a la instancia correcta. Intenta pasar de un estado NOMOUNT o MOUNT a OPEN, haciendo un STARTUP. |
Acción(es) |
Consulte V$INSTANCE para comprobar a qué instancia está conectado. Si no está en la instancia correcta, reconéctese de nuevo (después de haber modificado ORACLE_SID o usando el nombre correcto del servicio de red). Para pasar de una base de datos en estado NOMOUNT o MOUNT a OPEN, use el comando ALTER DATABASE. |
ORA-01109: base de datos no abierta
ORA-01219: BdD cerrada: solo...