記事
· 2020年10月15日 6m read

誤って削除したグローバルを復旧させる方法

これはInterSystems FAQ サイトの記事です。

この記事では「グローバルを誤って削除してしまった!」という場合の対処方法をご紹介します。

誤って削除してしまった特定のグローバルを復旧するためには、バックアップファイルとジャーナルを使用します。
復旧は、^ZJRNFILTユーティリティによるジャーナルリストアで条件を指定してジャーナルレコードをリストアする方法で行います。
この方法で、ある時点のデータベースのバックアップに対して、削除が含まれるジャーナルレコードについて特定グローバルを削除するまでのものを適用することができます。

^ZJRNFILTユーティリティの詳細については、以下のドキュメントをご参照ください。

^ZJRNFILT を使用したジャーナル・レコードのフィルタ処理について【IRIS】
^ZJRNFILT を使用したジャーナル・レコードのフィルタ処理について

 

【実施例】

  ・2020/10/14 時点のバックアップが存在している(バックアップは2020/10/15 0:30に実行したとします)
     ジャーナル:2020/10/15 の1日分が存在している(2020/10/14のバックアップ以降のもの)
  ・対象のグローバル:^TEST1

イメージは以下の通りです。

  1. グローバル ^TEST1 は 10/14 よりデータが作成される。
  2. グローバル ^TEST1 が 10/15 の 15:30 に KILL 文にて誤って削除された。
  3. この段階でKILL文が発行される直前のグローバル ^TEST1 を復旧したい。

 

実行例では、以下コマンドで作成したグローバルをジャーナルを利用して ^TEST1(1)~^TEST1(100) を復旧します。

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

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

USER>kill ^TEST1   // ← ここまでの処理の ^TEST1 に対してジャーナルファイルを利用して復旧します

 

【復旧手順】

  1. 別システムに、バックアップリストアまたはバックアップしたデータベースファイル(CACHE.DAT/IRIS.DAT)をコピー(マウント)
  2. バックアップ取得以降のジャーナルを別システムにコピー
  3. 最後のジャーナルファイルについてKillしたジャーナルレコードを特定
    • メモ1:管理ポータルのジャーナルレコードの表示(管理ポータル > [システムオペレーション] > [ジャーナル] > 対象ファイルの[参照]のリンクをクリック ) (図例の場合だと、KILLのジャーナルレコードは 9060180 ということがわかります)  
    • メモ2:システムルーチン SELECT^JRNDUMP を使用してジャーナルレコードを確認する方法もあります。
  4. ジャーナルファイルを順番にリストア、リストア対象は復旧したいグローバルのみでOK
  5. 最後のジャーナルファイルのみ ZJRNFILT を使用
  6. 復旧したグローバルをエクスポートし、元システムにコピー&インポート

 

以下、5番の ZJRNFILT ルーチン例です(%SYSネームスペースにルーチン名:ZJRNFILT で作成します)。

ZJRNFILT(pid,dir,glo,type,restmode,addr,time)
 set restmode=1
 // グローバル変数名に TEST1 が含まれいる
 // かつ ジャーナルレコードが9060180以降は restmode=0 に設定(=リストアしない)
 if (glo [ "TEST1") & (addr>=9060180) {
   set restmode=0
 }
 quit

最後のジャーナルファイルのZJRNFILTを使用したリストア例は以下の通りです(青太文字が入力内容です)。


  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>

ジャーナルリストアによりグローバルを復旧する場合は ** 安全の為 ** 本番環境とは別の環境に、データベース、ジャーナルを複製して実施することをお勧めします。
そこで復旧したグローバルをエクスポートし本番環境に転送(コピー)するようにしてください。

ジャーナルリストア時に表示されるメッセージ詳細については、ドキュメントもご参照ください。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください