Labels

Cambiar el modo de archivado de una base de datos

Activando el modo de archivado de la base de datos nos permite tener el historico completo y esto es muy importante a la hora de recuperar la información.
Cuando activamos el modo de archivado en una BD lo que sucede es que la BD pone un control interno que evitaría que LGWR nunca escribiria en un grupo al cual no haya sido archivado, es decir, cada vez que hubiera un switch se almacenaría toda la informacion en un archivelog y con esto nos aseguraría que nunca habría un Redolog Online que no se haya archivado, por lo tanto nos garantiza que el histórico es contínuo.

Desde el sqlplus:

SQL> archive log list
Database log mode                 No Archive Mode
Automatic archival                Disabled
Archive destination               USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence        29
Current log sequence              32
 
Verificar si la instancia de base de datos esta iniciada desde el pfile o spfile

SQL> Show parameter spfile;

NAME                     TYPE                   VALUE
------------------------ ---------------------- ------------
spfile                   string

Como no figura nada en el valor spfile, significa que la instancia inicio desde el pfile, y necesitamos crear el spfile como sigue:

SQL>  Create SPFILE From PFILE;
File created.

Es necesario reiniciar la instancia para que levante desde el spfile y podamos realizar los cambios necesarios:

SQL> shutdown immediate;
SQL> startup;

Verificamos el valor de spfile:

SQL> show parameter spfile

NAME   TYPE   VALUE
------ ----- ---------------------------------------------------
Spfile string /oracle/app/oracle/product/10.2/dbs/spfileTEST.ora

Para cambiar el modo de archivado de la BD debemos modificar ciertos parametros:

Como podemos ver la ruta del destino del archivado está guardada en el parametro: USE_DB_RECOVERY_FILE_DEST

SQL> show parameter db_recovery

NAME                   TYPE         VALUE
---------------------  -----------  ------------------------------------
db_recovery_file_dest  string  C:\oracle\product\10.2\flash_recovery_area
db_recovery_file_dest_size big integer   2G

Si éste parámetro está informado, todos los Archived Redolog File, irán a parar a ese repositorio.
Para determinar nosotros el destino al cual queremos guardar el archivado debemos modificar éste parámetro:

El parametro que informaremos la ubicación de guardado de los archivos es: LOG_ARCHIVE_DEST

SQL> show parameter log_archive_dest

NAME                  TYPE          VALUE
-----------------     -----------   ----------------
log_archive_dest      string

Como vemos el valor del parametro está en blanco, si queremos modificar éste parametro debemos primero modificar el parámetro USE_DB_RECOVERY_FILE_DEST, sino lo hacemos se produce un error.

SQL> alter system set log_archive_dest = ' c:\prueba '
*
ORA-02097: no se puede modificar el parametro porque el valor especificado no es válido
ORA-16018: no se puede utilizar LOG_ARCHIVE_DEST con LOG_ARCHIVE_DEST_n ni con DB_RECOVERY_FILE_DEST

Entonces modificamos primero el parametro DB_RECOVERY_FILE_DEST y le asignamos una cadena vacia:

SQL> alter system set db_recovery_file_dest = ' ' scope=both;
System altered.

Modificar el parametro LOG_ARCHIVE_DEST

SQL> alter system set  log_archive_dest = '/TEST/archivados'  scope=both;
System altered.

Modificar el parametro LOG_ARCHIVE_FORMAT

En Oracle 10g se debe utilizar las tres variables de sustitución para que sea considerado un nombre aceptado:

Variables de sustitucion:

%t -à Nro de thread
%s -à Nro de secuencia del log
%r -à Resetlogs ID

SQL> show parameter log_archive_format

NAME                 TYPE             VALUE
------------------   ---------------  ----------------
log_archive_format   string           arch%s_%R.%T

Modificamos el formato como deseamos:

SQL> alter system set log_archive_dest ='arc_%s_%r_%t.arc'  scope=spfile;
System altered.
Nota: sino especificamos scope, en Oracle 10g el valor por defecto es both, y como éste parametro no es dinamico nos daria error, para ello debemos espcificar scope=spfile.

Una vez que tenemos modificados todos los parametros podemos cambiar el modo de archivado de la base de datos:

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;

Verificamos el cambio:

SQL> Archive log list
Database log mode                 Archive Mode
Automatic archival                Enabled
Archive destination               C:\TEST\archivados
Oldest online log sequence        29
Next log sequence to archive      32
Current log sequence              32

Provocamos un cambio en el Redolog:

SQL> alter system switch logfile;
Sistema modificado

SQL> Archive log list
Database log mode                 Archive Mode
Automatic archival                Enabled
Archive destination               C:\TEST\archivados
Oldest online log sequence        30
Next log sequence to archive      33
Current log sequence              33

De éste modo ya tenemos nuestra base de datos en modo de archivado automatico.



Licencia Creative Commons
Cambiar el modo de archivado de una base de datos por Clarisa Maman Orfali se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 3.0 Unported.



7 comentarios:

Anónimo dijo...

Hola buen tuto, y me surge solo una duda como de cuanto espacio estamos hablando en cuanto a storage, digamos de una base de datos geoespacial con el uso de archivado automatico

Clarisa J. Maman Orfali dijo...

Hola Anonimo, el tema del dimensionamiento, es muy particular del negocio, no hay una regla a aplicar, pero si se trata solo del espacio destinado para archives, puedes analizar con qué frecuencia hacen switch los redologs online, que tamaño tienen, y tomar estas medidas durante una hora, y dimensionar el destino de archives, para que sea capaz de almacenar un dia de archives, en el caso de que la base sea chica, o dos horas de archives, si la base es grande y muy transaccionable.

Caso de ejemplo A:

Base xxA 4 redologs de 100Mb cada uno, en una hora cambian una vez solo los dos redologs, como sigue:

--Hora 0
Redo01
Redo02
Redo03
Redo04
--1°cambio
Redo01
Redo02
--Hora 1

Podemos deducir que esta base, transacciona 600Mb por hora, por lo cual sería adecuado un destino de archive de por lo menos 15Gb, y un backup de archives una vez por día.

Caso de ejemplo B:

Base xxB 4 redologs de 1024Mb cada uno, en una hora cambian dos veces cada uno como sigue:

--Hora 0
Redo01
Redo02
Redo03
Redo04
--1°cambio
Redo01
Redo02
Redo03
Redo04
--2°cambio
Redo01
Redo02
Redo03
Redo04
--Hora 1

Podemos deducir que esta base, transacciona 12Gb por hora, por lo cual sería adecuado un destino de archive de por lo menos 24Gb para contener 2hs, y un backup de archives cada hora.

Saludos
Clarisa

Anónimo dijo...

Hola Clarisa
Tengo una duda si digamos uno sigue durante meses almancenando los archivelogs, pero hago siempre copias de seguridad es estos archivos.
Puedo depurarlos? si esto es una decision que debo tomar, como lo harias? que tanto tiempo guardarias esos archives en el espacio asignado en el disco

Gisela Velazco dijo...

Hola Anónimo, gracias por escribir antes que nada.
Para contestar tu duda, te recomiendo depurarlos estableciendo una política de retención de 120 días como máximo (RMAN> CONFIGURE RETENTION POLICY TO REcovery window of 120 days), dependiendo del negocio afectado.
Si no es tan critico, puede ser 60 días, ademas debes considerar la frecuencia en la toma de los backups, y algo muy importante a tener en cuenta, es cada tanto realizar una restauración programada, de manera tal que puedas confiar en tus backups.

Cualquier duda quedamos a tu disposición.

Saludos y gracias por escribirnos!

Eugenia Chielli dijo...

Hola! Soy Eugenia y he implementado esto hoy para comenzar a hacer una prueba sobre un motor. Yo quisiera saber si ya al activar esto, me manda todo el log al nuevo destino o si solo me manda los logs de lo que yo empece a modificar a partir que configure el modo archivelog. Esto lo consulto, por si en caso de que necesite restaurar los logs, puedo hacerlo con los que se alojan en la nueva carpeta de destino.
Otra de las preguntas que quería hacerte, es sobre cómo restauro los logs.

Espero tu respuesta!!

Muchas gracias!

Saludos,

María Eugenia Chielli
Estudiante de Ingeniería en Sistemas (UTN-FRLP)

Gisela Velazco dijo...

Hola Eugenia, un gusto contestarte.
Según entendí, modificaste el destino para tus redologs archivados (archives en la jerga).
A partir de que la modificación se hace efectiva en el startup, el proceso ARC comienza a escribir los archives en ese nuevo destino.
Si luego quieres restaurar archives del destino anterior y el destino nuevo, lo puedes hacer tranquilamente especificando las secuencias de los mismos, RMAN los restaurará en el nuevo destino, a menos que le indiques uno nuevo en el comando RUN. Pero debes tener cuidado con especificar aquí un destino nuevo, ya que el proceso ARC, comenzara a escribir tambien aqui, los nuevos archives generados por la base de datos.
Te dejo un ejemplo que yo he utilizado en alguna oportunidad para restaurar archives desde la cinta:

run
{
allocate CHANNEL t1 type 'SBT_TAPE'
parms 'ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)';
SET ARCHIVELOG DESTINATION TO '/REDO_NEW/ARCHIVE';
RESTORE ARCHIVELOG FROM LOGSEQ 273549 UNTIL LOGSEQ 274233;
}

Espero te sea de utilidad, y si tienes otra duda me comentas.

Saludos!
Gisela

Ruben Dario Gonzalez dijo...

Nola Clarisa
He seguido muy de cerca tus posts y videotutoriales. Te felicito por el aporte que le das a la comunidad Oracle Hispana.
En cuanto a este post, tienes una secuencia para recuperar una base de datos en modo archivelog.

Muchas gracias.

Publicar un comentario