Administração de Banco de Dados

De DTI Wiki

Ir para: navegação, pesquisa

Tabela de conteúdo

Clusterware

Visão geral

- crsd (Cluster Ready Services CRS)
- cssd (Cluster Sincronization Services CSS)
- evmd (Event Manager EVM)
- 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
# $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
# $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

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)
# $CRS_HOME/bin/crsctl get css misscount
CRS-4678: SUCCESSFUL get misscount 30 FOR CLUSTER Synchronization Services.
# $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)

Verificar a integridade do OCR
# $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
# $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
$ $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

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

- 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)(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

  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
  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

SQL> alter database add logfile member '/u01/app/oracle/flash_recovery_area/ORABKP/onlinelog/redo01b.log' to group 1;
SQL> alter database add logfile group 2 '/u01/app/oracle/flash_recovery_area/ORABKP/onlinelog/redo02.log' size 50M;
  1. Se o log file for o corrente execute um log switch
    SQL> alter system switch logfile;
  2. Copie o redo log file para a sua nova localização utilizando comandos do SO
  3. 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';
SQL> alter database drop logfile group 3;
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;
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

Se um redo log já está arquivado, sua perda pode ser ignorada, apenas é necessário recriá-lo
  1. Se o banco estiver aberto
    SQL> alter database clear logfile group <group#>;
  2. 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'
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.
  1. Iniciar o banco no estado NOMOUNT
    SQL> startup nomount;
  2. Restaurar o ultimo backup do controlfile
    RMAN> restore controlfile from '<backup tag location>';
  3. Restaurar o banco de dados
    RMAN> alter database mount;
    RMAN> restore database;
  4. 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')";
  5. Abrir o banco de dados com RESETLOGS
    RMAN> alter database open resetlogs;
  6. Fazer backup completo da base de dados
Seguir os mesmos passos do Redo log não corrente e não arquivado
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.
  1. Parar o Enterprise Manager
    emctl stop dbconsole
  2. 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
  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')
  4. 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;
  5. 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"
  1. Procurar o arquivo oraparam.ini
    $ cd $ORACLE_BASE
    $ find . -name oraparam.ini -print
  2. editar o arquivo orapram.ini e aumentar o parâmetro JRE_MEMORY_OPTIONS
    JRE_MEMORY_OPTIONS=" -mx128m"

Conexão

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

Solução: Parar e reiniciar EM, listener e banco
  1. Pare o Enterprise manager
    emctl stop dbconsole
  2. 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>
  3. Pare o listener
    lsnrctl stop
  4. Pare o banco
    $ sqlplus /nolog
    SQL> conn / as sysdba
    SQL> shutdown immediate;
  5. Levante o banco
    SQL> startup;
  6. Levante o listener
    lsnrctl start
  7. Levante o enterprilse manager
    emctl start dbconsole
  8. Caso ocorra erro ao iniciar o EM siga os passos para correção de erro após troca de horário de verão
Referência para os comandos abaixo clique aqui
  1. Alguns minutos antes da troca de horário, pare o EM, listener e banco
  2. Aguarde no mínimo 1 hora para não sobrescrever os logs
  3. Reinicie e banco, listener e EM
  4. 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

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

  1. 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;
  2. 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;
  3. Criar catálogo
    $ rman catalog rman/senha@instancia
    RMAN> create catalog;
    RMAN> exit;

Registrar banco de dados alvo

  1. No RMAN, conectar nas bases alvo e catálogo
    $ rman target sys/senha@instancia catalog rman/senha@instancia
  2. 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

  1. No RMAN, conectar nas bases alvo e catálogo
    $ rman target sys/senha@instancia catalog rman/senha@instancia
  2. Apagar o registro da base alvo
    RMAN> unregister database noprompt;

Problemas com Backup

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

  1. Faça um backup full do seu banco de origem;
  2. Verifique se há disponibilidade de espaço físico no seu ambiente destino;
  3. 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;
  4. 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;
  5. 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;
  6. Você vai precisar recriar o arquivo de controle (CONTROLFILE), caso queira mudar o nome da instância DESTINO. Veremos como proceder em seguida;
  7. E, por fim, inicialize seu novo ambiente.
Referência: iMasters, Práticas de Backup da Velha Escola (Clone Database)

Recriar Controlfile

  1. Gerar um trace do seu arquivo de controle dentro do diretório USER_DUMP_DEST;
    ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
  2. 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";
  3. Criar novo arquivo de controle;
    $sqlplus / as sysdba
    SQL> startup nomount
    SQL> @controlfile_destino.sql
    SQL> alter database open resetlogs;
Referência: iMasters, Práticas de Backup da Velha Escola (Clone Database)

Duplicar Base de Dados com RMAN

Duplicando uma base de dados em outro servidor com a mesma estrutura de diretórios.
  1. Se já existir um banco de dados na instância auxiliar (onde será feito a duplicação) ele deverá ser excluído;
  2. Criar um Oracle Password File para a instância auxiliar (se ainda não existir);
  3. 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.
  4. Iniciar a instância auxiliar;
    STARTUP FORCE NOMOUNT
  5. Iniciar a instância a ser duplicada (se ainda não estiver iniciada);
    STARTUP MOUNT ou STARTUP
  6. 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.
  7. 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.
  8. Criar SPFILE.
Referência: Oracle® Database Backup and Recovery Advanced User's Guide

Recuperação de dados com RMAN

Recuperando control files (Perda de todos os control files. Banco no modo archivelog)

  1. Pare o banco e inicie no estado NOMOUNT.
    SQL> shutdown abort;
    SQL> startup nonount;
  2. No RMAN
    $ rman target sys/senha catalog rman/senha@instancia
    RMAN> restore contolfile;
  3. Coloque o banco no estado MOUNT
    SQL> alter database mount;
  4. No RMAN, execute um RECOVER DATABASE
    RMAN> recover database;
  5. Coloque o banco no estado OPEN;
    SQL> alter database open resetlogs;
  6. Faça backup da base;

Recuperando tablespace em um banco aberto (Banco no modo archivelog)

  1. 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';
  2. Execute os comandos do RMAN.
    run{ sql "alter tablespace NOMETABLESPACE offline immediate";
    restore tablespace NOMETABLESPACE;
    recover tablespace NOMETABLESPACE;
    sql "alter tablespace NOMETABLESPACE online"; }
  3. Verifique se a tablespace foi recuperada.
  4. Faça backup da base de dados.

Recuperando tablespace em um banco fechado (Banco no modo archivelog)

  1. Coloque o banco no estado MOUNT
    SQL> startup mount;
  2. 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;
  3. Execute os comandos do RMAN.
    run{ restore tablespace NOMETABLESPACE1;
    restore tablespace NOMETABLESPACE2;
    recover tablespace NOMETABLESPACE1;
    recover tablespace NOMETABLESPACE2;}
  4. 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

  1. 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
  2. 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;
  3. Fazer backup completo da base de dados

Ativando flashback

  1. 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
  2. Se o banco estiver no modo noarchivelog deve ser alterado para archivelog
  3. Ativar flashback
    SQL> shutdown immediate;
    SQL> startup mount exclusive;
    SQL> alter database flashback on;
    SQL> alter database open;

Excluir base de dados

  1. Parar o Oracle Enterprise Manager
    emctl stop dbconsole
  2. Parar o listener
    lsnrctl stop
  3. 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
Ferramentas pessoais
Espaços nominais
Variantes
Ações
Navegação
Ferramentas