<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Caueiracouto</title>
    <description>The latest articles on DEV Community by Caueiracouto (@caueiracouto).</description>
    <link>https://dev.to/caueiracouto</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1228639%2Fa0d2f1a4-7037-4f5e-b660-c9c48335060f.png</url>
      <title>DEV Community: Caueiracouto</title>
      <link>https://dev.to/caueiracouto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/caueiracouto"/>
    <language>en</language>
    <item>
      <title>Artigo de Partes Práticas do Flashback:</title>
      <dc:creator>Caueiracouto</dc:creator>
      <pubDate>Fri, 08 Dec 2023 02:12:54 +0000</pubDate>
      <link>https://dev.to/caueiracouto/artigo-de-partes-praticas-do-flashback-k3i</link>
      <guid>https://dev.to/caueiracouto/artigo-de-partes-praticas-do-flashback-k3i</guid>
      <description>&lt;p&gt;Conforme analisado a postagem anterior, onde trazemos a teoria. Agora vamos ver como ficaria na prática para se executar um flashback, através de casos de uso apresentados, exemplos, códigos e fotos apresentadas no artigo em questão: &lt;/p&gt;

&lt;p&gt;Flashback Versions Query&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;O Flashback Versions Query fornece uma maneira simples e fácil de mostrar todas as versões de todas as linhas em uma tabela entre dois SCN's ou tempos de intervalo (time stamps), informando se as linhas foram inseridas, deletadas ou atualizadas. Na verdade, acredito que o Flashback Versions Query é uma extensão à linguagem SQL que permite ao DBA recuperar diferentes versões de linhas de tabela em qualquer intervalo de tempo. Uma nova versão de registro será criada toda vez que o comando COMMIT for emitido, e mesmo que uma linha seja deletada e re-inserida várias vezes, todas estas alterações estarão disponíveis para acesso.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT versions_starttime, versions_endtime, versions_xid, versions_operation, emp_id, emp_name, emp_salary
FROM employees
VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP('2023-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('2023-12-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa consulta retorna todas as versões das linhas da tabela de funcionários entre os tempos especificados, juntamente com informações sobre o início e o fim de cada versão, a operação realizada (inserção, atualização, exclusão), e os detalhes dos funcionários.&lt;/p&gt;

&lt;p&gt;Este caso de uso demonstra como o Flashback Versions Query pode ser utilizado para realizar uma auditoria detalhada das mudanças em uma tabela específica ao longo de um intervalo de tempo determinado. Essa funcionalidade é valiosa para administradores de bancos de dados que precisam rastrear e compreender as mudanças nos dados ao longo do tempo para fins de auditoria e análise histórica.&lt;/p&gt;

&lt;p&gt;Flashback Transaction Query:&lt;br&gt;
    O Flashback Transaction Query usa a view de dicionário de dados FLASHBACK_TRANSACTION_QUERY para recuperar informações de transações de banco de dados para todas as tabelas envolvidas em uma transação. Esta view possui uma coluna UNDO_SQL que fornece a sentença SQL que poderá ser utilizada para desfazer uma mudança feita anteriormente. A propósito, nas versões anteriores ao Oracle 10g, o LogMiner poderia ser utilizado para fornecer estas informações.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT xid, table_name, undo_sql
FROM FLASHBACK_TRANSACTION_QUERY
WHERE xid = 'ID_DA_TRANSACAO';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa consulta retorna informações sobre as tabelas afetadas pela transação, o ID da transação (XID) e a sentença SQL de "undo" para cada operação que pode ser utilizada para desfazer as mudanças.&lt;/p&gt;

&lt;p&gt;Este caso de uso demonstra como o Flashback Transaction Query pode ser utilizado para analisar uma transação específica, entender suas operações e fornecer sentenças SQL de "undo" que podem ser usadas para desfazer mudanças indesejadas em várias tabelas do banco de dados. Essa funcionalidade é útil para a gestão de banco de dados ao lidar com situações em que é necessário reverter transações problemáticas.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Flashback Table:&lt;/em&gt;&lt;br&gt;
    O FLASHBACK TABLE é usado para restaurar um estado anterior de uma tabela no caso de erro humano ou de aplicativo. O tempo no passado para o qual a tabela pode sofrer flashback depende da quantidade de dados de desfazer no sistema. Além disso, o Oracle Database não pode restaurar uma tabela para um estado anterior em quaisquer operações DDL que alterem a estrutura da tabela.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
FLASHBACK TABLE clientes TO TIMESTAMP TO_TIMESTAMP('2023-12-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta consulta reverte a tabela clientes para o estado que estava em 1º de dezembro de 2023 às 08:00 da manhã.&lt;/p&gt;

&lt;p&gt;Este caso de uso demonstra como o Flashback Table pode ser utilizado para recuperar registros específicos em uma tabela após eles terem sido excluídos erroneamente. Essa funcionalidade permite a restauração seletiva de dados em uma tabela para um estado anterior, sem a necessidade de restaurar todo o banco de dados a partir de um backup.&lt;/p&gt;

&lt;p&gt;DBMS_FLASHBACK:&lt;br&gt;
    Usando DBMS_FLASHBACK, você pode voltar para uma versão do banco de dados em um horário especificado ou para um número de alteração do sistema (SCN) especificado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DECLARE
  v_scn NUMBER;
BEGIN
  SELECT SCN
  INTO v_scn
  FROM V$DATABASE;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(v_scn - 1);&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; UPDATE produtos
  SET preco = (SELECT preco_anterior
               FROM produtos_versoes
               WHERE produtos_versoes.id_produto = produtos.id_produto
               AND produtos_versoes.data_versao = (
                 SELECT MAX(data_versao)
                 FROM produtos_versoes
                 WHERE produtos_versoes.id_produto = produtos.id_produto
                 AND data_versao &amp;lt; TO_DATE('2023-12-01', 'YYYY-MM-DD')
               )
              )
  WHERE produtos.id_produto IN (SELECT id_produto
                                FROM produtos_versoes
                                WHERE data_versao &amp;lt; TO_DATE('2023-12-01', 'YYYY-MM-DD')
                               );

  DBMS_FLASHBACK.DISABLE;
END;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, o DBMS_FLASHBACK é utilizado para habilitar o flashback até o SCN anterior ao momento da atualização incorreta. Em seguida, é realizada uma atualização na tabela produtos, revertendo os preços para um estado anterior usando informações de uma tabela de versões (produtos_versoes), onde os preços antigos são mantidos. Por fim, o DBMS_FLASHBACK.DISABLE é usado para desativar o flashback após a atualização.&lt;/p&gt;

&lt;p&gt;Este caso de uso demonstra como o DBMS_FLASHBACK pode ser usado para realizar uma restauração seletiva de dados após uma atualização incorreta, permitindo recuperar informações específicas de uma tabela para um estado anterior com precisão e controle avançado.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Flashback Data Archive:&lt;/em&gt;&lt;br&gt;
    No Oracle Database, o DBMS_FLASHBACK_ARCHIVE é um pacote que permite controlar e gerenciar a captura e retenção de alterações em tabelas específicas usando o recurso de Archive Flashback Data (AFD). Essa funcionalidade mantém um registro detalhado de todas as mudanças feitas nas tabelas designadas para o Flashback Data Archive, permitindo a consulta e recuperação de dados históricos.&lt;/p&gt;

&lt;p&gt;EXECUTE DBMS_FLASHBACK_ARCHIVE.ENABLE_ARCHIVE('clientes', retention_time=&amp;gt;365);&lt;/p&gt;

&lt;p&gt;Isso habilita o Flashback Data Archive para a tabela clientes, mantendo o histórico de alterações por um ano (365 dias).&lt;/p&gt;

&lt;p&gt;Este caso de uso exemplifica como o DBMS_FLASHBACK_ARCHIVE pode ser utilizado para configurar, capturar e gerenciar um histórico detalhado de mudanças em uma tabela específica, atendendo a requisitos de auditoria e fornecendo um registro preciso das alterações nos dados ao longo do tempo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--90EhzfDU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/frju8ccvp103ru30d1bl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--90EhzfDU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/frju8ccvp103ru30d1bl.jpg" alt="Image description" width="517" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9t26-pHL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bl0ej94lvw2z57rno5s.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9t26-pHL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bl0ej94lvw2z57rno5s.jpg" alt="Image description" width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r1t7FBij--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r17mpvquusirhdfvb204.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r1t7FBij--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r17mpvquusirhdfvb204.jpg" alt="Image description" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qs1WDK4d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3fxxb3i4e044xb5ytd1b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qs1WDK4d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3fxxb3i4e044xb5ytd1b.jpg" alt="Image description" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xjYK3D-Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o34gnj9opzhl3fsfpc7c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xjYK3D-Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o34gnj9opzhl3fsfpc7c.jpg" alt="Image description" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Artigo: Banco de Dados Flashback</title>
      <dc:creator>Caueiracouto</dc:creator>
      <pubDate>Fri, 08 Dec 2023 02:03:44 +0000</pubDate>
      <link>https://dev.to/caueiracouto/artigo-banco-de-dados-flashback-3g37</link>
      <guid>https://dev.to/caueiracouto/artigo-banco-de-dados-flashback-3g37</guid>
      <description>&lt;p&gt;Flashback é uma tecnologia introduzida no Oracle Database 10g. Esta tecnologia nos permite realizar diversas operações no banco de dados com a intenção de encontrar soluções para os problemas lógicos, como por exemplo: restaurar uma tabela para um ponto do tempo antes de algum DELETE; restaurar uma tabela que foi removida; consultar dados de uma tabela em um momento específico no passado; voltar o banco de dados para um ponto no tempo.&lt;/p&gt;

&lt;p&gt;Esta tecnologia não necessita de uma restauração física dos arquivos do banco de dados. O Flashback usa dados de UNDO ou Flashback Logs, dependendo de qual função o Flashback está sendo utilizado. O Flashback não é um método de recuperação que substitui ferramentas como restauração/recuperação RMAN, exportação/importação ou outras; mas é um complemento.&lt;/p&gt;

&lt;p&gt;A seguir estão alguns exemplos de sintaxe do Flashback Database:&lt;/p&gt;

&lt;p&gt;Configure uma área de recuperação rápida:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQL&amp;gt; alter system set db_recovery_file_dest = '/u03/app/oracle/fast_recovery_area' scope=both; 
    System altered.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configurar a retenção dos Flashback Logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQL&amp;gt; alter system set db_flashback_retention_target = 4320 scope=both;
      System altered.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Habilitar o Flashback no nível do Container Database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQL&amp;gt; show con_name
      CON_NAME 
      ------------------------------ 
      CDB$ROOT
      SQL&amp;gt; alter database flashback;
      Database altered.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vantagens do banco de dados Flashback:&lt;/p&gt;

&lt;p&gt;Redução da Sobrecarga de Armazenamento: Pode reduzir a necessidade de manter vários backups completos, já que o Flashback Database pode ser usado como uma alternativa para certos cenários de recuperação.&lt;/p&gt;

&lt;p&gt;Recuperação Rápida: Permite reverter o banco de dados para um ponto no tempo anterior de maneira rápida e eficiente, evitando a necessidade de restaurar backups completos.&lt;/p&gt;

&lt;p&gt;Desvantagens do Flashback Database:&lt;/p&gt;

&lt;p&gt;Impacto no desempenho: O processo de flashback pode impactar o desempenho do sistema, especialmente em grandes bancos de dados, devido à carga adicional de processamento.&lt;/p&gt;

&lt;p&gt;Dependência de logs: O Flashback Database depende da existência de logs de flashback, que precisam ser mantidos e gerenciados especificamente. A perda desses logs pode comprometer a capacidade de recuperação usando o Flashback Database.&lt;/p&gt;

&lt;p&gt;Cenários em que o Flashback Database pode ser utilizado no mercado:&lt;/p&gt;

&lt;p&gt;Útil para realizar testes em aplicações e depois desfazê-las;&lt;br&gt;
Para testar alguma atualização;&lt;br&gt;
Desfazer alterações indesejadas;&lt;br&gt;
Desfazer um OPEN RESETLOGS;&lt;br&gt;
“Levar“ um PDB a diferentes pontos no tempo.&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>database</category>
      <category>flashback</category>
      <category>bancodedados</category>
    </item>
  </channel>
</rss>
