Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Sawa_Ito
Product and Topic Expert
Product and Topic Expert
0 Kudos


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

 

 

 

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」

を入力してください。

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

 

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

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