ORA-00245: control file backup failed; target is likely on a local file system
Bom estava acontecendo alguns erros de backup aqui no ambiente RAC referente ao snapshot do controlfile que estava sendo feito e um file system local, segue erro:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup plus archivelog command at 01/23/2013 11:48:16
RMAN-03009: failure of backup command on c1 channel at 01/23/2013 11:48:16
ORA-00245: control file backup failed; target is likely on a local file system
Conforme o OERR, segue:
$ oerr ORA 00245
00245, 00000, “control file backup failed; target is likely on a local file system”
// *Cause: Failed to create a control file backup because some process
// signaled an error during backup creation. This is likely caused
// by the backup target being on a local file system so it could not
// be accessed by other instances. It can also be caused by other
// I/O errors to the backup target. Any process of any instance that
// starts a read/write control file transaction must have access
// to the backup control file during backup creation.
// *Action: Check alert files of all instances for further information.
Como no servidor só possui o ASM como shared entre os 2 nós e conforme nota da Oracle (In RAC environment from 11.2 onwards Backup Or Snapshot controlfile needs to be in shared location [ID 1472171.1]) foi alterado o destino do controlfile para o ASM.
CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘+DG_DATA/snapcf.f’;
Apenas para documentar, já que na nota já diz tudo e passo a passo.
Escolhendo o Kernel para inicialização automatica
Hoje abordarei como escolher o kernel para subir a maquina linux, sem precisar entrar na opções de inicio e ficar escolhendo sempre, para mim foi útil pois instalei alguns kernel em minha VMWARE que não irei mais utilizar, então por isso queria deixar 1 como default, então vamos lá.
Bom em minha maquina tenho o GRUB que é um sistema de multiboot, porém há outro que conheço que é o LILO, irei falar e abordar apenas o GRUB.
No diretório de boot do servidor o fs /boot fica alguns arquivos de configuração, bom irei falar apenas 1 arquivo que é do GRUB que iremos alterar, neste diretorio há um outro dir /boot/grub e nele há um arquivo de configuração grub.conf
Vamos abrir ele, segue o conteúdo do meu arquivo:
[root@hodb001vtr grub]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Oracle Linux Server (2.6.32-300.39.2.el5uek)
root (hd0,0)
kernel /vmlinuz-2.6.32-300.39.2.el5uek ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.32-300.39.2.el5uek.img
title Enterprise Linux (2.6.18-194.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.18-194.el5.img
[root@hodb001vtr grub]#
Vendo acima há 2 opções que aparece na tela inicial do meu linux que são exatamente estas acima Oracle Linux Server e Enterprise Linux.
Somente comentar/retirar as linhas conforme o kernel que você não quer que inicializa, segue como ficou o meu:
[root@hodb001vtr grub]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
#title Oracle Linux Server (2.6.32-300.39.2.el5uek)
# root (hd0,0)
# kernel /vmlinuz-2.6.32-300.39.2.el5uek ro root=/dev/VolGroup00/LogVol00 rhgb quiet
# initrd /initrd-2.6.32-300.39.2.el5uek.img
title Enterprise Linux (2.6.18-194.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.18-194.el5.img
[root@hodb001vtr grub]#
Pronto no próximo reboot irá inicializar automaticamente pelo segundo kernel conforme acima.
Removendo logs antigos com ADRCI
Bom hoje eu vou abordar de como remover logs como trace, alert, incident, core dump usando o adrci, vamos lá.
Bom o ADRCI quem não conhecer apenas clickar no link ADRCI eu postei falando um pouco sobre ele, é um utilitário muito, bom este utilitário mostra os HOMES que possui o ambiente com base sabendo disso, segue os meus HOMES:
ADR Homes:
diag/tnslsnr/HODB01VTR/listener
diag/asm/+asm/+ASM
diag/rdbms/dbtest02/dbtest
diag/rdbms/dbtest02/dbtest02
diag/rdbms/dbtest03/dbtest03
diag/rdbms/dbtest01/dbtest01
Podemos remover os logs antigos apenas com um comando do ADRCI, segue os diretórios que podemos remover os logs antigos:
total 2228
drwxr-x— 2 oracle oinstall 4096 May 7 2012 incpkg
drwxr-x— 2 oracle oinstall 4096 May 7 2012 hm
drwxr-x— 2 oracle oinstall 4096 May 7 2012 cdump
drwxr-x— 2 oracle oinstall 4096 May 7 2012 metadata
drwxr-x— 2 oracle oinstall 4096 May 7 2012 ir
drwxr-x— 2 oracle oinstall 4096 Dec 6 16:15 sweep
drwxr-x— 2 oracle oinstall 4096 Dec 6 16:15 lck
drwxr-x— 2 oracle oinstall 4096 Dec 14 12:21 stage
drwxr-x— 2 oracle oinstall 4096 Dec 14 12:21 incident
drwxr-x— 2 oracle oinstall 4096 Dec 26 01:11 alert
drwxr-x— 2 oracle oinstall 2236416 Jan 17 09:34 trace
Pode montar 1 SHELL Script para fazer isso, exemplo removendo os TRACE antigos a mais de 1440 minutos, segue:
adrci exec=”set homepath diag/rdbms/dbtest01/dbtest01;purge -age 1440 -type TRACE”
Removendo os logs do alert antigos a mais de 1440 minutos, segue:
adrci exec=”set homepath diag/rdbms/dbtest01/dbtest01;purge -age 1440 -type ALERT”
Removendo os Incident antigos a mais de 1440 minutos, segue:
adrci exec=”set homepath diag/rdbms/dbtest01/dbtest01;purge -age 1440 -type INCIDENT”
Removendo os Cored Dump a mais de 1440 minutos, segue:
adrci exec=”set homepath diag/rdbms/dbtest01/dbtest01;purge -age 1440 -type CDUMP”
E assim vai, bom é isso façam bom proveito. Abraço.
Como Apagar os Flashback LOGS
Hoje eu vou falar sobre como apagar os flashback logs, bom procurei em todos os lugares e não achei nada que possa fazer, pois não há um comando para apagar flashback logs o oracle gerencia automaticamente quando necessita de espaço ele apagará automaticamente, bom então vamos lá.
Em uma base de produçao aqui na empresa está habilitado o flashback database, segue:
SYS@ > select LOG_MODE,FORCE_LOGGING,FLASHBACK_ON from v$database;
LOG_MODE |FOR|FLASHBACK_ON
————|—|——————
ARCHIVELOG |NO |YES
Olhando a view v$recovery_area_usage podemos ver que há 1094 arquivos de flashbacklogs e desses arquivos conseguimos fazer o reclaimable de 59.9%, segue:
SYS@wabrazil01 > select * from v$recovery_area_usage;
FILE_TYPE |PERCENT_SPACE_USED|PERCENT_SPACE_RECLAIMABLE|NUMBER_OF_FILES
——————–|——————|————————-|—————
CONTROL FILE | .01| 0| 1
REDO LOG | 0| 0| 0
ARCHIVED LOG | .24| 0| 5
BACKUP PIECE | 0| 0| 0
IMAGE COPY | 0| 0| 0
FLASHBACK LOG | 70.82| 59.94| 1094
FOREIGN ARCHIVED LOG| 0| 0| 0
7 rows selected.
Bom ai está o DG está sendo utilizado 70% porém apenas com flashback logs, ai vai a dica, como o oracle deleta automaticamente quando necessita de espaço que tal abaixarmos o parâmetro db_recovery_file_dest_size para ver se deleta realmente, então vamos lá abri 2 sessões 1 que abaixarei o tamanho e outra para acompanhar o alert log do banco, irei abaixar para 40G esta area pois estava com 300g, segue:
SYS@ > alter system set db_recovery_file_dest_size = 40G;
System altered.
Olhando o alert para ver se registra alguma coisa estava esperando “estourou a área de archive”, porém eu percebi que começou a deletar os flashback logs automaticamente, segue:
Thu Jan 17 08:31:08 2013
Deleted Oracle managed file +DG_FRA/wabrazil01/flashback/log_345.1282.785386025
Deleted Oracle managed file +DG_FRA/wabrazil01/flashback/log_346.1260.785386075
Deleted Oracle managed file +DG_FRA/wabrazil01/flashback/log_347.1200.785386367
Deleted Oracle managed file +DG_FRA/wabrazil01/flashback/log_348.1106.785386849
Deleted Oracle managed file +DG_FRA/wabrazil01/flashback/log_349.1040.785387709
Deleted Oracle managed file +DG_FRA/wabrazil01/flashback/log_17.361.784306923
Olhando novamente após uns 2min com este tamanho a area, verificado que abaixou o consumo e a quantidade de arquivos de flashback logs, segue:
SYS@ > select * from v$recovery_area_usage;
FILE_TYPE |PERCENT_SPACE_USED|PERCENT_SPACE_RECLAIMABLE|NUMBER_OF_FILES
——————–|——————|————————-|—————
CONTROL FILE | .05| 0| 1
REDO LOG | 0| 0| 0
ARCHIVED LOG | 0| 0| 0
BACKUP PIECE | 0| 0| 0
IMAGE COPY | 0| 0| 0
FLASHBACK LOG | 99.6| 17.49| 205
FOREIGN ARCHIVED LOG| 0| 0| 0
7 rows selected.
Bom logo eu alterei o parametro db_recovery_file_dest_size para 300G de volta, para não ter problemas, segue:
SYS@ > alter system set db_recovery_file_dest_size = 300g;
System altered.
SYS@ > select * from v$recovery_area_usage;
FILE_TYPE |PERCENT_SPACE_USED|PERCENT_SPACE_RECLAIMABLE|NUMBER_OF_FILES
——————–|——————|————————-|—————
CONTROL FILE | .01| 0| 1
REDO LOG | 0| 0| 0
ARCHIVED LOG | .04| 0| 1
BACKUP PIECE | 0| 0| 0
IMAGE COPY | 0| 0| 0
FLASHBACK LOG | 11.6| .65| 179
FOREIGN ARCHIVED LOG| 0| 0| 0
7 rows selected.
Bom é isso. Abraço!