Nuestras base de datos de producción deberían estar en modo archivelog. Voy a enumerar los pasos a seguir para ponerlo en este modo:
1.-Comprobar los parámetros actuales:
Importante: El directorio donde se van a generar los ficheros de archivado debe existir antes de cambiar al modo archivelog.
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 233
Current log sequence 235
En "Archive destination" puede venir el directorio destino de los archives, o puede venir el parámetro "use_db_recovery_file_dest" como en mi caso.
SQL> show parameter recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /oracle10g/flash_recovery_area
db_recovery_file_dest_size big integer 2G
recovery_parallelism integer 0
SQL>
En db_recovery_file_dest_size indicamos el límite máximo de espacio para los archives. Podemos aumentarlo:
SQL> alter system set db_recovery_file_dest_size = 20G scope=both;
Ahora vamos a ver el formato de los ficheros que se van a generar. Eso viene definido por el parámetro log_archive_format.
SQL> show parameter archive
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
log_archive_config string
log_archive_dest string
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_2 string enable
log_archive_dest_state_3 string enable
log_archive_dest_state_4 string enable
log_archive_dest_state_5 string enable
log_archive_dest_state_6 string enable
log_archive_dest_state_7 string enable
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_8 string enable
log_archive_dest_state_9 string enable
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_2 string
log_archive_dest_3 string
log_archive_dest_4 string
log_archive_dest_5 string
log_archive_dest_6 string
log_archive_dest_7 string
log_archive_dest_8 string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_9 string
log_archive_duplex_dest string
log_archive_format string %t_%s_%r.dbf
log_archive_local_first boolean TRUE
log_archive_max_processes integer 2
log_archive_min_succeed_dest integer 1
log_archive_start boolean FALSE
log_archive_trace integer 0
remote_archive_enable string true
standby_archive_dest string ?/dbs/arch
2.-Activar la generación del archivado:
Paramos la base de datos:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
Montar la base de datos:
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 2096632 bytes
Variable Size 503317000 bytes
Database Buffers 1090519040 bytes
Redo Buffers 14680064 bytes
Database mounted.
Poner la base de datos en modo archivelog:
SQL> alter database archivelog;
Abrir la base de datos:
SQL> alter database open;
3.-Revisar el ALERT.LOG para ver se ha generado algún error durante el cambio.
4.-Forzar la generación de un fichero de archivado para ver que funciona OK:
SQL> alter system archive log current;
SQL> alter system switch logfile;
5.-Implementar la liberación de ficheros de archivado (archives):
Si en algún momento se llega al 100% del límite que hemos especificado, o se llena el filesystem donde se dejan los archivados, la base de datos no permitirá hacer nuevas actualizaciones. Se parará y los usuarios llamarán porque Oracle no funciona.
Tenemos que ir liberando espacio periódicamente. Lo más normal es que un script de RMAN se dedique a salvar los archivados a cinta, y vaya borrándolos del directorio a medida que lo hace.
6.-Comprobar que todas las tablas de usuarios, índices, objetos LOB y tablespaces estén en modo logging.
Para que los cambios en los objetos vayan a los redolog, es necesario que estén en estado LOGGING y no en estado NOLOGGING. Es normal que haya objetos del sistema (SYS, SYSTEM, SYSAUX,...) en estado NOLOGGING. Los tablespaces temporales también suelen ser NOLOGGING.
TABLAS:
select owner, table_name
from dba_tables
where LOGGING = 'NO'
order by owner, table_name;
TABLAS PARTICIONADAS:
select table_owner, table_name, partition_name
from dba_tab_partitions
where LOGGING = 'NO'
order by table_owner, table_name, partition_name;
ÍNDICES:
select owner, index_name
from dba_indexes
where LOGGING = 'NO'
order by owner, index_name;
ÍNDICES PARTICIONADOS:
select index_owner, index_name, partition_name
from dba_ind_partitions
where LOGGING = 'NO'
order by index_owner, index_name, partition_name;
OBJETOS LOB:
select owner, table_name, index_name
from dba_lobs
where LOGGING = 'NO'
order by owner, table_name;
TABLESPACES:
select tablespace_name
from dba_tablespaces
where LOGGING = 'NOLOGGING'
order by tablespace_name;
7.-Cambiar estado de objetos de NOLOGGING A LOGGING:
TABLAS:
ALTER TABLE owner.tabla LOGGING;
TABLAS PARTICIONADAS:
ALTER TABLE owner.tabla MODIFY PARTITION particion LOGGING;
ÍNDICES:
ALTER INDEX owner.indice LOGGING;
ÍNDICES PARTICIONADOS:
ALTER INDEX owner.indice MODIFY PARTITION particion LOGGING;
OBJETOS LOB:
ALTER TABLE owner.tabla_con_campo_lob LOGGING;
TABLESPACES:
ALTER TABLESPACE tablespace LOGGING;
viernes, septiembre 21, 2012
Suscribirse a:
Enviar comentarios (Atom)
1 comentario:
Excelente post, solo me gustaría que pudieras añadir que le sucede a la base de datos, y como lo solucionarías si no tuvieras RMAN
Publicar un comentario