Skip to Content
Author's profile photo Sawa Ito

SAP SQL Anywhere 17 – よりグローバルな sa_validate() プロシージャー

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

 

 

 

sa_validate() procedure は、本番システムがダウンする状況になる前に、あらゆるデータの破損をキャッチして対処できるようデータベースの様々な側面のバリデーションに使用できます。一般的にバックアッププロセスの一部としてバリデーションを実行することが好ましいとされています。

SQL Anywhere では、SQL Anywhere のイベントシステムを利用することで、これを自動化することができます。

以下にバックアップを実施する前にデータベースのバリデーションを実行するバックアップイベントの一例を紹介します。もし問題があれば、管理者に e-mail が送信されるようにします。

 

  1. CREATE EVENT “DBA”.”BackupDatabase” DISABLE
  2. AT ALL HANDLER
  3. BEGIN
  4.   DECLARE res_validate VARCHAR(250);
  5.   DECLARE res_backup VARCHAR(250);
  6.   DECLARE backup_dir VARCHAR(250);
  7.   DECLARE crsr_validate dynamic scroll cursor FOR CALL sa_validate();
  8.   — 最初に、破損したデータベースをバックアップしないよう確認するためデータベースのバリデーションを実行します。
  9.   OPEN crsr_validate;
  10.   FETCH NEXT crsr_validate INTO res_validate;
  11.   IF res_validate <> ‘No error detected’ THEN
  12.     CALL xp_startsmtp(‘mailuser’,’mailserver.xyz.com&rsquo;);
  13.     CALL xp_sendmail(‘admin@xyz.com‘,’Database Backup Failed!’,NULL,NULL,NULL,‘Validation failed for database: ‘ || res_validate);
  14.     CALL xp_stopsmtp();
  15.     RETURN
  16.   END IF;
  17.   –データベースが良いコンディションであると満足した場合には、データベースをバックアップしログを記録します。
  18.   — ローリングバックアップ7日のセットを使用します。
  19.   SET backup_dir = ‘c:\backup\ ‘ + dayname(today());
  20.   BACKUP DATABASE DIRECTORY backup_dir;
  21.   EXCEPTION WHEN OTHERS THEN
  22.     SELECT errormsg() INTO res_backup;
  23.     CALL xp_startsmtp(‘mailuser’,’mailserver.xyz.com’);
  24.     CALL xp_sendmail(‘admin@xyz.com‘,’Database Backup Failed!’,NULL,NULL,NULL,‘Backup failed for database: ‘ || res_backup);
  25.     CALL xp_stopsmtp();
  26. END;
  27. –毎日実施されるようにバックアップイベントにスケジュールを追加します。
  28. ALTER EVENT “BackupDatabase” ADD SCHEDULE “BackupSched” START TIME ’23:00:00′ ON(‘Sunday’,’Saturday’,’Friday’,’Thursday’,’Wednesday’,’Tuesday’,’Monday’)

 

上記の例でおかしな点に気づかれたかもしれません。バリデーションの失敗を検出するには、特定の文字列を見つける必要があります。

  1.   IF res_validate <> ‘No error detected’

 

 

SQL Anywhere の以前のバージョンでは、バリデーションエラーがないかどうか判断する唯一の方法は、‘No error detected’ という文字列を結果セットの中から見つけることでした。

しかしながら、これに関連する問題として、この文字列はまた SQL Anywhere がサポートしている全ての言語にローカライズされているため、全ての言語でこのチェックをコード化する直接的な方法がありませんでした。

 

version 17 では、sa_validate() 結果セットの既存の “Messages” カラムに新しく2つのカラムが追加されました。これにより、ディプロイメント言語を問わず、成功を継続的にチェックできるようになりました。

最初のカラムは “IsValid”で、bit 値です。バリデーションがクリーンな場合は 1 に設定され、バリデーションエラーがある場合は 0 に設定されます。

次のカラムは、“ObjectName” で、バリデーションがクリーンな場合は、空です。バリデーションエラーがある場合は、このカラムにはバリデーションに失敗したデータベースまたはテーブルの名前が含まれます。

 

上のバックアップイベントを、sa_validate() 結果セットにこの2つのカラムが含まれるようアップデートしてみます。

シンプルに “IsValid” カラムをチェックして、バリデーションの成功/失敗を判断することができます。

  1. CREATE EVENT “DBA”.”BackupDatabase” DISABLE
  2. AT ALL HANDLER
  3. BEGIN
  4.   DECLARE res_backup VARCHAR(250);
  5.   DECLARE backup_dir VARCHAR(250);
  6.   DECLARE res_messages VARCHAR(250);
  7.   DECLARE res_isvalid integer;
  8.   DECLARE res_object VARCHAR(250);
  9.   DECLARE crsr_validate dynamic scroll cursor FOR CALL sa_validate();
  10.   — 最初に、破損したデータベースをバックアップしないよう確認するためデータベースのバリデーションを実行します。
  11.   OPEN crsr_validate;
  12.   FETCH NEXT crsr_validate INTO res_messages, res_isvalid, res_object;
  13.   IF res_isvalid = 0 THEN –バリデーションが失敗しました。
  14.     CALL xp_startsmtp(‘mailuser’,’mailserver.xyz.com’);
  15.     CALL xp_sendmail(‘admin@xyz.com‘,’Database Backup Failed!’,NULL,NULL,NULL,‘Validation failed for database: ‘ || res_object || ‘\n ‘ || res_messages );
  16.     CALL xp_stopsmtp();
  17.     MESSAGE ‘Validation failed for database: ‘ || res_object || ‘\n ‘ || res_messages;
  18.     RETURN
  19.   END IF;
  20.   –データベースが良いコンディションであると満足した場合には、データベースをバックアップしログを記録します。
  21.   — ローリングバックアップ7日のセットを使用します。
  22.   SET backup_dir = ‘c:\backup\ ‘ + dayname(today());
  23.   BACKUP DATABASE DIRECTORY backup_dir;
  24.   EXCEPTION WHEN OTHERS THEN
  25.     SELECT errormsg() INTO res_backup;
  26.     CALL xp_startsmtp(‘mailuser’,’mailserver.xyz.com’);
  27.     CALL xp_sendmail(‘admin@xyz.com‘,’Database Backup Failed!’,NULL,NULL,NULL,‘Backup failed for database: ‘ || res_backup);
  28.     CALL xp_stopsmtp();
  29. END;
  30. –毎日実施されるようにバックアップイベントにスケジュールを追加します。
  31. ALTER EVENT “BackupDatabase” ADD SCHEDULE “BackupSched” START TIME ’23:00:00′ ON(‘Sunday’,’Saturday’,’Friday’,’Thursday’,’Wednesday’,’Tuesday’,’Monday’)

 

 

 

 

===

 

SAP SQL Anywhere に関する詳細情報は、SAP SQL Anywhere Communityページ<英語> を参照してください。

 

上記のコミュニティーに掲載されている技術情報は、順次SQL Anywhere 日本語コミュニティ

に掲載しています。

 

SQL Anywhere に関してはまずはこちらをご参照ください。無期限でご利用いただける無償の Developers Edition もこちらからダウンロードが可能です。

 

SQL Anywhere に関して技術的な質問のある方はコミュニティに登録し、
「Ask a Question」機能をご利用ください。

Language には「Japanese」、
Primary Tag には「SAP SQL Anywhere」を選択
User Tagに「sql anywhere」「sql anywhere Japanese question」

を入力してください。

不具合につきましては、サポート契約者様専用の問い合わせ方法にてお問い合わせください。

 

======================
ご購入に関するお問い合わせ

こちらよりお問い合わせください。

Assigned Tags

      Be the first to leave a comment
      You must be Logged on to comment or reply to a post.