Artigo
· Abr. 27, 2023 6min de leitura

Recuperando Uma Global Excluída Acidentalmente

InterSystems FAQ rubric

Neste artigo, apresentaremos como lidar com a situação: "Excluí acidentalmente uma global!"

Arquivos de backup e journals são usados para recuperar globais específicas que foram excluídas acidentalmente. A restauração é executada especificando as condições e restaurando registros do journal usando o utilitário ^ZJRNFILT. Dessa forma, você pode aplicar um backup pontual do banco de dados e até incluindo a exclusão de uma global específica para registros do journal que contêm as exclusões. Para obter mais informações sobre o utilitário ^ZJRNFILT, consulte a documentação:

Filter Journal Records Using ^ZJRNFILT [IRIS]
Filter Journal Records Using ^ZJRNFILT

【Exemplo】

- Existe um backup de 14/10/2020 (assumindo que o backup foi executado em 15/10/2020 00:30)
  Journal: 1 dia de 15/10/2020 existe (15/10/2020) Após o backup do dia14/10)
・Global alvo: ^TEST1

A imagem está abaixo.

Global ^TEST1 será preenchida a partir de 14/10.
A global ^TEST1 foi excluída acidentalmente com uma instrução KILL às 15:30 do dia 15 de Outubro.
Neste estágio, queremos restaurar a global ^TEST1 imediatamente antes do KILL.
No exemplo, ^TEST1(1) a ^TEST1(100) são restaurados usando o journal da global criado pelos comandos abaixo.

USER>for i=1:1:100 set ^TEST1(i)=$ZTIMESTAMP

USER>for i=1:1:100 set ^TEST2(i)=$ZTIMESTAMP

USER>kill ^TEST1   // ← Processando até aqui para recuperar usando o arquivo de journal para a global ^TEST1

[Procedimento de Restauração]

  1. Fazer backup/restauração ou copiar (montar) arquivos de banco de dados de backup (CACHE.DAT/IRIS.DAT) para outro sistema
  2. Copie os journals após a resturação do backup para outro sistema
  3. Identificar os registros do journal para o comando kill do último arquivo de journal
    • Observação1: Visualizar os registros do journal no Portal de Administração ( Portal de Gerenciamento > [Operações do Sistemas] > [Arquivos de Journals] > clique no link  [Exibir] para o arquivo específico(Para o exemplo exibido, o deslocamento do registro do journal para o comando KILL é 9060180)  
    • Observação 2: Você também pode verificar os registros do journal usando a rotina do sistema SELECT^JRNDUMP.
  1. Restaure os arquivos de journal em ordem, apenas as globais a serem restauradas estão OK.
  2. Para o último arquivo use o utilitário ZJRNFILT
  3. Exporte a global recuperada, copie e importe para o sistema original

Abaixo o código de exemplo da rotina ZJRNFILT utilizada no 5º passo(deve ser criada no namespace %SYS com o nome ZJRNFILT ).

ZJRNFILT (pid,dir,glo,type,restmode,addr,time) 
set  restmode =1
// If TEST1 is included in the global variable name 
// and the journal record is 9060180 or later, set restmode=0 (=do not restore) 
if  ( glo  [ "TEST1" ) & ( addr >=9060180) { 
   set  restmode =0
} 
quit

Abaixo exemplo da restauração do último arquivo de journal usando ZJRNFILT (as entradas estão em letras azuis em negrito).


  1. %SYS>do ^JRNRESTO
  2.  
  3. This utility uses the contents of journal files
  4. to bring globals up to date from a backup.
  5.  
  6. Restore the Journal? Yes => Yes
  7. Use current journal filter (ZJRNFILT)? yes
  8. Use journal marker filter (MARKER^ZJRNFILT)? no
  9. Apply filter to every selected file? Yes => yes
  10. Process all journaled globals in all directories? no
  11. Are journal files imported from a different operating system? No => no
  12.  
  13. Directory to restore [? for help]: c:\intersystems\hscv\mgr\user\   c:\intersystems\hscv\mgr\user\
  14. Redirect to Directory: c:\intersystems\hscv\mgr\user\
  15.  => c:\intersystems\hscv\mgr\user\--> c:\intersystems\hscv\mgr\user\
  16. Process all globals in c:\intersystems\hscv\mgr\user\? No => no
  17.  
  18. Global ^TEST1
  19. Global ^
  20.  
  21. Directory to restore [? for help]:
  22.  
  23. Processing globals from the following datasets:
  24.  1. c:\intersystems\hscv\mgr\user\   Selected Globals:
  25.           ^TEST1
  26.  
  27. Specifications correct? Yes => yes
  28. Are journal files created by this IRIS instance and located in their original
  29. paths? (Uses journal.log to locate journals)? no
  30. If you have a copy of the journal history log file from the Cache or IRIS
  31. instance where the journal files were created, enter its full path below;
  32. otherwise, press ENTER and continue.
  33. Journal history log:
  34. Specify range of files to process (names in YYYYMMDD.NNN format)
  35.  
  36. from:     <20201012.002> [?] => 20201015.001
  37.  
  38. through:  <20201015.001> [?] =>
  39.  
  40.  
  41. Provide or confirm the following configuration settings:
  42.  
  43. Journal File Prefix: [?] =>
  44.  
  45. Files to dejournal will be looked for in:
  46.      c:\intersystems\hscv\mgr\journal\
  47. in addition to any directories you are going to specify below, UNLESS
  48. you enter a minus sign ('-' without quotes) at the prompt below,
  49. in which case ONLY directories given subsequently will be searched
  50.  
  51. Directory to search: <return when done>
  52. Here is a list of directories in the order they will be searched for files:
  53.      c:\intersystems\hscv\mgr\journal\
  54. Prompt for name of the next file to process? No => no
  55.  
  56. The following actions will be performed if you answer YES below:
  57.  
  58. * Listing journal files in the order they will be processed
  59. * Checking for any missing journal file on the list ("a broken chain")
  60.  
  61. The basic assumption is that the files to be processed are all
  62. currently accessible. If that is not the case, e.g., if you plan to
  63. load journal files from tapes on demand, you should answer NO below.
  64. Check for missing journal files? Yes => no
  65.  
  66. You may disable journaling of updates for faster restore for all
  67. databases other than mirrored databases. You may not want to do this
  68. if a database to restore is being shadowed as the shadow will not
  69. receive the updates.
  70. Do you want to disable journaling the updates? Yes => yes
  71. Updates will NOT be journaled
  72. Before we job off restore daemons, you may tailor the behavior of a
  73. restore daemon in certain events by choosing from the options below:
  74.  
  75.      DEFAULT:    Continue despite database-related problems (e.g., a target
  76.      database is not journaled, cannot be mounted, etc.), skipping affected
  77.      updates
  78.  
  79.      ALTERNATE:  Abort if an update would have to be skipped due to a
  80.      database-related problem (e.g., a target database is not journaled,
  81.      cannot be mounted, etc.)
  82.  
  83.      DEFAULT:    Abort if an update would have to be skipped due to a
  84.      journal-related problem (e.g., journal corruption, some cases of missing
  85.      journal files, etc.)
  86.  
  87.      ALTERNATE:  Continue despite journal-related problems (e.g., journal
  88.      corruption, some missing journal files, etc.), skipping affected updates
  89.  
  90. Would you like to change the default actions? No => no
  91.  
  92.  
  93. Start the restore? Yes => yes
  94.  
  95.  
  96.  
  97. c:\intersystems\hscv\mgr\journal\20201015.001
  98. 100.00%
  99. ***Journal file finished at 15:43:05
  100.  
  101. [journal operation completed]
  102. Do you want to delete your journal filter? yes
  103. Journal filter ZJRNFILT deleted
  104.  
  105. %SYS>

Ao fazer a restauração de uma global o journal , **por segurnaça** nós recomendamos que seja feita uma replicação da base de dados e dos arquivos de journal em ou outro ambiente que não seja o de produção. Para então, exportar a global restaurada e transferir (copiar) no ambiente de produção.

Para detalhes das mensagens exibidas durante a restauração do arquivo de journal, consulte a documentação

Discussão (0)1
Entre ou crie uma conta para continuar