Liberando um diretório local do servidor para acesso via HTTP

Hoje um programador pediu um dump de dois schemas de um banco de dados de produção e pediu para que colocasse em algum lugar publico para abaixar, porém empresa em que trabalho, não possui servidor de FTP ou algo parecido com isso, então utilizei o Python aonde que você consegue utilizar alguns modulos do tipo HTTP Server utilizando a porta 8000 que vem configurado como default, em linux geralmente já vem instalado a versão 2 porém segue o site se o seu não tiver:

http://www.python.org/download/

Há 2 modulos HTTP:

- BaseHTTPServer: cria um servidor de HTTP.
- SimpleHTTPServer: cria no diretório local e diretórios subsequentes.

Bom para mim utilizar o SimpleHTTPServer era o que eu precisava pois apenas queria disponibilizar esta area de dump para que fizessem os downloads, então apenas executar o comando abaixo no file system desejado, segue comando:

python -m SimpleHTTPServer

Fazendo assim irá disponibilizar este diretorio e subdiretorios para que possa acessar remotamente pelo protocolo HTTP, para acessar apenas utilizar o IP do servidor e a porta:

http://192.168.1.1:8000

Você pode alterar a porta também no proprio comando sem precisar alterar arquivos de configuração:

python -m SimpleHTTPServer 8888

Bom é isso.
Abraço

CategoriasUncategorized

RMAN – Armazenamento de script no recovery catalog

Bom hoje surgiu um problema aqui na empresa aonde que a ferramenta que utilizamos é um interpretador de comandos e apenas aceita alguns comandos, caso utilize compressão ou algum parâmetro diferente do normal que backup database ele não consegue interpretar, então surgiu algumas opções em criar algum outro shell e fazer uma chamada para que o produto não interprete este outro arquivo ou utilizar o próprio RMAN para guardar os script e fazer a chamada por linha de comando, então vamos lá vou abordar como criar e utilizar Scripts que são gravados no catalogo do RMAN, sim são gravados no catalogo, caso você utilize o controlfile(nocatalog) este post não irá te ajudar.

Há 2 tipos de se guardar o Script no RMAN, segue:

1. Local Stored Script – Utilizado para executar apenas script salvos do banco do destino.
2. Global Stored Script – Script pode ser executado por qualquer banco registrado neste catalogo.

Fora que o script também aceita variaveis de substituição EXEMPLO &1 para o primeiro parametro &2 para o segundo parametro e assim por diante.

Então vamos lá, eu criei um script local mesmo para testar, começei pelo incremental que demorava menos para validar o script se funcionava:

CREATE SCRIPT BackupIncrementalOnline
COMMENT ‘Backup Incremental Online’
{
SET COMMAND ID TO ‘IncrementalOnline’;
ALLOCATE CHANNEL ch00 TYPE SBT_TAPE;
ALLOCATE CHANNEL ch01 TYPE SBT_TAPE;
CONFIGURE EXCLUDE FOR TABLESPACE TBS_REFERENCE;
CONFIGURE EXCLUDE FOR TABLESPACE TBS_REFERENCE_INDX;
CONFIGURE EXCLUDE FOR TABLESPACE TB_REPOS_ODI;
BACKUP INCREMENTAL LEVEL 1 SKIP INACCESSIBLE TAG RMAN_BACKUP_FULL FILESPERSET 50 (DATABASE INCLUDE CURRENT CONTROLFILE);
CONFIGURE EXCLUDE FOR TABLESPACE TBS_AGGREGATE CLEAR;
CONFIGURE EXCLUDE FOR TABLESPACE TBS_AGGREGATE_INDX CLEAR;
CONFIGURE EXCLUDE FOR TABLESPACE TBS_BASE CLEAR;
BACKUP SECTION SIZE 100G TABLESPACE TBS_AGGREGATE;
BACKUP SECTION SIZE 100G TABLESPACE TBS_AGGREGATE_INDX;
BACKUP SECTION SIZE 100G TABLESPACE TBS_BASE;
}

Bom não é necessário colocar o run{} na hora de guardar o script no RMAN, pois iremos utiliza-lo para chamar o script para sua execução, segue:

RUN {EXECUTE SCRIPT BackupIncrementalOnline;}

Listar os script armazenados no catalogo:

list script names;

list global script names;

Mostrar o conteúdo do script:

PRINT SCRIPT BackupIncrementalOnline;
PRINT GLOBAL SCRIPT BackupIncrementalOnline;

Para fazer um replace do script, apenas mudar o começo:

REPLACE SCRIPT BackupIncrementalOnline

{…..}

Replace global script BackupIncrementalOnline

{……}

Deletando os scripts

DELETE SCRIPT BackupIncrementalOnline;

DELETE GLOBAL SCRIPT BackupIncrementalOnline;

Bom é isso.

Abraço

CategoriasRMAN

NLS_LANG composição e definição

Bom eu vou comentar sobre um parametro NLS_LANG, aonde sempre esqueço ou altero sua ordem de sua composição.

Há uma documentação da oracle que fala sobre o parametro e é bem completa, segue:

http://www.oracle.com/technetwork/database/globalization/nls-lang-099431.html

Bom o NLS_LANG nada mais nada menos é a composição de alguns parâmetros que setamos geralmente na instalação, segue sua composição:
NLS_LANG=<language>_<territory>.<character set>

Bom este parâmetro geralmente setamos em variável nas plataformas UNIX e no Windows encontramos no registry, porém tem como ver pelo banco de dados mostrarei mais abaixo.

Bom só para definir um pouco sobre os parâmetros que compõe o NLS_LANG, segue:

Language – Geralmente utilizada para datas.
Teritory – Usado geralmente em formato da moeda utilizada exemplo: real, dolar e euro.
Character set – Representa a linguagem do banco de dados, quando processado os caracteres trabalha com códigos numericos, aonde que uma letra ou palavra se torna um numero e assim é interpretado pelo software.

Para checkar os parametros, apenas consultar a tabela de parametros setados na base:

SELECT * FROM NLS_DATABASE_PARAMETERS;

Parametros a serem verificados para compor o NLS_LANG:

NLS_LANGUAGE
NLS_TERRITORY
NLS_CHARACTERSET

Bom é isso. Abraço!

CategoriasOracle

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.

CategoriasRMAN

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.

CategoriasSO

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.

CategoriasOracle

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!