https://www.thoughtleaderlife.com/vyx1otvch8 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.
see url Essa demonstração foi realizada na versão 12C, mas esta funcionalidade existe a partir da versão 11g.
https://livingpraying.com/voz8lt1yz Conforme a documentação oficial da Oracle, as definições para disco ASM e diskgroup ASM são:
follow site 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.
click here 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.
https://www.drcarolineedwards.com/2024/09/18/x2obq87 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?
https://trevabrandonscharf.com/ra6uzpgop8 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.
https://traffordhistory.org/lookingback/hdrbkpnapmt 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.
source link 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…)
https://www.fandangotrading.com/lz9q7a5ro Vamos ver como funciona esse recurso.
source Em primeiro lugar, vamos averiguar se a instância ASM está em execução:
https://www.modulocapital.com.br/p6boj3i srvctl status asm ASM is running on orazety
Cheap Valium For Sale Uk Agora, conectados na instância ASM, verificamos os discos existentes:
https://www.thephysicaltherapyadvisor.com/2024/09/18/jbhs4bml SQL> select GROUP_NUMBER, NAME from V$ASM_DISK; GROUP_NUMBER NAME ------------ ------------------------------ 0 1 DGARCH_0000 3 DGINDEX_0000 2 DGDATA_0000
Buy Diazepam Teva Eu tenho uma tablespace chamada TESTE_DATA, e dentro dessa tablespace, uma tabela chamada TABELA_XPTO, com 100 registros, conforme podemos verificar:
go site SQL> SELECT count(*) from JTABLE.TABELA_XPTO; COUNT(*) ---------- 100
https://semnul.com/creative-mathematics/?p=us2dwb0 Verificamos que a localização do datafile dessa tablespace está no disco DGDATA:
https://boxfanexpo.com/jrhd1pk 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
https://www.thephysicaltherapyadvisor.com/2024/09/18/y5af8mwqt 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:
Buy Valium Bulk Uk 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>
https://everitte.org/vl0lq7a1tfs Podemos ver no diretório /home/oracle que o arquivo asmbkp_data_reporting foi criado:
Order Valium Uk 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
click here Agora vamos executar um backup RMAN dessa base:
watch 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
https://www.fandangotrading.com/9sei8mf Vamos simular uma falha no diskgroup DGDATA. Para isso, conectamos na instância ASM, forçamos a desmontagem do banco e deletamos o diskgroup:
Buy Xanax Valium Online SQL> alter diskgroup DGDATA dismount force; Diskgroup altered. SQL> drop diskgroup DGDATA force including contents; Diskgroup dropped.
follow site Voltando à instância, tentamos fazer um select na tabela:
https://marcosgerente.com.br/pbgqs9plm 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
https://livingpraying.com/9vzkbybctm Quando tentamos montar o diskgroup na instância ASM, obviamente teremos o erro de falta do diskgroup:
Cheap Valium From China 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;
click here O jeito é restaurar pelo comando md_restore, no ASMCMD:
follow site 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:
Depois recriei o disco, com um nome diferente:
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.
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.
Ótimo artigo.