Backup de metadados ASM em Oracle 11gR2++ (Restaurando diskgroup)

images Backup de metadados ASM em Oracle 11gR2++  (Restaurando diskgroup)O objetivo deste artigo é demonstrar como fazer um backup da estrutura do ASM, e como recuperar um diskgroup em uma instância ASM após ocorrência de falha.

Essa demonstração foi realizada na versão 12C, mas esta funcionalidade existe a partir da versão 11g.

Conforme a documentação oficial da Oracle, as definições para disco ASM e diskgroup ASM são:

1- Oracle ASM Disks (discos ASM): Um disco ASM Oracle é um dispositivo de armazenamento que está provisionado para um grupo de disco do Oracle ASM. Um disco ASM Oracle pode ser um disco físico ou uma partição, um número de unidade lógica (LUN) a partir de uma matriz de armazenamento, volume lógico, ou um arquivo anexado à rede. Discos ASM podem ser adicionados ou desligados de um diskgroup enquanto o banco de dados estiver em execução. Quando você adiciona um disco para um diskgroup, você pode atribuir um nome de disco ou é dado um nome de disco ASM do Oracle automaticamente.

2- Oracle ASM Disk Groups: Um diskgroup do Oracle ASM é uma coleção de discos do Oracle ASM gerenciados como uma unidade lógica. As estruturas de dados em um grupo de discos são auto-suficientes e ocupam espaço em disco em um grupo de discos. Dentro de um diskgroup, o Oracle ASM expõe uma interface de sistema de arquivos para arquivos de banco de dados Oracle. O conteúdo dos arquivos que estão armazenados em um grupo de discos estão uniformemente distribuídas, ou distribuído (striping), para eliminar concorrência de disco e para proporcionar um desempenho uniforme em todos os discos. O desempenho é comparável ao desempenho de dispositivos básicos.

Uma questão importante à ser considerada na estratégia de backup/recovery do seu ambiente é em relação à restauração dos metadados de estruturas do ASM. Como assim?

Imagine que você tenha (e espero que tenha) sua estratégia de backup funcionando perfeitamente, com RMAN e suas funcionalidades podendo ser utilizados para uma restauração e recuperação rápida do seu ambiente no caso de falhas. Tudo vai bem, até que um dia um diskgroup do ASM passa por uma falha crítica, e se perde. Nenhum problema, pois você implementou, testou e homologou suas rotinas de backup RMAN. Seus dados estão preservados. Mas…..vai ter que perder um tempo recriando sua estrutura de diskgroup que foi (ou foram, nos piores cenários) afetado pela falha.

Nesse momento, você vai ter que buscar a documentação do ambiente (Se é que existe alguma), e como provavelmente não vai encontrar, terá que analisar todo o ambiente e recriar o diskgroup, com todos os discos que você imagina que pertencem à esse diskgroup, para só então poder acionar o RMAN para que o mesmo restaure os dados do banco. Ah, tranquilo, você pensa. Adicione a essa situação um cenário caótico na empresa, aonde o banco parou e todos os chefes de setores ligam pra você a cada 30 segundos e seu chefe na sua sala, monitorando o que você faz pra resolver a situação o mais rápido possível.

Uma funcionalidade do ASMCMD que muitos DBAs desconhecem com relação à ambientes com ASM em versões 11g do Oracle , é o backup e restore dos metadados através dos comandos md_backup e md_restore. Não confunda com backup de dados. O ASMCMD não faz backup de dados, e sim dos metadados da infraestrutura (Discos, diskgroups, diretórios, etc…)

Vamos ver como funciona esse recurso.

Em primeiro lugar, vamos averiguar se a instância ASM está em execução:

srvctl status asm
ASM is running on orazety

Agora, conectados na instância ASM, verificamos os discos existentes:

SQL> select GROUP_NUMBER, NAME from V$ASM_DISK;

GROUP_NUMBER NAME
------------ ------------------------------
 0
 1 DGARCH_0000
 3 DGINDEX_0000
 2 DGDATA_0000

Eu tenho uma tablespace chamada TESTE_DATA, e dentro dessa tablespace, uma tabela chamada TABELA_XPTO, com 100 registros, conforme podemos verificar:

SQL> SELECT count(*) from JTABLE.TABELA_XPTO;

COUNT(*)
----------
 100

Verificamos que a localização do datafile dessa tablespace está no disco DGDATA:

SQL> set lines 100
col file_name format a70

select file_name, ceil(bytes / 1024 / 1024) ;size MB;
from dba_data_files
where tablespace_name='TESTE_DATA'
/
FILE_NAME size MB
---------------------------------------------------------------------- ----------
+DGDATA/DBPROD/DATAFILE/teste_data.266.827834929 100 100

Agora vamos efetuar o backup dos metadados do ASM. Setamos o ambiente com as variáves, acessamos o ASMCMD e utilizamos o comando mb_backup:

oracle=DBPROD-> export ORACLE_SID=+ASM
oracle=DBPROD-> export ORACLE_HOME=$GRID_HOME
oracle=DBPROD-> export PATH=$ORACLE_HOME:$PATH
oracle=DBPROD-> asmcmd
ASMCMD> md_backup -b /home/oracle/asmbkp_data_reporting
WARNING:option 'b' is deprecated for 'md_backup'
Disk group metadata to be backed up: DGDATA
Disk group metadata to be backed up: DGINDEX
Disk group metadata to be backed up: DGARCH
Current alias directory path: DBPROD/CONTROLFILE
Current alias directory path: DBPROD
Current alias directory path: DBPROD/ONLINELOG
Current alias directory path: DBPROD/DD7C48AA5A4404A2E04325AAE80A403C
Current alias directory path: ASM
Current alias directory path: DBPROD/TEMPFILE
Current alias directory path: ASM/ASMPARAMETERFILE
Current alias directory path: DBPROD/PARAMETERFILE
Current alias directory path: ASM/PASSWORD
Current alias directory path: DBPROD/DD7C48AA5A4404A2E04325AAE80A403C/DATAFILE
Current alias directory path: DBPROD/DATAFILE
Current alias directory path: DBPROD/DATAFILE
Current alias directory path: DBPROD
Current alias directory path: DBPROD/ARCHIVELOG
Current alias directory path: DBPROD
Current alias directory path: DBPROD/ARCHIVELOG/2013_09_06
Current alias directory path: DBPROD/AUTOBACKUP
Current alias directory path: DBPROD/AUTOBACKUP/2013_09_06
Current alias directory path: DBPROD/ARCHIVELOG/2013_10_03
ASMCMD>

Podemos ver no diretório /home/oracle que o arquivo asmbkp_data_reporting foi criado:

oracle=DBPROD-> pwd/home/oracle
oracle=DBPROD-> ls -ltr
total 52
drwxr-xr-x 7 oracle dba 4096 Jun 10 09:15 grid
drwxr-xr-x 3 oracle dba 4096 Sep 5 15:13 oradiag_oracle
-rw-r--r-- 1 oracle dba 44042 Oct 3 10:17 asmbkp_data_reporting

Agora vamos executar um backup RMAN dessa base:

RMAN> backup database plus archivelog;
Starting backup at 03-OCT-13
current log archivedusing target database control file instead of recovery catalog
allocated channel: ORA_DISK_1channel ORA_DISK_1: SID=20
device type=DISKchannel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=24 RECID=13 STAMP=827835189
input archived log thread=1 sequence=25 RECID=14 STAMP=827838711
channel ORA_DISK_1: starting piece 1 at 03-OCT-13
channel ORA_DISK_1: finished piece 1 at 03-OCT-13
piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/05olfk7p_1_1 tag=TAG20131003T111152 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:08
Finished backup at 03-OCT-13Starting backup at 03-OCT-13using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=+DGDATA/DBPROD/DATAFILE/system.261.825418889
input datafile file number=00003 name=+DGDATA/DBPROD/DATAFILE/sysaux.269.825418797input datafile file number=00002 name=+DGDATA/DBPROD/DATAFILE/vetorh_data.271.825419913
input datafile file number=00005 name=+DGINDEX/DBPROD/DATAFILE/vetorh_index.256.825419941
input datafile file number=00004 name=+DGDATA/DBPROD/DATAFILE/undotbs1.268.825418997
input datafile file number=00007 name=+DGDATA/DBPROD/DATAFILE/teste_data.266.827834929
input datafile file number=00008 name=+DGINDEX/DBPROD/DATAFILE/teste_index.257.825436665
input datafile file number=00006 name=+DGDATA/DBPROD/DATAFILE/users.272.825418995
channel ORA_DISK_1: starting piece 1 at 03-OCT-13channel ORA_DISK_1: finished piece 1 at 03-OCT-13
piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/06olfk82_1_1 tag=TAG20131003T111201 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:03:16channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 03-OCT-13channel ORA_DISK_1: finished piece 1 at 03-OCT-13
piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/07olfke7_1_1 tag=TAG20131003T111201 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 03-OCT-13
Starting backup at 03-OCT-13current log archive
dusing channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=26 RECID=15 STAMP=827838925channel ORA_DISK_1: starting piece 1 at 03-OCT-13
channel ORA_DISK_1: finished piece 1 at 03-OCT-13
piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/08olfked_1_1 tag=TAG20131003T111525 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 03-OCT-13

Vamos simular uma falha no diskgroup DGDATA. Para isso, conectamos na instância ASM, forçamos a desmontagem do banco e deletamos o diskgroup:

SQL> alter diskgroup DGDATA dismount force;
Diskgroup altered.
SQL> drop diskgroup DGDATA force including contents;
Diskgroup dropped.

Voltando à instância, tentamos fazer um select na tabela:

select count(*) from JTABLE.TABELA_XPTO;
select count(*) from JTABLE.TABELA_XPTO *ERROR at line 1:ORA-01115: IO error reading block from file (block # )
ORA-01110: data file 8: '+DGDATA/DBPROD/DATAFILE/teste_data.257.825436665'ORA-15078:
ASM diskgroup was forcibly dismounted

Quando tentamos montar o diskgroup na instância ASM, obviamente teremos o erro de falta do diskgroup:

SQL> alter diskgroup DGDATA mount;
alter diskgroup DGDATA mount*ERROR at line 1:ORA-15032: not all alterations performed
ORA-15017: diskgroup ;DGDATA; cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskgroup;DGDATA;

O jeito é restaurar pelo comando md_restore, no ASMCMD:

ASMCMD> md_restore /home/oracle/asmbkp_data_reporting --full -G DGDATA
Current Diskgroup metadata being restored: DGDATA
Diskgroup DGDATA created!

Nesse caso, restaurei apenas o diskgroup DGDATA, especificado por -G DGDATA, mas poderia ser toda a estrutura do ASM. Para mais informações sobre os parâmetros de recuperação desse comando, acesse a documentação oficial da oracle.
Agora, de volta à instância ASM, seleciono os discos existentes:

SELECT GROUP_NUMBER, NAME,STATE, TOTAL_MB, FREE_MB
FROM V$ASM_DISKGROUP
ORDER BY GROUP_NUMBER; 2 3 4
GROUP_NUMBER NAME STATE TOTAL_MB FREE_MB
------------ ------------------------------ ----------- ---------- ----------
1 DGARCH MOUNTED 12284 12092 2 DGDATA MOUNTED 12284 9766 3 DGINDEX MOUNTED 12284 12231

Perceba que, na recriação do diskgroup, o diskgroup já montou automáticamente.
Agora podemos restaurar o backup que foi gerado anteriormente.

RMAN> restore database;
Starting restore at 08-OCT-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=28 device type=DISK
starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to +DGDATA/DBPROD/DATAFILE/system.261.825418889
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/12.1.0/db_1/dbs/04olg011_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/04olg011_1_1 tag=TAG20131003T143305
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:55
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00003 to +DGDATA/DBPROD/DATAFILE/sysaux.269.825418797
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/12.1.0/db_1/dbs/05olg03c_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/05olg03c_1_1 tag=TAG20131003T143305
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:55
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00002 to +DGDATA/DBPROD/DATAFILE/vetorh_data.271.825419913
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/12.1.0/db_1/dbs/06olg054_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/06olg054_1_1 tag=TAG20131003T143305
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00005 to +DGDATA/DBPROD/DATAFILE/vetorh_index.270.827857783
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/12.1.0/db_1/dbs/07olg067_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/07olg067_1_1 tag=TAG20131003T143305
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00004 to +DGDATA/DBPROD/DATAFILE/undotbs1.268.825418997
channel ORA_DISK_1: restoring datafile 00006 to +DGDATA/DBPROD/DATAFILE/users.272.825418995
channel ORA_DISK_1: restoring datafile 00007 to /u02/oradata/teste_data.dbf
channel ORA_DISK_1: restoring datafile 00008 to +DGDATA/DBPROD/DATAFILE/teste_index.266.827857817
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/12.1.0/db_1/dbs/08olg070_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/08olg070_1_1 tag=TAG20131003T143305
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:25
Finished restore at 08-OCT-13

Agora sim, verificamos se a tabela que estava armazenada neste diskgroup está disponível novamente:

SQL> select count(*) from JTABLE.TABELA_XPTO;

COUNT(*)
----------
100

Ai você lê esse artigo e pergunta: “Legal, mas a demonstração foi corrompendo lógicamente o diskgroup. E se um dos discos sofrer uma avaria irreparável e precisar ser substituído?”

Sem problemas, funciona da mesma forma. Vamos à demonstração.

Para simular um crash de disco na minha VM (utilizo Virtual Box), excluí um dos arquivos de disco virtual. Excluí sem identificar à qual diskgroup esse disco pertencia. Elegi o disco 12C-disk6:

1 300x91 Backup de metadados ASM em Oracle 11gR2++  (Restaurando diskgroup)
2 300x81 Backup de metadados ASM em Oracle 11gR2++  (Restaurando diskgroup)
3 300x197 Backup de metadados ASM em Oracle 11gR2++  (Restaurando diskgroup)

Depois recriei o disco, com um nome diferente:

4 300x93 Backup de metadados ASM em Oracle 11gR2++  (Restaurando diskgroup)

Não vou demonstrar como apresentar um disco para o ASM. Para esse procedimento, recomendo a leitura desse artigo .

Realizada essa parte, que seria o equivalente à trocar o disco danificado por um novo em um ambiente físico, usamos o ASMCMD para restaurar a estrutura ASM, exatamente como fizemos anteriormente. Perceba que o disco alterado afetou o diskgroup DGINDEX:

SQL> SELECT GROUP_NUMBER, NAME,
STATE, TOTAL_MB, FREE_MB
FROM V$ASM_DISKGROUP
ORDER BY GROUP_NUMBER; 2 3 4

GROUP_NUMBER NAME   STATE     TOTAL_MB FREE_MB
------------ ------ --------- -------- -------
1            DGARCH MOUNTED   12284    12091
2            DGDATA MOUNTED   12284    9262
SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Automatic Storage Management option
oracle=+ASM-> asmcmd
ASMCMD> md_restore /home/oracle/asmbkp_data_reporting --full -G DGINDEX
Current Diskgroup metadata being restored: DGINDEX
Diskgroup DGINDEX created!
ORA-15032: not all alterations performed
ORA-15242: could not set attribute PHYS_META_REPLICATED
ORA-15241: attribute phys_meta_replicated is read only (DBD ERROR: OCIStmtExecute)
ASMCMD-9360: ADD or ALTER ATTRIBUTE failed
ORA-15032: not all alterations performed
ORA-15242: could not set attribute PHYS_META_REPLICATED
ORA-15241: attribute phys_meta_replicated is read only (DBD ERROR: OCIStmtExecute)
ASMCMD> exit
oracle=+ASM-> sqlplus / as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Tue Oct 8 09:55:44 2013

Copyright (c) 1982, 2013, Oracle. All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Automatic Storage Management option

SQL> SELECT GROUP_NUMBER, NAME,
STATE, TOTAL_MB, FREE_MB
FROM V$ASM_DISKGROUP
ORDER BY GROUP_NUMBER; 2 3 4

GROUP_NUMBER NAME STATE TOTAL_MB FREE_MB
------------ ------------------------------ ----------- ---------- ----------
 1 DGARCH MOUNTED 12284 12088
 2 DGDATA MOUNTED 12284 9262
 3 DGINDEX MOUNTED 12284 12231

Agora é restaurar pelo RMAN:


RMAN> restore database;

Starting restore at 08-OCT-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=28 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to +DGDATA/DBPROD/DATAFILE/system.261.825418889
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/12.1.0/db_1/dbs/04olg011_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/04olg011_1_1 tag=TAG20131003T143305
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:55
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00003 to +DGDATA/DBPROD/DATAFILE/sysaux.269.825418797
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/12.1.0/db_1/dbs/05olg03c_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/05olg03c_1_1 tag=TAG20131003T143305
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:55
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00002 to +DGDATA/DBPROD/DATAFILE/vetorh_data.271.825419913
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/12.1.0/db_1/dbs/06olg054_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/06olg054_1_1 tag=TAG20131003T143305
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00005 to +DGDATA/DBPROD/DATAFILE/vetorh_index.270.827857783
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/12.1.0/db_1/dbs/07olg067_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/07olg067_1_1 tag=TAG20131003T143305
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00004 to +DGDATA/DBPROD/DATAFILE/undotbs1.268.825418997
channel ORA_DISK_1: restoring datafile 00006 to +DGDATA/DBPROD/DATAFILE/users.272.825418995
channel ORA_DISK_1: restoring datafile 00007 to /u02/oradata/teste_data.dbf
channel ORA_DISK_1: restoring datafile 00008 to +DGDATA/DBPROD/DATAFILE/teste_index.266.827857817
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/12.1.0/db_1/dbs/08olg070_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/12.1.0/db_1/dbs/08olg070_1_1 tag=TAG20131003T143305
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:25
Finished restore at 08-OCT-13

Acessando novamente a instância, emitimos o mesmo SELECT:

SQL> select count(*) from JTABLE.TABELA_XPTO;

COUNT(*)
----------
 100

Dessa forma, fica a dica para que você sempre mantenha um backup dos metadados de sua instância ASM. Como você viu nesse artigo, na hora do sufoco, vai te ajudar a ganhar tempo na hora de restaurar uma base de dados, e disponibilizar o ambiente para seus usuários.

%name Backup de metadados ASM em Oracle 11gR2++  (Restaurando diskgroup)

Autor: Bruno Zehetmeyr bruno.zehe

Bacharel em Ciência da Computação pela UNORP-SP, Pós-graduado em Administração de Sistemas de Informação pela UFLA-MG e pós-graduado em Administração de Banco de Dados Oracle pela VERIS-SP. Analista DBA na Teiko Soluções em TI e professor universitário no Centro Universitário de Brusque – UBIFEBE. Certificado OCP 10g e OCP 11g, OCE Linux. Residente em Blumenau-SC.