Administração de Banco de Dados
De DTI Wiki
Clusterware
Visão geral
- O Clusterware é mantido por três deamons:
- - crsd (Cluster Ready Services CRS)
- - cssd (Cluster Sincronization Services CSS)
- - evmd (Event Manager EVM)
- Os logs do Clusterware possuem as seguintes localizações:
- - Alert log geral do Clusterware - $CRS_HOME/log/<node>/alert_<node>.log
- - Log do CRS - $CRS_HOME/log/<node>/crsd
- - Log do CSS - $CRS_HOME/log/<node>/cssd
- - Log do EVM - $CRS_HOME/log/<node>/evmd
- - Log do VIP e ONS (Virtual IP e Oracle Notification Services) - $CRS_HOME/log/<node>/rac
- - Log de ORC Applicatons - $CRS_HOME/log/<node>/client
- Para iniciar, parar ou verificar o estado dos serviços do Clusterware utiliza-se crsctl:
# $CRS_HOME/bin/crsctl -h Usage: crsctl add - add a resource, TYPE OR other entity crsctl CHECK - CHECK a service, resource OR other entity crsctl config - output autostart configuration crsctl debug - obtain OR modify debug state crsctl DELETE - DELETE a resource, TYPE OR other entity crsctl disable - disable autostart crsctl discover - discover DHCP server crsctl enable - enable autostart crsctl get - get an entity VALUE crsctl getperm - get entity permissions crsctl lsmodules - list debug modules crsctl modify - modify a resource, TYPE OR other entity crsctl query - query service state crsctl pin - pin the nodes IN the node list crsctl relocate - relocate a resource, server OR other entity crsctl REPLACE - replaces the location OF voting files crsctl RELEASE - RELEASE a DHCP lease crsctl request - request a DHCP lease crsctl setperm - SET entity permissions crsctl SET - SET an entity VALUE crsctl START - START a resource, server OR other entity crsctl status - get status OF a resource OR other entity crsctl stop - stop a resource, server OR other entity crsctl unpin - unpin the nodes IN the node list crsctl unset - unset an entity VALUE, restoring its DEFAULT
- Verificando o estado dos serviços do Clusterware
# $CRS_HOME/bin/crsctl status resource -t -------------------------------------------------------------------------------- NAME TARGET STATE SERVER STATE_DETAILS -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.DADOS.dg ONLINE ONLINE oractest1 ONLINE ONLINE oractest2 ora.FRA.dg ONLINE ONLINE oractest1 ONLINE ONLINE oractest2 ora.LISTENER.lsnr ONLINE ONLINE oractest1 ONLINE ONLINE oractest2 ora.VOTING.dg ONLINE ONLINE oractest1 ONLINE ONLINE oractest2 ora.asm ONLINE ONLINE oractest1 Started ONLINE ONLINE oractest2 Started ora.gsd OFFLINE OFFLINE oractest1 OFFLINE OFFLINE oractest2 ora.net1.network ONLINE ONLINE oractest1 ONLINE ONLINE oractest2 ora.ons ONLINE ONLINE oractest1 ONLINE ONLINE oractest2 -------------------------------------------------------------------------------- CLUSTER Resources -------------------------------------------------------------------------------- ora.LISTENER_SCAN1.lsnr 1 ONLINE ONLINE oractest2 ora.LISTENER_SCAN2.lsnr 1 ONLINE ONLINE oractest1 ora.LISTENER_SCAN3.lsnr 1 ONLINE ONLINE oractest1 ora.cvu 1 ONLINE ONLINE oractest1 ora.oc4j 1 ONLINE ONLINE oractest1 ora.oractest1.vip 1 ONLINE ONLINE oractest1 ora.oractest2.vip 1 ONLINE ONLINE oractest2 ora.scan1.vip 1 ONLINE ONLINE oractest2 ora.scan2.vip 1 ONLINE ONLINE oractest1 ora.scan3.vip 1 ONLINE ONLINE oractest1 ora.test.db 1 ONLINE ONLINE oractest1 OPEN 2 ONLINE ONLINE oractest2 OPEN
Administração
- O Clusterware, a base do Oracle RAC, é administrada principalmente utilizando-se a ferramenta crsctl. Esta ferramenta deve ser utilizada com o usuário root.
- Abaixo estão listados alguns exemplos de uso.
Verificar o estado de todos os deamons do Clusterware
# $CRS_HOME/bin/crsctl CHECK crs CRS-4638: Oracle High Availability Services IS online CRS-4537: CLUSTER Ready Services IS online CRS-4529: CLUSTER Synchronization Services IS online CRS-4533: Event Manager IS online
Verificar as versões em uso instaladas do Clusterware
# $CRS_HOME/bin/crsctl query crs activeversion Oracle Clusterware active version ON the CLUSTER IS [11.2.0.3.0] # $CRS_HOME/bin/crsctl query crs softwareversion Oracle Clusterware version ON node [oractest1] IS [11.2.0.3.0]
Verificar e alterar parâmetros do OCR (Oracle Cluster Registry)
- Verificar o valor do parâmetro css misscount gravado no OCR
# $CRS_HOME/bin/crsctl get css misscount CRS-4678: SUCCESSFUL get misscount 30 FOR CLUSTER Synchronization Services.
- Alterar o valor do parâmetro css misscount para 3600 segundos
# $CRS_HOME/bin/crsctk SET css misscount 3600 CRS-4684: SUCCESSFUL SET OF parameter misscount TO 3600 FOR CLUSTER Synchronization Services.
Listar os modulos carregados nos deamons do Clusterware
# $CRS_HOME/bin/crsctl lsmodules crs List CRSD Debug Module: AGENT List CRSD Debug Module: AGFW List CRSD Debug Module: CLSFRAME List CRSD Debug Module: CLSVER List CRSD Debug Module: CLUCLS List CRSD Debug Module: COMMCRS List CRSD Debug Module: COMMNS List CRSD Debug Module: CRSAPP List CRSD Debug Module: CRSCCL List CRSD Debug Module: CRSCEVT List CRSD Debug Module: CRSCOMM List CRSD Debug Module: CRSD List CRSD Debug Module: CRSEVT List CRSD Debug Module: CRSMAIN List CRSD Debug Module: CRSOCR List CRSD Debug Module: CRSPE List CRSD Debug Module: CRSPLACE List CRSD Debug Module: CRSRES List CRSD Debug Module: CRSRPT List CRSD Debug Module: CRSRTI List CRSD Debug Module: CRSSE List CRSD Debug Module: CRSSEC List CRSD Debug Module: CRSTIMER List CRSD Debug Module: CRSUI List CRSD Debug Module: CSSCLNT List CRSD Debug Module: OCRAPI List CRSD Debug Module: OCRASM List CRSD Debug Module: OCRCAC List CRSD Debug Module: OCRCLI List CRSD Debug Module: OCRMAS List CRSD Debug Module: OCRMSG List CRSD Debug Module: OCROSD List CRSD Debug Module: OCRRAW List CRSD Debug Module: OCRSRV List CRSD Debug Module: OCRUTL List CRSD Debug Module: SuiteTes List CRSD Debug Module: UiServer # $CRS_HOME/bin/crsctl lsmodules css List CSSD Debug Module: CLSF List CSSD Debug Module: CSSD List CSSD Debug Module: GIPCCM List CSSD Debug Module: GIPCGM List CSSD Debug Module: GIPCNM List CSSD Debug Module: GPNP List CSSD Debug Module: OLR List CSSD Debug Module: SKGFD # $CRS_HOME/bin/crsctl lsmodules evm List EVMD Debug Module: CLSVER List EVMD Debug Module: CLUCLS List EVMD Debug Module: COMMCRS List EVMD Debug Module: COMMNS List EVMD Debug Module: CRSCCL List EVMD Debug Module: CRSOCR List EVMD Debug Module: CSSCLNT List EVMD Debug Module: EVMAGENT List EVMD Debug Module: EVMAPP List EVMD Debug Module: EVMCOMM List EVMD Debug Module: EVMD List EVMD Debug Module: EVMDMAIN List EVMD Debug Module: EVMEVT List EVMD Debug Module: OCRAPI List EVMD Debug Module: OCRCLI List EVMD Debug Module: OCRMSG
Parar o Clusterware e seus deamons do nó onde o comando é executado
# $CRS_HOME/bin/crsctl stop crs
Iniciar o Clusterware e seus deamons do nó onde o comando é executado
# $CRS_HOME/bin/crsctl START crs
Administrando o Oracle Cluster Registry (OCR)
- A administração do OCR é feita com vários comandos, entre eles os principais são ocrconfig, ocrdump e ocrcheck, e devem ser utilizados com o root.
Verificar a integridade do OCR
- Após a execução do comando um log é gerado em $CRS_HOME/log/<hostname>/client/ocrcheck_<pid>.log
# $CRS_HOME/bin/ocrcheck Status OF Oracle CLUSTER Registry IS AS follows : Version : 3 Total SPACE (kbytes) : 262120 Used SPACE (kbytes) : 3004 Available SPACE (kbytes) : 259116 ID : 1646756133 Device/File Name : +VOTING Device/File integrity CHECK succeeded Device/File NOT configured Device/File NOT configured Device/File NOT configured Device/File NOT configured CLUSTER registry integrity CHECK succeeded Logical corruption CHECK succeeded
Executar um dump do OCR
- Gera um arquivo legível (OCRDUMPFILE) com o conteúdo do OCR no diretório onde foi executado
# $CRS_HOME/bin/ocrdump
Verificar os backups físicos existentes do OCR
# $CRS_HOME/bin/ocrconfig -showbackup
Executar um backup lógico do OCR
# $CRS_HOME/bin/ocrconfig -export /home/oracle/OCR.bkp
Importar um backup lógico do OCR
# $CRS_HOME/bin/ocrconfig -import /home/oracle/OCR.bkp
Verificar se o OCR está acessível de todos os nós do Cluster
- O comando abaixo deve ser usadom com o usuário oracle
$ $CRS_HOME/bin/cluvfy comp ocr -n oractest1,oractest2 Verificando integridade OCR Verificando integridade de OCR... Verificando a ausência de uma configuração não clusterizada... Todos os nós livres de configurações não clusterizadas, somente locais Verificação de execução do ASM aprovada. O ASM está em execução em todos os nós especificados Verificando o arquivo de configuração do OCR "/etc/oracle/ocr.loc"... Verificação de arquivo de configuração do OCR "/etc/oracle/ocr.loc" bem-sucedida O grupo de discos da localização do ocr "+VOTING" disponível em todos os nós NOTE: Esta verificação não detecta a integridade do conteúdo do OCR. Execute 'ocrcheck' como um usuário privilegiado para verificar o conteúdo do OCR. Verificação de integridade de OCR aprovada A verificação de integridade OCR foi bem-sucedida.
Administrando o Voting Disk
- O Voting Disk é o cetro de PING dos nós. Periodicamente os nós gravam seu estado nele, então o Clusterware sabe qual nó está operacional no RAC.
- Os Backups do Voting Disk são executados apenas manualmente e são necesários apenas após a instalação do Clusterware, ou na adição ou remoção de nós.
Verificar quais os Voting Disks ativos
$ $CRS_HOME/bin/crsctl query css votedisk ## STATE File Universal Id File Name Disk group -- ----- ----------------- --------- --------- 1. ONLINE 7e1462958ca14f12bf9530336bcbe319 (/dev/asmvoting1) [VOTING] Located 1 voting disk(s).
Executar backup de um Voting Disk
$ dd if=/dev/asmvoting1 of=/home/oracle/asmvoting1.bkp
Adicionar um espelho ao voting disk
# $CRS_HOME/bin/crsctl stop crs # $CRS_HOME/bin/crsctl add css votedisk /u01/oradata/votingdisk -mirror -force # $CRS_HOME/bin/crsctl START crs
Remover um espelho do voting disk
# $CRS_HOME/bin/crsctl stop crs # $CRS_HOME/bin/crsctl DELETE css votedisk /u01/oradata/votingdisk -mirror -force # $CRS_HOME/bin/crsctl START crs
Adicionando nó ao Cluster
- Para adicionar um nó ao Cluster é necessário:
- - Instalar o hardware
- - Instalar o SO (Deve ser exatamente o mesmo utilizado nos outros nós)
- - Configurar os discos compartilhados
- - Instalar o Clusterware (Executar o comando abaixo de um dos nós já exsitentes com o usuário oracle)
$ $CRS_HOME/oui/bin/addNode.sh
- - Instalar o RDBMS (Executar o comando abaixo de um dos nós já exsitentes com o usuário oracle)
$ $ORACLE_HOME/oui/bin/addNode.sh
Iniciando e parando serviços do Oracle RAC
- A administração dos serviços administrados pelo Clusterware é feita com os utilitários srvctl e crsctl
- As instâncias do banco de dados, o próprio banco de dados e os listeners devem ser administrados por este utilitário e não pelos comandos utilizados por uma single instance (sqlplus e ou lsnrctl, por exemplo)
- O utilitário crsctl deve ser executado como root a partir do diretório HOME do grid (# $CRS_HOME/bin)
Parar todos os serviços administrados pelo Clusterware
# crsctl stop resource -all
Iniciar todos os serviços administrados pelo Clusterware
# crsctl start resource -all
Parar o listener de um nó
$ srvctl stop listener -n oractest2
Iniciar o listener de um nó
$ srvctl start listener -n oractest2
Verificar o estado do listener
$ srvctl status listener O Listener LISTENER está ativado O Listener LISTENER está em execuçãoo no(s) nó(s): oractest1,oractest2
Parar uma instância de um banco de dados
$ srvctl stop instance -d test -i test2
Iniciar uma instância de um banco de dados
$ srvctl start instance -d test -i test2
Verificar o estado de uma instância de um banco de dados
$ srvctl status instance -d test -i test2 A instãncia test2 está em execuçãoo no nó oractest2
Parar a instância ASM de um nó.
- Pára primeiro a instância do BD e depois a intância do ASM
$ srvctl stop asm -n oractest2 -f
Iniciar a instância ASM de um nó.
- Inicia somente a instância do ASM, a intância do BD deve ser iniciada depois
$ srvctl start asm -n oractest2
Verificar o estado da instância ASM
$ srvctl status asm O ASM está em execução em oractest1,oractest2
Parar o banco de dados incluindo todas as instâncias
$ srvctl stop database -d test
Iniciar o banco de dados e as instâncias
$ srvctl start database -d test
Verificar o estado do banco de dados
$ srvctl status database -d test A instância test1 está em execuçãoo no nó oractest1 A instância test2 está em execuçãoo no nó oractest2
Redo Logs
Status
- Verificando o status dos grupos de redo log
SQL> SELECT * FROM v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME ---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- ----------- 1 1 421 52428800 1 NO CURRENT 6866987849 18/10/2011 2 1 419 52428800 1 YES INACTIVE 6866974300 18/10/2011 3 1 420 52428800 1 YES ACTIVE 6866974667 18/10/2011
- Verificando os arquivos de redo log
SQL> SELECT * FROM v$logfile; GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE ---------- ------- ------- -------------------------------------------------------------------------------- --------------------- 3 ONLINE /u01/app/oracle/flash_recovery_area/ORABKP/onlinelog/redo03.log NO 2 ONLINE /u01/app/oracle/flash_recovery_area/ORABKP/onlinelog/redo02.log NO 1 ONLINE /u01/app/oracle/flash_recovery_area/ORABKP/onlinelog/redo01.log NO
Manutenção
- Adicinar um membro a um grupo
- SQL> alter database add logfile member '/u01/app/oracle/flash_recovery_area/ORABKP/onlinelog/redo01b.log' to group 1;
- Adicinanar um grupo
- SQL> alter database add logfile group 2 '/u01/app/oracle/flash_recovery_area/ORABKP/onlinelog/redo02.log' size 50M;
- Realocar um membro de um grupo
- Se o log file for o corrente execute um log switch
- SQL> alter system switch logfile;
- Copie o redo log file para a sua nova localização utilizando comandos do SO
- Utilize o comando ALTER DATABASE para efetuar as mudanças no control file
- SQL> alter database rename file '/u01/app/oracle/flash_recovery_area/ORABKP/onlinelog/redo02.log'
- SQL> to '/u01/app/oracle/flash_recovery_area/ORABKP/onlinelog/redo02a.log';
- Excluir um grupo
- SQL> alter database drop logfile group 3;
- Forçando gravação nos datafiles
- Quando um grupo está ativo (ACTIVE) significa que ele é necessário para recuperação, ou seja, seu conteúdo ainda não foi descarregado para os datafiles, o que pode ser feito através de um checkpoint
- SQL> aler system checkpoint;
- Limpar grupo
- Um redo log file pode ser corrompido, neste caso é possível limpar o grupo
- SQL> alter database clear logfile group 2;
- Se o redo log file não estiver arquivado
- SQL> alter database clear unarchived logfile group 2;
Recuperação
- Redo log não corrente e arquivado
- Se um redo log já está arquivado, sua perda pode ser ignorada, apenas é necessário recriá-lo
- Se o banco estiver aberto
- SQL> alter database clear logfile group <group#>;
- Se o banco estiver fechado
- SQL> startup mount;
- SQL> alter database clear logfile group <group#>;
- SQL> alter database open;
- Se o banco estiver fechado e for aberto com startup ocorrerá o erro similar ao mostrado abaixo
- Banco de dados montado
- ORA-00313: a abertura falhou para os membros do grupo 2 de log do thread 1
- ORA-00312: thread 2 do log 1 on-line:'/u01/app/oracle/flash_recovery_area/ORABKP/onlinelog/redo02a.log'
- ORA-00312: thread 2 do log 1 on-line:'/u01/app/oracle/flash_recovery_area/ORABKP/onlinelog/redo02b.log'
- Redo log não corrente e não arquivado
- Se o redo log é perdido antes de ser arquivado algumas transações também são perdidas. É necessário uma recuperação incompleta do banco de dados.
- Iniciar o banco no estado NOMOUNT
- SQL> startup nomount;
- Restaurar o ultimo backup do controlfile
- RMAN> restore controlfile from '<backup tag location>';
- Restaurar o banco de dados
- RMAN> alter database mount;
- RMAN> restore database;
- Recuperar o banco de dados até a data do último log arquivado
- RMAN> recover database until time "to_date('28/10/2011 11:03:00','dd/mm/yyyy hh24 hh:mi:ss')";
- Abrir o banco de dados com RESETLOGS
- RMAN> alter database open resetlogs;
- Fazer backup completo da base de dados
- Redo log corrente e banco fechado normalmente
- Seguir os mesmos passos do Redo log não corrente e não arquivado
- Redo log corrente e banco fechado de forma anormal (abort ou crash)
- Seguir os mesmos passos do Redo log não corrente e não arquivado
Problemas com Oracle
Enterprise Manager
Enterprise Manager não atualiza
- Solução: Recriar o repositório do Enterprise Manager. Será necessário ter a senha dos usuários SYS, SYSMAN, DBSNMP e o número da porta do Listener.
- Comando: emca -config dbcontrol db -repos recreate
- Referência: Configuring Database Control with EMCA
Erro ao tentar expurgar os históricos dos jobs através do Enterprise Manager
- Solução: Expurgar os históricos utilizando o pacote DBMS_SCHEDULER.
- Comando: DBMS_SCHEDULER.PURGE_LOG()
- Referência: PURGE_LOG Procedure
Erro após troca de horário de verão
- Após a troca de horário de verão o EM apresenta o erro "java.lang.Exception: IOException in sending Request", porque o TIMEZONE fica desconfigurado devido a troca de horário.
- Solução.
- Parar o Enterprise Manager
- emctl stop dbconsole
- Criar variável de ambiente no Bash_profile
- TZ=Etc/GMT+3
- export TZ
- Para horário de verão utilize: TZ=Etc/GMT+2
- Para horário de inverno utilize: TZ=Etc/GMT+3
- Rodar o comando abaixo
- emctl resetTZ agent
- Ao finalizar a execução aparecerá uma linha de comando similar a esta:
- exec mgmt_target.set_agent_tzrgn('oralnx.upf.br:1830','Etc/GMT+3')
- Conecte com o usuário SYSMAN usando o SQLPLUS e execute o comando gerado.
- sqlplus /nolog
- SQL>conn sysman/senha
- SQL>exec mgmt_target.set_agent_tzrgn('oralnx.upf.br:1830','Etc/GMT+3');
- SQL>commit;
- Iniciar o Enterprise Manager
- emctl start dbconsole
Erro ao recriar repositório
- Ao tentar recriar o repositório do Enterprise Manager ocorre o erro "java.lang.OutOfMemoryError"
- Procurar o arquivo oraparam.ini
- $ cd $ORACLE_BASE
- $ find . -name oraparam.ini -print
- editar o arquivo orapram.ini e aumentar o parâmetro JRE_MEMORY_OPTIONS
- JRE_MEMORY_OPTIONS=" -mx128m"
Conexão
- Privilégios insuficientes ao tentar logar sys como sysdba
- Solução: Criar arquivo de senhas
- Comando: orapwd file=filename password=password entries=max_users (onde password é a senha do usuário sys)
- Para verificar que usuários possuem permissão de conexão como sysdba, execute o comando abaixo.
- select * from v$pwfile_users;
- Referência: Oracle Utilities, orapwd
Mudança de horário no servidor
- Banco não apresenta horário de verão no cliente (sysdate, systimestamp)
- Solução: Parar e reiniciar EM, listener e banco
- Pare o Enterprise manager
- emctl stop dbconsole
- Caso ocorra erro no fechamento do EM mate o processo emagent e o processo java que existir.
- ps -el | grep emagent
- kill <pid>
- ps -el | grep java
- kill <pid>
- Pare o listener
- lsnrctl stop
- Pare o banco
- $ sqlplus /nolog
- SQL> conn / as sysdba
- SQL> shutdown immediate;
- Levante o banco
- SQL> startup;
- Levante o listener
- lsnrctl start
- Levante o enterprilse manager
- emctl start dbconsole
- Caso ocorra erro ao iniciar o EM siga os passos para correção de erro após troca de horário de verão
- Retorno ao horário de inverno
- Referência para os comandos abaixo clique aqui
- Alguns minutos antes da troca de horário, pare o EM, listener e banco
- Aguarde no mínimo 1 hora para não sobrescrever os logs
- Reinicie e banco, listener e EM
- Caso ocorra erro ao iniciar o EM siga os passos para correção de erro após troca de horário de verão
Excluir tablespace temporária
- A exclusão da tablespace temporária trava
- Solução: Finalizar as sessões que ainda estão utilizando a tablespace temporária
- 1. Crie uma nova tablespace temporária e torne-a default
- SQL> create temporary tablespace temp2 tempfile '/u01/app/oracle/oradata/orcl/temp02.dbf' size 1G autoextend on next 1G 2 maxsize 30G extent management local uniform size 1G;
- SQL> alter database default temporary tablespace temp2;
- 2. Verifique o uso da tablespace temporária que deseja excluir
SQL> SELECT inst_id, sid, serial#, machine, program FROM gv$session WHERE (inst_id, username, saddr) IN (SELECT inst_id, username, session_addr FROM gv$tempseg_usage WHERE tablespace = 'TEMP') ORDER BY program; INST_ID SID SERIAL# MACHINE PROGRAM ---------- ---------- ---------- --------------------------- ------------------------------------------------ 1 492 35974 BOLSAS\BOLSAS_ANDERSON ac_alufin.exe 1 1257 63414 WORKGROUP\SGC01 ac_aluno.exe 1 629 31767 UPF\RECEPCAO-DTI ac_curr.exe 1 312 28284 CAA\GUICHE13 ac_matric.exe 1 477 22448 UPF\FEFF_EXP ac_prepmat.exe 1 844 42751 UPF\CEPEAC011 ac_procaca.exe
- 3. Mate as sessões ou aguarde o término das mesmas.
- SQL> alter system kill session 'sid,serial#';
- 4. Exclua a tablespace temporária antiga
- SQL> drop tablespace temp including contents and datafiles;
RMAN
Criação do recovery catalog
- No banco de dados do catálogo, criar um tablespace para o catálogo
- SQL> create smallfile tablespace RMANTS datafile '/u01/app/oracle/oradata/orabkp/rman01.dbf' size 200M logging extent management local segment space management auto;
- Criar um usuário para o RMAN
- SQL> create user rman identified by senha default tablespace rmants temporary tablespace temp quota unlimited on rmants;
- SQL> grant recovery_catalog_owner, connect, resource to rman;
- Criar catálogo
- $ rman catalog rman/senha@instancia
- RMAN> create catalog;
- RMAN> exit;
Registrar banco de dados alvo
- No RMAN, conectar nas bases alvo e catálogo
- $ rman target sys/senha@instancia catalog rman/senha@instancia
- Registrar a base alvo
- RMAN> register database;
- database registered in recovery catalog
- starting full resync of recovery catalog
- full resinc complete
Apagando registro do banco de dados alvo
- No RMAN, conectar nas bases alvo e catálogo
- $ rman target sys/senha@instancia catalog rman/senha@instancia
- Apagar o registro da base alvo
- RMAN> unregister database noprompt;
Problemas com Backup
- Erro ao fazer backup (Expected archivelog not found)
- ORCL:oracle]$rman target sys/***** catalog rman/******@rman
- RMAN>crosscheck copy of archivelog all;
- RMAN>delete obsolete;
- Fazer backup full da base de dados
- Referência: On Call DBA Support
Cópia de Dados
Clonar base de dados
- Faça um backup full do seu banco de origem;
- Verifique se há disponibilidade de espaço físico no seu ambiente destino;
- Transfira dados, conjunto de arquivos do seu banco origem (redos,controls e datafiles), para o seu ambiente destino, obedecendo à mesma estrutura do ambiente de origem. O banco de dados origem deve estar offline (execute um shutdown). Você pode obter as informações do que você deve copiar através das visões V$DATAFILE, V$LOGFILE e V$CONTROLFILE;
- Altere os arquivos relacionados à parte de conectividade Oracle, para que eles apontem para o seu novo ambiente (hostname, port, SID e no caso de quem usa DOMINIO o nome correto do novo domínio). São eles: LISTENER.ORA e TNSNAMES.ORA. Os arquivos citados neste item podem ser encontrados no diretório ORACLE_HOME/network/admin;
- Atenção: Altere o arquivo de inicialização ( init.ora ), para que reflita exatamente em sua parametrização no seu novo ambiente. Atente para os seguintes parâmetros DB_NAME, CONTROL_FILES,BACKGROUND_DUMP_DEST, USER_DUMP_DEST e LOG_ARCHIVE_DEST;
- Você vai precisar recriar o arquivo de controle (CONTROLFILE), caso queira mudar o nome da instância DESTINO. Veremos como proceder em seguida;
- E, por fim, inicialize seu novo ambiente.
Recriar Controlfile
- Gerar um trace do seu arquivo de controle dentro do diretório USER_DUMP_DEST;
- ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
- Recriar o ambiente destino com nome diferente do ambiente origem (se necessário);
- No trace gerado, substituir a cláusula REUSE DATABASE "SID_ORIGEM" por SET DATABASE "SID_DESTINO";
- Criar novo arquivo de controle;
- $sqlplus / as sysdba
- SQL> startup nomount
- SQL> @controlfile_destino.sql
- SQL> alter database open resetlogs;
Duplicar Base de Dados com RMAN
- Duplicando uma base de dados em outro servidor com a mesma estrutura de diretórios.
- Se já existir um banco de dados na instância auxiliar (onde será feito a duplicação) ele deverá ser excluído;
- Criar um Oracle Password File para a instância auxiliar (se ainda não existir);
- Criar um arquivo de parâmeros de inicialização (init.ora) para a instância auxiliar;
- DB_NAME deve ser diferente do banco a ser duplicado e será o mesmo utilizado no comando DUPLICATE.
- Iniciar a instância auxiliar;
- STARTUP FORCE NOMOUNT
- Iniciar a instância a ser duplicada (se ainda não estiver iniciada);
- STARTUP MOUNT ou STARTUP
- Certifique-se de ter todos os backups necessários e os Archived Redo Logs;
- Os arquivos devem ser copiados para a máquina auxiliar (destino) no mesmo caminho de diretório da máquina origem ou devem estar acessíveis pela máquina auxiliar.
- Executar o comando para duplicação;
- % rman TARGET sys/oracle@trgt CATALOG rman/cat@catdb AUXILIARY sys/oracle@aux
- RUN { ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;
- DUPLICATE TARGET DATABASE TO dupdb
- PFILE = /u01/app/oracle/product/10.2.0/dubdb/dbs/initdupdb.ora
- NOFILENAMECHECK; }
- NOFILENAMECHECK é especificado porque a duplicação está sendo feita com a mesma estrutura de diretórios do servidor origem.
- Criar SPFILE.
Recuperação de dados com RMAN
Recuperando control files (Perda de todos os control files. Banco no modo archivelog)
- Pare o banco e inicie no estado NOMOUNT.
- SQL> shutdown abort;
- SQL> startup nonount;
- No RMAN
- $ rman target sys/senha catalog rman/senha@instancia
- RMAN> restore contolfile;
- Coloque o banco no estado MOUNT
- SQL> alter database mount;
- No RMAN, execute um RECOVER DATABASE
- RMAN> recover database;
- Coloque o banco no estado OPEN;
- SQL> alter database open resetlogs;
- Faça backup da base;
Recuperando tablespace em um banco aberto (Banco no modo archivelog)
- Liste os datafiles que precisam ser restaurados/recuperados consultando a visão V$DATAFILE_HEADER.
- SQL> select name, file#, tablespace_name, status, error, recover, fuzzy
- 2 from v$datafile_header
- 3 where tablespace_name = 'NOMETABLESPACE';
- SQL> select name, file#, tablespace_name, status, error, recover, fuzzy
- Execute os comandos do RMAN.
- run{ sql "alter tablespace NOMETABLESPACE offline immediate";
- restore tablespace NOMETABLESPACE;
- recover tablespace NOMETABLESPACE;
- sql "alter tablespace NOMETABLESPACE online"; }
- Verifique se a tablespace foi recuperada.
- Faça backup da base de dados.
Recuperando tablespace em um banco fechado (Banco no modo archivelog)
- Coloque o banco no estado MOUNT
- SQL> startup mount;
- Liste os datafiles que precisam ser restaurados/recuperados.
- SQL> SELECT ts.ts#, ts.name, dfl.name, dfh.error, dfh.file#, dfh.status, dfh.recover, dfh.fuzzy
- 2 FROM v$tablespace ts, v$datafile dfl, v$datafile_header dfh
- 3 WHERE dfl.ts# = ts.ts#
- 4 AND dfh.file# = dfl.file#
- 5 AND dfh.error IS NOT NULL
- 6 ORDER BY ts.name;
- SQL> SELECT ts.ts#, ts.name, dfl.name, dfh.error, dfh.file#, dfh.status, dfh.recover, dfh.fuzzy
- Execute os comandos do RMAN.
- run{ restore tablespace NOMETABLESPACE1;
- restore tablespace NOMETABLESPACE2;
- recover tablespace NOMETABLESPACE1;
- recover tablespace NOMETABLESPACE2;}
- Coloque o banco no estado OPEN.
- SQL> alter database open;
Recuperação de tabelas com RECYCLEBIN
Existem duas views para o recyclebin, USER_RECYCLEBIN e DBA_RECYCLEBIN. Por conveniência, o synonym RECYCLEBIN aponta para USER_RECYCLEBIN. O recyclebin é habilitado por default no Oracle 10g, e pode ser desabilitado ou habilitado com o parâmetro de inicializção RECYCLEBIN.
Quando habilitado, as tabelas excluídas não são apagadas instantaneamente, elas são renomeadas para um nome gerado pelo sistema iniciado com BIN$, o mesmo acontece com os seus objetos associados (índices, triggers, segumentos LOB, etc).
Os dados da tabela também são mantidos e continuam ocupando espaço no tablespace. Eles só serão removidos quando a tabela for retidada através do comando PURGE ou quando não houver mais espaço no tablespace. Neste caso o oracle exlcui uma por vez, começando pela mais antiga. Se os datafiles do tablespace forem AUTOEXTEND o oracle exlcuirá os objetos do recyclebin antes de estender o datafile.
Para excluir a tabela sem que ela fique no recyclebin deve ser usado o comando DROP TABLE nometabela PURGE.
Verificando tabelas excluídas
Para verificar os objetos contidos no recyblebin utilize os comandos abaixo:
SQL> -- Com usuário de desenvolvimento. SQL> SELECT object_name, original_name, TYPE, can_undrop AS "UND", can_purge AS "PUR", droptime, base_object, purge_object, ts_name 2 FROM recyclebin 3 ORDER BY droptime; OBJECT_NAME ORIGINAL_NAME TYPE UND PUR DROPTIME BASE_OBJECT PURGE_OBJECT TS_NAME ------------------------------ -------------------------------- ------------------------- --- --- ------------------- ----------- ------------ ------------------------------ BIN$kyOIHk+1k2PgQAAK0zJLHw==$0 LOGCTARECEBPAGAR TABLE YES YES 2010-10-21:15:05:23 1630922 1630922 DAT00064 BIN$lIqyyoVpYqPgQAAK0zIVPA==$0 OBRTIPOPROGRAMACAO TABLE YES YES 2010-11-08:11:35:33 1642196 1642196 DAT00064 BIN$lI8k6Z6vhSrgQAAK0zI2kA==$0 OBRESCALAEMPENHO TABLE YES YES 2010-11-08:15:42:12 1642217 1642217 DAT00064 BIN$lI8k6Z69hSrgQAAK0zI2kA==$0 OBRESCALAEMPENHO TABLE YES YES 2010-11-08:15:45:04 1642218 1642218 DAT00064 BIN$lJBIElBpXITgQAAK0zIWZQ==$0 OBRTEMPO TABLE YES YES 2010-11-08:17:03:37 1642200 1642200 DAT00064 BIN$lKKFKVHiX57gQAAK0zJuYQ==$0 OBRESCALAPROGRAMACAO TABLE YES YES 2010-11-09:16:00:47 1642222 1642222 DAT00064 BIN$lKKFKVHpX57gQAAK0zJuYQ==$0 OBRPROGRAMACAO TABLE YES YES 2010-11-09:16:00:55 1642198 1642198 DAT00064 BIN$lMbtdaewq0jgQAAK0zI5/Q==$0 OBRESCALAEMPENHO TABLE YES YES 2010-11-11:11:26:55 1642220 1642220 DAT00064 BIN$lT65FHAqbcbgQAAK0zJxVg==$0 BEMFOTO TABLE YES YES 2010-11-17:10:22:12 1642188 1642188 DAT00064 BIN$lT+M+p0ZSSfgQAAK0zJ59g==$0 OBRTEMPO TABLE YES YES 2010-11-17:11:21:27 1642224 1642224 DAT00064 BIN$lfj7TStAQBTgQAAK0zIczQ==$0 HISTCOBEMAIL TABLE YES YES 2010-11-26:16:35:07 1652719 1652719 DAT01024 BIN$lfj7TSs/QBTgQAAK0zIczQ==$0 PK_HISTCOBEMAIL INDEX NO YES 2010-11-26:16:35:07 1652719 1652720 IDX00256 SQL> -- Com usuário SYS SQL> SELECT object_name, owner, original_name, TYPE, can_undrop AS "UND", can_purge AS "PUR", droptime, base_object, purge_object, ts_name 2 FROM dba_recyclebin 3 WHERE owner = 'ADDESENV' 4 ORDER BY droptime; OBJECT_NAME OWNER ORIGINAL_NAME TYPE UND PUR DROPTIME BASE_OBJECT PURGE_OBJECT TS_NAME ------------------------------ ------------------------------ -------------------------------- ------------------------- --- --- ------------------- ----------- ------------ ---------- BIN$kyOIHk+1k2PgQAAK0zJLHw==$0 ADDESENV LOGCTARECEBPAGAR TABLE YES YES 2010-10-21:15:05:23 1630922 1630922 DAT00064 BIN$lIqyyoVpYqPgQAAK0zIVPA==$0 ADDESENV OBRTIPOPROGRAMACAO TABLE YES YES 2010-11-08:11:35:33 1642196 1642196 DAT00064 BIN$lI8k6Z6vhSrgQAAK0zI2kA==$0 ADDESENV OBRESCALAEMPENHO TABLE YES YES 2010-11-08:15:42:12 1642217 1642217 DAT00064 BIN$lI8k6Z69hSrgQAAK0zI2kA==$0 ADDESENV OBRESCALAEMPENHO TABLE YES YES 2010-11-08:15:45:04 1642218 1642218 DAT00064 BIN$lJBIElBpXITgQAAK0zIWZQ==$0 ADDESENV OBRTEMPO TABLE YES YES 2010-11-08:17:03:37 1642200 1642200 DAT00064 BIN$lKKFKVHiX57gQAAK0zJuYQ==$0 ADDESENV OBRESCALAPROGRAMACAO TABLE YES YES 2010-11-09:16:00:47 1642222 1642222 DAT00064 BIN$lKKFKVHpX57gQAAK0zJuYQ==$0 ADDESENV OBRPROGRAMACAO TABLE YES YES 2010-11-09:16:00:55 1642198 1642198 DAT00064 BIN$lMbtdaewq0jgQAAK0zI5/Q==$0 ADDESENV OBRESCALAEMPENHO TABLE YES YES 2010-11-11:11:26:55 1642220 1642220 DAT00064 BIN$lT65FHAqbcbgQAAK0zJxVg==$0 ADDESENV BEMFOTO TABLE YES YES 2010-11-17:10:22:12 1642188 1642188 DAT00064 BIN$lT+M+p0ZSSfgQAAK0zJ59g==$0 ADDESENV OBRTEMPO TABLE YES YES 2010-11-17:11:21:27 1642224 1642224 DAT00064 BIN$lfj7TStAQBTgQAAK0zIczQ==$0 ADDESENV HISTCOBEMAIL TABLE YES YES 2010-11-26:16:35:07 1652719 1652719 DAT01024 BIN$lfj7TSs/QBTgQAAK0zIczQ==$0 ADDESENV PK_HISTCOBEMAIL INDEX NO YES 2010-11-26:16:35:07 1652719 1652720 IDX00256
É possível fazer consultas em uma tabela no recyclebin como uma tabela normal.
SQL> SELECT * FROM addesenv."BIN$kyOIHk+1k2PgQAAK0zJLHw==$0"; CODCONTACONTABIL APLICACAO USUARIO ---------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 1054 AC_MATRIC U02123 1054 AC_MATRIC U02123 1054 AC_MATRIC U02123 1054 AC_MATRIC U02123 1054 AC_MATRIC U02123 1054 AC_MATRIC U02123 1054 AC_MATRIC U02123 7 rows selected
Recuperando tabelas
Para recuperar a tabela basta utilizar o comando FLASHBACK TABLE ... TO BEFORE DROP, esta operação é conhecida como "flashback drop".
SQL> flashback TABLE addesenv.obrescalaempenho1 TO before DROP; Done
Se uma tabela for criada e excluída mais de uma vez poderá existir mais de uma versão da tabela no recyclebin. Neste caso o comando de flashback irá recuperar a última versão da tabela. Para recuperar versões anteriores é necessário especificar o arquivo BIN$ desejado.
SQL> flashback TABLE addesenv."BIN$rwXte1bgEengQAAK0zJZNg==$0" TO before DROP; Done
Ao tentar recuperar uma tabela que já existe o Oracle apresenta o erro "ORA-38312: nome original é utilizado por um objeto existente".
Objetos dependentes
Quando uma table é excluída, ela e todos os seus objetos dependentes são renomeados mas permanecem com a mesma estrutura. Os triggers e índices são alterados para apontar para o novo nome BIN$ da tabela. Qualquer storege procedure que referencia a tabela excluída é invalidado.
As visões do RECYCLEBIN possuem colunas para mostrar a relação entre os objetos excluídos. A coluna PURGE_OBJECT mostra o número do objeto excluído enquando a coluna BASE_OBJECT mostra o número da tabela a qual o objeto é associado.
SQL> SELECT object_name, owner, original_name, TYPE, can_undrop AS "UND", can_purge AS "PUR", droptime, base_object, purge_object, ts_name 2 FROM dba_recyclebin 3 WHERE owner = 'ADDESENV' 4 ORDER BY droptime; OBJECT_NAME OWNER ORIGINAL_NAME TYPE UND PUR DROPTIME BASE_OBJECT PURGE_OBJECT TS_NAME ------------------------------ ------------------------------ -------------------------------- ------------------------- --- --- ------------------- ----------- ------------ ---------- BIN$lfj7TStAQBTgQAAK0zIczQ==$0 ADDESENV HISTCOBEMAIL TABLE YES YES 2010-11-26:16:35:07 1652719 1652719 DAT01024 BIN$lfj7TSs/QBTgQAAK0zIczQ==$0 ADDESENV PK_HISTCOBEMAIL INDEX NO YES 2010-11-26:16:35:07 1652719 1652720 IDX00256
Quando uma tabela é recuperada os triggers e índices associados a ela também são recuperados, porém não retornam com o nome original, continuam com o nome BIN$ embora o Oracle armazene o seu nome original na coluna ORIGINAL_NAME. Se a tabela for excluída novamente o Oracle dará um novo nome BIN$ e esquecerá o nome original destes objetos relacionados porque na coluna ORIGINAL_NAME constará o antigo nome BIN$.
Portanto é muito importante renomear os objetos relacionados quando recuperar uma tabela.
As constriants de integridade referencial não são salvas no recyclebin.
Limpando o recyclebin
Para retirar todas as tabelas do recyclebin de um determinado usuário utilize o comando PURGE RECYCLEBIN logado com o usuário desejado.
Para limpar todo o recyclebin independente do usuário utilize PURGE DBA_RECYCLEBIN logado com um usuário que tenha permissão de DBA.
Para retirar uma tabela espcífica do recyclebin utilize PURGE TABLE proprietário."BIN$...";
- Referência: Oracle FAQ's
Diversos
Habilitando archivelog
- Configurar variáveis no init.ora
- ###########################################
- # Archive
- ###########################################
- log_archive_dest_1='LOCATION=c:\oraclexe\oradata\xe\archive'
- log_archive_format=%t_%s_%r.dbf
- ###########################################
- # Redo Log and Recovery
- ###########################################
- fast_start_mttr_target=300
- Iniciar o arquivamento
- $ sqlplus sys/senha@instancia as sysdba
- SQL> shutdown immediate;
- SQL> create spfile from pfile = 'caminho/init.ora';
- SQL> startup mount;
- SQL> alter database archivelog;
- SQL> alter database open;
- SQL> shutdown immediate;
- Fazer backup completo da base de dados
Ativando flashback
- Verificar status do archivelog e falshback, o banco deve estar no modo archivelog
- $ sqlplus sys/senha@instancia as sysdba
- SQL> select log_mode, flashback_on from v$database;
- LOG_MODE FLASHBACK_ON
- --------------------- ------------------
- ARCHIVELOG NO
- Se o banco estiver no modo noarchivelog deve ser alterado para archivelog
- Ativar flashback
- SQL> shutdown immediate;
- SQL> startup mount exclusive;
- SQL> alter database flashback on;
- SQL> alter database open;
Excluir base de dados
- Parar o Oracle Enterprise Manager
- emctl stop dbconsole
- Parar o listener
- lsnrctl stop
- Excluir o banco de dados
- $ sqlplus /nolog
- SQL> conn / as sysdba
- SQL> shutdown immediate;
- SQL> startup mount exclusive restrict;
- SQL> drop database;
- SQL> quit
- $
- Referência: Oracle® Database SQL Reference