Configurando e usando o FLASHBACK
Restaurar tabelas eliminadas a partir da lixeira
- Os recursos de flashback no oracle são suportados por uma das três estruturas no banco de dados: dados de UNDO, área de recuperação flash e a lixeira.
- O FLASHBACK DROP usa a lixeira para recuperar as tabelas eliminadas.
- A lixeira (recycle bin) é uma tabela do dicionário de dados que rastreia os objetos eliminados.
- Por padrão a lixeira está ativada.
recyclebin = on;
- É possível ativar ou desativar a lixeira a nível de sessão;
alter session set recyclebin=off;
- RECYCLEBIN é um parâmetro de inicialização dinâmico, você pode ajustá-lo com o alter system.
alter system set recyclebin=off scope=both;
- O fato de desativar a lixeira não expurga os objetos contidos nela.
- É possível restaurar as versões atual ou anterior das tabelas eliminadas a partir da lixeira.
- Quando você elimina um objeto com a lixeira ativada, o espaço alocado para o objeto eliminado e para todos os objetos associados (como índices) passa a constar imediatamente na view do dicionário de dados DBA_FREE_SPACE.
- Quando uma tabela é eliminada, a tabela e seus objetos dependentes são renomeadas com um nome atribuído pelo sistema, usando um formato BIN$unique_id$version.
- Quando mais de uma tabelas com o mesmo nome for excluída a coluna DROPTIME indicará a diferença entre elas.
- Para consultar a lixeira, você pode utilizar a view do dicionário de dados USER_RECYCLEBIN. RECYCLEBIN é um sinônimo global para USER_RECYCLEBIN.
select owner, objetct_name, original_name, type, ts_name, droptime, can_undrop
from dba_recyclebin;
- A coluna CAN_UNDROP Pode está definido com NO para objetos como índices, porque não é possível cancelar a eliminação de um índice. Primeiro cancele a eliminação da tabela; todos os índices associados terão a sua eliminação cancelada.
- A view do dicionário de dados USER_RECYCLEBIN tem as mesmas colunas da view DBA_RECYCLEBIN, exceto que a USER_RECYCLEBIN não possui a coluna owner.
- Para restaurar uma tabela da lixeira, use o comando FLASHBACK TABLE ... TO BEFORE DROP.
- Se você tentar restaurar uma tabela que foi recriada depois de sua eliminação, receberá um erro, a menos que você inclua a cláusula RENAME TO para atribuir um novo nome à tabela restaurada.
- O espaço na lixeira e, por extensão, o espaço no tablespace contendo a lixeira são gerenciados automaticamente pelo Oracle.
- Todos os objetos eliminados continuam disponíveis para recuperação na lixeira, desde que os novos objetos não necessitem do espaço ocupado pelos objetos eliminados.
- Você pode emitir o comando PURGE para remover manualmente as tabelas da lixeira.
purge table "nome_do_objeto_ou_nome_original";
- Você pode expurgar da lixeira os objetos de um tablespace específico para o usuário atual, como neste exemplo:
purge tablespace users;
- Você pode eliminar todos os objetos de um determinado usuário se você possuir o privilégio DROP ANY TABLE.
purge tablespace web_orders user inet_us;
- Voce pode eliminar todos os objetos da lixeira se tiver o privilégio SYSDBA.
purge dba_recyclebin;
- Quando um objeto reside na lixeira, você também pode utilizar a instrução SELECT para acessar a tabela eliminada, que continuará constando nas views do dicionário de dados DBA_TABLES, DBA_OBJECTS e DBA_SEGMENTS, USER_TABLES.
- Embora seja possível fazer referência a todos os objetos contidos na lixeira de modo genérico, cada tablespace possui uma lixeira local própria.
- Você pode ignorar a lixeira incluindo o comando PURGE ao dropar uma tabela.
drop table TABELA purge;
- Outro comando que ignora a lixeira é o DROP TABLESPACE, você deve incluir a cláusula INCLUDING CONTENTS se existir no tablespace algum objeto não pertentence a lixeira quando você emitir o comando DROP TABLESPACE.
- É possível usar a cláusula AS OF em uma instrução select de uma tabela contida na lixeira para utilizar o flashback query.
Executar um Flashback Query
- Você precisa configurar corretamente seu tablespace de undo.
undo_management = auto
undo_tablespace = seu_tablespace_undo
undo_retention = 1800
- Definindo o undo_retention com auto instrui o oracle a ajustar em seguida a retenção de undo, de acordo com o tamanho do tablespace de undo.
- O Flashback Query permite exibir uma ou mais linhas de uma tabela em um tempo no passado.
- Para garantir o êxito das operações de flashback ou das consultas de longa execução às custas da atividade DML, você deve especificar RETENTION GUARANTEE para o tablespace de undo.
alter tablespace undotbs1 retention guarantee;
- Quando a garantia de retenção estiver ativada, o período de mínimo especificado de retenção de undo estará assegurado. Consequentemente, as atividades de DML poderão falhar se as consultas de longa duração ou as operações de flashback estiverem utilizando as informações de undo expiradas.
- É possível verificar o status da retenção de um tablespace de undo consultando a view do dicionário de dados DBA_TABLESPACES.
- O Flashback Query usa a cláusula AS OF para especificar o ponto anterior no tempo como um timestamp ou um SCN.
delete from emplyees where employees_id in(195,196);
- Os dados podem ser recuperados com a seguinte query;
select * from employees
as of timestamp systimestamp - interval '60' minute
where employees_id not in
(select employees_id from employees);
- Para fazer um flashback é preferivel utilizar o SCN. Os SCNs são exatos, enquanto os valores de timestamp são armazenados apenas a cada 3 segundos para dar suporte as operações de flashback. Consequentemente , a ativação do flashback através de timestamp poder defasar em até 1,5 segundos.
- O Flashback Version Query, outro recurso de flashback que utiliza os dados de UNDO, propicia um nível com mais detalhamento do que a consulta com AS OF (Flashback Query).
- O flashback version query retornará o histórico completo de uma linha entre dois SCNs ou dois TIMESTAMP,
- Identificando o SCN atual a cada transação efetuada
select dbms_flashback.get_system_change_number from dual;
update employees set salary =*1.2 where employees_id=195;
select dbms_flashback.get_system_change_number from dual;
delete employees where employees_id=196;
select dbms_flashback.get_system_change_number from dual;
commit;
- O Flashback Version Query usa a cláusula VERSIONS BETWEEN para especificar um intervalo de SCNs ou timestamps para análise de uma tabela específica.
- Pseudo colunas que ficam disponíveis ao usar a cláusula VERSIONS BETWEEN.
VERSIONS_START (SCN/TIME).
VERSIONS_END(SCN/TIME): o SCN ou timestamp inicial a partir do qual a alteração não era mais válida para a linha. Se definida como NULL , a versão da linha é a atual ou a linha foi excluída.
VERSIONS_XID: O id da transação que criou a versão da linha.
VERSIONS_OPERATION: A operação executada na linha (insert, update, delete).
- Executando consulta FLASHBACK para os ids 195 e 196.
select versions_startscn,
versions_endscn,
versions_xid,
versions_operation,
employee_id,
last_name,
manager_id,
salary
from employees VERSIONS BETWEEN SCN 27153780 and 27154069
where employee_id in (195, 196);
- As linhas são apresentadas com as mudanças mais recentes apresentadas em primeiro lugar.
- Algumas restrições e advertencias são aplicaveis ao se usar o FLASHBACK VERSION QUERY, você não pode consultar os seguintes objetos com a cláusula VERSIONS:
- TABELAS EXTERNAS
- TABELAS FIXAS(TABELAS X$ INTERNAS DO ORACLE)
- TABELAS TEMPORÁRIAS
- VISOES.
- Finalmente, você não pode usar a cláusula VERSIONS caso intruções DDL tenham alterado a estrutura das tabelas na consulta. Em outras palavras, você pode voltar no tempo apenas até a primeira transação depois da última instrução DDL sobre a tabela, o que evidentemente, inclui a criação da própria tabela.
Usar o Flashback Transaction
- Após identificar alterações incorretas efetuadas em uma tabela, você pode utilizar o flashback transaction query para detectar todas as outras mudanças feitas pela transação contendo as modificações inadequadas. Após a identificação, todas as alterações dentro da transação podem ser revertidas como um grupo, geralmente para manter a integridade referencial ou as regras de negócio usadas para processar a transação.
- A view do dicionário de dados FLASHBACK_TRANSACTION_QUERY tem todas as informações de que você necessita para identificar o código SQL necessário para reverter uma transação.
- Um flashback transactin query não faz referência a tabela participante nas transanções DML. Em vez disso, consulte a visão do dicionário de dadods FLASHBACK_TRANSACTION_QUERY.
- A tabela FLASHBACK_TRANSACTION_QUERY contém todas as modificações efetuadas no banco de dados inclusive as operações DDL. Isso faz sentido porque o ORACLE usa tabelas e índices para gerenciar o dicionário de dados e alocação de espaço. Portanto, uma operação DDL conta na FLASHBACK_TRANSACTION_QUERY como uma série de operações de gerenciamento de espaço e manutenção de metadados.
- As tabelas e usuários eliminados também aparecem em FLASHBACK_TRANSACTION_QUERY. Entretando esse objetos não exitem mais, de modo que contarão seus números em vez de nomes das tabelas, e os números de IDs do usuários ao invés dos nomes dos usuários.
- COLUNAS DA FLASHBACK_TRANSACTION_QUERY
- XID: número do ID da transação.
- START_SCN: SCN para o primeiro DML na transação.
- START_TIMESTAMP: time para o primeiro DML na transação.
- COMMIT_SCN: SCN quando a transação sofreu commit.
- COMMIT_TIMESMTAMP.
- LOGON_USER: usuário detentor da transação.
- UNDO_CHANGE#: SCN de UNDO.
- OPERATION: operação executada: DELETE, INSERT UPDATE, BEGIN ou UNKNOWN.
- TABLE_NAME: tabela alterada pelo DML.
- TABLE_OWNER: Proprietário da tabela alteradas pelo DML.
- ROW_ID: rowid DA LINHA MODIFICADA PELO dml.
- UNDO_SQL: instruções SQL para desfazer a operação DML.
- O espaço de undo não é ilimitado; portanto, você poderá encontrar apenas transações parciais na FLASHBACK_TRANSACTION_QUERY. Nesta situação, o valor da coluna OPERATION contém UNKNOWN para qualquer DML que não reside mais no tablespace de undo para a transação selecionada.
- PRÉ-REQUISTOS DO FLASHBACK TRANSACTION QUERY.
- Para utilizar o Flashback Transaction Query, você deve ativar o registro em log adicional para o fluxo de redo log. Esses são os mesmos dados que o Log Miner utiliza, embora em outra interface.
- Primeiro ativo o registro de log de colunas e dos valores chave de chave primária(PK) referenciados nas alterações DML usando os seguintes comandos.
alter database add suplemental log data;
alter database add suplemental log data (primary key) columns;
- Você deve conceder permissões sobre a package DBMS_FLASHBACK, assim como o privilégio SELECT ANY TRANSACTION aos usuários que usarão o Flashback Transaction Query,
grant execute on dbms_flashback to hr;
grant select any trasaction to rh;
- Usando o flashback transaction query
- Investigando as alterações efetuadas na tabela EMPLOYEES.
select start_scn,
commit_scn,
logon_user,
operation,
table_name,
undo_sql,
from flashback_transaction_query
where xid = hextoraw('0400000044230000');
- O Enterprise Manager (EM) fornece uma GUI fácil de usar como front-end para a procedure DBMS_FLASHBACK.TRANSACTION_BLACKOUT
- As quatro opções de reversão de transações são: CASCADE, NOCASCADE, NOCASCADE_FORCE e NONCONFLICT_ONLY.
Executar operações de Flashback Table
- O recurso Flashback table do oracle restaura o estado de linhas de uma tabela a partir de um ponto no tempo psassado, além de restaurar os índices, triggers e restrições da tabela, com o banco de dados online. Isso aumenta a disponibilidade geral do banco de dados.
- O recurso Flashback Table do Oracle não somente restaura o estado das linhas de uma tabela a partir de um ponto do tempo no passado, como também restaura os índices, os triggers e as restrições da tabela enquanto o banco de dados estiver online.
- O Flashback Table é preferível aos outros métodos de flashback se o escopo dos erros do usuário for pequeno e limitado a uma ou poucas tabelas.
- O Flashback Table é executado localmente, com o banco de dados online, revertendo as alterações feitas na tabela e em todos os respectivos objetos dependentes, como os índices, você pode informar mais de uma tabela na instrução flashback table, independente de informar uma ou mais de uma tabela a operação será considerada uma única transação.
- Para executar o Flashback Table, o usuário deve ter o privilégio FLASHBACK ANY TABLE, ou o privilégio de objeto FLASHBACK sobre uma tabela específica.
grant flashback any table to m_phelps;
- O Flashback table não pode ser usado em um banco de dados stadby e não pode reconstruir todas as operações DDL, como inclusão e eliminação de colunas.
- Para utilizar o Flashback Table sobre uma ou mais tabelas, você deve ativar a movimentação de linhas antes de executar a operação de Flashback, embora não seja necessário que essa movimentação esteja em vigor quando ocorrer o erro do usuário. A movimentação de linha do oracle é necessária para suportar a funcionalidade de compressão de segmentos do Oracle.
- Não ative a movimentação de linha se os seus softwares dependerem de preservação do mesmo ROWID em determinada linha atpe a sua exclusão.
- As operações de Flashback Table não podem englobar as operações DDL, como adição ou eliminação de uma coluna.
- Todas a estatísticas coletadas para a tabela no comando FLASHBACK TABLE não são submetas ao flashback, Consequentemente, é uma prática eficiente coletar novas estatísticas nas tabelas imediatemante após uma prática de flashback table.
- Usar o flashback table uma tabela.
- Ative a movimentação de linha para várias tabelas.
alter table emplyees enable row movement;
alter table departaments enable row movement;
alter table jobs enable row movement;
- Exclua todas as linhas da tabela EMPLOYEES;
delete from employees;
commit;
- Recuperando os dados:
flashback table employees to timestamp systimestamp - interval '15' minute;
- Se necessário, inclua também as tabelas dependentes.
flashback table employees, departaments, job to timestamp systimestamp - interval '15' minute;
- Os métodos que você pode utilizar na cláusula AS OF de um operação de flashback table para especificar um tempo no passado são:
- Timestamp
- SCN
- Ponto de restauração
- Ponto de restauração garantido
Configurar e utilizar um Flashback DataArchive
- Um Flashback Data Archive retém os dados históricos de uma ou mais tabelas por um período de retenção.
- Para ativar o Flashback Data Archive, crie uma ou mais áreas de repositório (uma das quais pode ser a área padrão), atribua um período de retenção padrão para os objetos marque para rastreamento as tabelas adequadas.
- Um Flashback Data Archive atua basicamente como um tablespace de undo. Entretanto, um Flashback Data Archive registra apenas as instruções UPDATE e DELETE, não as instruções INSERT. As linhas no flasback dataarchive podem abranger anos ou até décadas.
- Você pode acessar dados em um Flashback Data Archive exatamente como você faz com o Flashback Query, usando a cláusula AS OF em uma instrução SELECT.
- Crie um ou mais Flashback Data Archives nos tablespaces já existentes emitindo o comando CREATE FLASHBACK ARCHIVE. O flashback version query e o flashback transaction query também podem utilizar os dados existentes em um flashback data archive.
- As views do dicionário de dados que respaldam os Flashback Data Archives são: DBA_FLASHBACK_ARCHIVE e DBA_FLASHBACK_ARCHIVE_TS.
- A view DBA_FLASHBACK_ARCHIVE_TABLES rastreia as tabelas ativadas para o flashback archive.
- Criando um arquivo: Você pode criar um ou vários flashback data archive em tablespaces existentes emitindo um comando CREATE FLASHBACK ARCHIVE. Contudo as melhores práticas da oracle recomendam o uso de tablespaces dedicados. Todos os arquivos devem ter um período de retenção padrão usando a cláusula RETENTION, e podem, opcionalmente ser identificados como o arquivo padrão através da palavra-chave DEFAULT. A quota de disco para um arquivo é limitada pelo espaço em disco do tablespace, a mesnos que você atrivua uma quantidade máxima de espaço em disco para o arquivo, por meio da palavra-chave QUOTA.
- Criando um tablespace dedicado.
create tablespace FBDA1 datafile '+data' size 10g;
- Criando arquivos:
create flashback archive FB_ES tablespace FBDA1 retention 10 year;
create flashback archive FB_FI tablespace FBDA1 quota 500m retention 7 year;
create flashback archive default FB_DFLT tablespace FBDA1 quota 250m retention 2 year;
- Você não pode especificar mais de um tablespace no comando CREATE FLASHBACK ARCHIVE. Use o comando ALTER FLASHBACK ARCHIVE para adicionar um tablespace.
- Para criar ou modificar os Flashback Data Archives, o usuário deve ter o privilégio de sistema FLASHBACK ARCHIVE ADMINISTER.
- Assim que você desativar o flashback data archive para uma tabela, os dados históricos da tabela desaparecerão, mesmo que você reative imediatamente o recurso para a tabela em questão.
- Usando visões do discionário de dados para o flashback data archive.
- Duas novas visões do dicionário de dados dão suporte aos dados flashback data archives: DBA_FLASHBACK_ARCHIVE e DBA_FLASJBACK_ARCHIVE_TS. A visão DBA_FLASHBACK_ARCHIVE lista os arquivos e a visão DBA_FLASHBACK_TS exibe o mapeamento de tablespace e arquivos.
select flashback_archive_name,
flashback_archive#,
retention_in_days,
status
from dba_flashback_archive;
select * from dba_flashback_archive_ts;
- A visão DBA_FLASHBACK_ARCHIVE_TABLES rastreia as tabelas ativadas para o arquivamento de flashback.
- O privilégio FLASHBACK ARCHIVE ADMINISTER também inclui privilégios para adicionar e remover tablespaces de um arquivo, eliminar e fazer um expurgo ad-hoc de dados históricos.
- Gerenciando flashback data archive.
- Para adicionar um tablespace a um arquivo já existente use ALTER FLASHBACK ARCHIVE.
alter flashback archive FB_DFLT add tablespace USERS3 quota 400m;
- Você pode expurgar os dados do arquivo incluindo a clausula purge.
alter flashback archive FB_DFLT purge before timestamp
to timestamp ('2005-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');
- Atribuindo uma tablesapce a um flashback data archive.
- Atribua uma tabela a um arquivo durante a criação da tabela, usando a sintaxe padrão CREATE TABLE com a inclusão da cláusula FLASHBACK ARCHIVE, ou posteriormente, com o comando ALTER TABLE.
alter table employees flahsback archive FB_ES;
- Se você não especificar um arquivo, o oracle irá atribuir o arquivo DEFAULT.
- Para exibir as tabelas que usam o flashback data archive use a visão FLASHBACK_ARCHIVE_TABLES.
select * from dba_flashback_archive_tables;
- Consultar os dados de uma tabela em um flashback dta archive é fácil: basta incluir AS OF em uma tabela quando você estiver utilizando a atividade DML armazenada em um tablespace de UNDO.
delete from employees where employees_id = 196;
commit;
- Localizando os dados deletados para o usuário 196:
select employees_id,
last_name,
hire_date
from employees
as of timesmtamp (systimestamp - interval '28' day)
where employee_id = 196;
- Fica totalmente transparente para o usuário se o oracle está utilizando um tablesapce de undo ou um flashback data archive para uma consulta contendo a cláusula AS OF.
Configurar, monitorar o Flashback Database e executar operações de Flashback Database
- O Flashback Database usa o comando FLASHBACK DATABASE para retornar um banco de dados a um tempo no passado ou a um SCN, propiciando uma alternativa rápida para a execução da recuperação incompleta do banco de dados.
- Quando você ativar o recurso Flashback Database, as imagens anteriores dos blocos modificados serão salvas na área de recuperação flash como logs de Flashback Database.
- Os logs na área de recuperação flash são reutilizados de forma circular.
- Configurar corretamente o tamanho da área de recuperação flash garante espaço suficiente disponível para os logs do Flashback Database e para todas as demais informações contidas nessa área.
- Defina o parâmetro de inicialização DB_FLASHBACK_RETENTION_TARGET com o limite máximo (em minutos) para a sua janela de recuperação utilizável; isso é uma meta, não uma garantia.
- Você pode utilizar o comando FLASHBACK DATABASE no RMAN ou no prompt SQL>.
- É possível utilizar a cláusula TO SCN ou TO TIMESTAMP para definir o ponto de flashback do banco de dados inteiro, além de um ponto de restauração garantido.
- Você pode usar a pseudocoluna ORA_ROWSCN para determinada linha da tabela para ver os SCNs das modificações mais recentes efetuadas na linha de uma tabela.
- Se não existirem dados suficientes nos archive logs e na área de flashback, você deverá aplicar os métodos tradicionais de recuperação de banco de dados para recuperar os dados.
- Para desativar o Flashback Database, execute o comando ALTER DATABASE FLASHBACK OFF quando o banco estiver montado e não aberto.
- Por padrão, todos os tablespaces participarão em uma operação de Flashback Database, a menos que você modifique o atributo FLASHBACK para OFF no momento da criação do tablespace, ou posteriormente, usando o comando ALTER TABLESPACE.
- Um ponto de restauração garantido é parecido com um ponto de restauração comum, uma vez que pode ser utilizado como um alias para um SCN durante uma operação de recuperação.
- Um ponto de restauração garantido é diferente, no sentido de que ele não é obsoletado do controlfile e deve ser explicitamente eliminado.
- Criar um ponto de restauração garantido com um registro em log de flashback ativado assegura a retenção de logs de flashback na área de recuperação flash, para permitir a reversão do banco de dados até um ponto posterior à criação do ponto de restauração garantido.
- Você pode determinar até onde é possível fazer o flashback do banco de dados consultando a view V$FLASHBACK_DATABASE_LOG.
- É possível utilizar a view V$FLASHBACK_DATABASE_STAT para monitorar a taxa horária de geração de dados de flashback.
- A diferença entre um ponto de restauração comum e um ponto de restauração garantido é que o ponto de restauração comum não exige uma área de recuperação flash e pode ser obsoletado do arquivo de controle e um ponto de restauração garantido nunca será obsoletado do arquivo de controle , a menos que seja explicitamente eliminado.
Nenhum comentário:
Postar um comentário