1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ServiceNow】バッチ更新ジョブで大量のレコードを安全に更新する

Posted at

バージョンはXanaduです。

案件で本番リリース後に、リリース前に起票されたレコードの項目に特定の値を設定するデータパッチを実施しました。
今回は安全のため、ServiceNow標準で用意されているバッチ更新ジョブ機能を採用しました。

バッチ更新ジョブ

レコードを安全に更新する
ノーコードでトランザクションデータを更新できる機能です。
今回はインシデントの2万件のレコードを更新します。

  1. バックグラウンドスクリプトで2万件のテストレコードを作成
    image.png
    image.png

  2. [システムデータ管理]>[ジョブを更新]メニューをクリック
    image.png

  3. [新規]ボタンをクリック。
    image.png

  4. バッチ更新ジョブを作成する。
    image.png
    ①:対象のトランザクションテーブルを選択
    ②:[プレビュー]をクリックするとデータパッチ対象のレコードを自動でカウントしてくれる
    ③:データパッチ対象とするレコードの条件をフィルタ条件で指定
    ④:どの項目にどんな値を設定するか、フィルタ条件で指定
    ⑤:Trueに設定すると、データパッチで「更新者」などの項目が自動で更新される。今すぐ実行すると実行ボタンを押したユーザーで、日時指定で実行すると「System」で更新される
    ⑥:Trueに設定するとレコード更新をトリガーとするビジネスルールやフローが動く。PJで実行した際はFalseに設定しました

  5. [続行]ボタンをクリック
    image.png
    関連リンクから[今すぐ実行]するか、実行場所[run_at](実行時間)を設定して、データパッチをスケジュールする。夜間データパッチを実施するときなどは後者が良い
    ※参考までに、2万件のレコードの更新に40分掛かりました。

  6. 実行場所を設定して[更新]ボタンをクリック
    image.png
    image.png

  7. バッチ更新ジョブが作成される
    image.png
    指定した時間に自動でデータパッチされます。

注意

  • 作成されたバッチレコードは一度だけ実行可能です。定期的にデータを更新したいなどの目的には合いません。
  • テストとしてあえてまったく同じ時刻に複数のバッチをスケジュールして実行しようとしたところ、指定した時刻にデータパッチが実行されないエラーが起きました。複数のデータパッチを実行する場合は1時間ほど時間をずらしてスケジュールするのがよさそうです。

余談

はじめはバックグラウンドスクリプトで数千件ずつ更新するかな...と考えていましたが、ちょうど本番リリース前に他の案件でバックグラウンドスクリプトから大量のレコードを更新しようとして原因不明のエラーになったという話を聞いて、より安全な方法はないかと探してみたところ発見しました。
リリース作業でデータパッチを実施することは多いので、公式が提供する安全な方法として今後も採用したいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?