Arrencada i aturada d'una BD Oracle

De wikijoan
Salta a la navegació Salta a la cerca

Durant l'arrencada i l'aturada de la BD succeeixen un conjunt d'events que porten a la BD per diferents estats. Per tal que els usuaris puguin accedir a la BD l'administrador ha d'obrir la BD.

SQL> shutdown immediate
Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.
SQL> startup open BBDD
Instancia ORACLE iniciada.

Total System Global Area  196681728 bytes
Fixed Size                  1298836 bytes
Variable Size             138415724 bytes
Database Buffers           50331648 bytes
Redo Buffers                6635520 bytes
Base de datos montada.
Base de datos abierta.

Arrencar la BD

quan s'executa la comanda startup open la BD passa per tres estats (nomount, mount y open) abans d'estar disponible. El DBA pot arrencar la BD fins a un d'aquests estats amb la comanda startup (startup nomount, startup mount). Anem a descriure cadascun d'aquests estats pels quals passa la BD en el procés d'arrencada.

instància no montada

SQL> startup nomount
Instancia ORACLE iniciada.

Total System Global Area  196681728 bytes
Fixed Size                  1298836 bytes
Variable Size             138415724 bytes
Database Buffers           50331648 bytes
Redo Buffers                6635520 bytes
SQL>

Oracle llegeix el fitxer init.ora, localitza els fitxers de control, crea i inicialitza la SGA, i finalment arrenca tots els processos Oracle. En asquest estat la BD està arrencada. És necessari portar la BD a l'estat de nomount quan s'estigui creant una base de dades o quan s'estigui restaurant un fitxer de control després d'haver-lo perdut.

root@ubuntu-bbdd:/u01/app/oracle$
./admin/BBDD/scripts/init.ora -> aquest és el que val
./product/11.1.0/bbdd/srvm/admin/init.ora
./product/11.1.0/bbdd/dbs/init.ora

I en el fitxer init.ora podem visualitzar quins són els fitxers de control:

$ joe ./admin/BBDD/scripts/init.ora

control_files=("/u01/app/oracle/oradata/BBDD/control01.ctl", "/u01/app/oracle/oradata/BBDD/control02.ctl", "/u01/app/oracle/

instància montada

SQL> alter database mount;
Base de datos modificada.

Oracle obre els fitxers de control per localitzar els fitxers de dades i els redo log, però no es realitza cap comprovació en ells en aquest moment. La instància de la BD munta la BD i la bloqueja, verificant que cap altra instància ha muntat la mateixa BD.

$ cat /u01/app/oracle/oradata/BBDD/control01.ctl
...
/u01/app/oracle/oradata/BBDD/redo03.log
...
/u01/app/oracle/oradata/BBDD/users01.dbf/
...

Per visualitzar tots els fitxers associats a una base de dades (fitxers de control, fitxers de dades, i fitxers de redo log):

select * from v$controlfile;
select * from v$datafile;
select * from v$logfile;

select group#, status, substr(member,1,60) from v$logfile

Aquests fitxers estan físicament a /u01/app/oracle/oradata.

Hi ha vàries raons per voler tenir la BD en l'estat mount. En general, totes les sentències SQL del tipus alter database es poden executar en aquesta etapa. Algunes de les operacions a realitzar quan la BD està muntada són:

  • efectuar recuperacions
  • posar online/offline un fitxer de dades
  • recol.locar els fitxers de dades i de redo log
  • crear un nou grup o membre de redo log, o esborrar un grup o membre redo log existent

obrir la base de dades

SQL> alter database open;
Base de datos modificada.

SQL> SELECT INSTANCE_NAME, VERSION, STATUS FROM V$INSTANCE;

INSTANCE_NAME	 VERSION	   STATUS
---------------- ----------------- ------------
BBDD		 11.1.0.6.0	   OPEN

SQL> select name from v$database;
NAME
---------
BBDD

Durant aquesta etapa, la instància obre la BD, bloqueja els datafiles (fitxers de dades), i obre tots els fitxers de redo log. Si la instància obre la BD després d'una finalització anormal, o després d'una caiguda del sistema, s'executarà automàticament el procés de recuperació utilitzant els fitxers de redo log.

Al final d'aquesta etapa la BD està llesta per al seu ús normal.

Aturar la BD

Per aturar la base de dades s'utilitza la comanda shutdown, amb vàries possibilitats: normal, immediate y abort.

shutdown normal

  • s'impideix l'accés a la BD, espera que tots els usuaris completin totes les seves peticions i es desconnectin del servidor.
  • purga tots els buffers de dades i caches de redo log, actualitzant els fitxers de dades i de redo log.
  • S'eliminen els bloqueigs de fitxers
  • es completen les transaccions en marxa
  • s'actualitzen les capçaleres del fitxers, s'eliminen els threads
  • s'alliberen els bloquejos de la instància per part de la BD
  • es sincronitzen els fitxers de control i de dades.
  • Resumint, l'opció normal tanca la BD, desmunta la BD, i atura la instància amb compte. És l'opció recomanada.

shutdown immediate

En certes ocasions pot ser necessari aturar la BD de mode immediat. Les sentències que s'estan processant s'aturen de forma immediata, qualsevol transacció no confirmada (uncommitted) es tira endarrera (rolled back) i la BD s'atura. No s'espera que els usuaris es desconnectin. Tanmateix, la BD serà consistent i no es necessitarà recuperació en la següent arrencada.

shutdown abort

En situacions d'emergència, i quan tota la resta falla, s'ha de realitzar un abort. Per exemple, quan un procés de la instància mor i la BD no pot aturar-se de forma normal o immediata. Les sentències SQL s'aturen bruscament, i no es fa un rollback de les transaccions. Si aturem la BD amb abort, la propera vegada que s'arrenca la BD hem de fer una recuperació.


creat per Joan Quintana Compte, novembre 2009