SAP SQL Anywhere 17 – よりグローバルな sa_validate() プロシージャー
このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。
sa_validate() procedure は、本番システムがダウンする状況になる前に、あらゆるデータの破損をキャッチして対処できるようデータベースの様々な側面のバリデーションに使用できます。一般的にバックアッププロセスの一部としてバリデーションを実行することが好ましいとされています。
SQL Anywhere では、SQL Anywhere のイベントシステムを利用することで、これを自動化することができます。
以下にバックアップを実施する前にデータベースのバリデーションを実行するバックアップイベントの一例を紹介します。もし問題があれば、管理者に e-mail が送信されるようにします。
- CREATE EVENT “DBA”.”BackupDatabase” DISABLE
- AT ALL HANDLER
- BEGIN
- DECLARE res_validate VARCHAR(250);
- DECLARE res_backup VARCHAR(250);
- DECLARE backup_dir VARCHAR(250);
- DECLARE crsr_validate dynamic scroll cursor FOR CALL sa_validate();
- — 最初に、破損したデータベースをバックアップしないよう確認するためデータベースのバリデーションを実行します。
- OPEN crsr_validate;
- FETCH NEXT crsr_validate INTO res_validate;
- IF res_validate <> ‘No error detected’ THEN
- CALL xp_startsmtp(‘mailuser’,’mailserver.xyz.com’);
- CALL xp_sendmail(‘admin@xyz.com‘,’Database Backup Failed!’,NULL,NULL,NULL,‘Validation failed for database: ‘ || res_validate);
- CALL xp_stopsmtp();
- RETURN
- END IF;
- –データベースが良いコンディションであると満足した場合には、データベースをバックアップしログを記録します。
- — ローリングバックアップ7日のセットを使用します。
- SET backup_dir = ‘c:\backup\ ‘ + dayname(today());
- BACKUP DATABASE DIRECTORY backup_dir;
- EXCEPTION WHEN OTHERS THEN
- SELECT errormsg() INTO res_backup;
- CALL xp_startsmtp(‘mailuser’,’mailserver.xyz.com’);
- CALL xp_sendmail(‘admin@xyz.com‘,’Database Backup Failed!’,NULL,NULL,NULL,‘Backup failed for database: ‘ || res_backup);
- CALL xp_stopsmtp();
- END;
- –毎日実施されるようにバックアップイベントにスケジュールを追加します。
- ALTER EVENT “BackupDatabase” ADD SCHEDULE “BackupSched” START TIME ’23:00:00′ ON(‘Sunday’,’Saturday’,’Friday’,’Thursday’,’Wednesday’,’Tuesday’,’Monday’)
上記の例でおかしな点に気づかれたかもしれません。バリデーションの失敗を検出するには、特定の文字列を見つける必要があります。
- 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” カラムをチェックして、バリデーションの成功/失敗を判断することができます。
- CREATE EVENT “DBA”.”BackupDatabase” DISABLE
- AT ALL HANDLER
- BEGIN
- DECLARE res_backup VARCHAR(250);
- DECLARE backup_dir VARCHAR(250);
- DECLARE res_messages VARCHAR(250);
- DECLARE res_isvalid integer;
- DECLARE res_object VARCHAR(250);
- DECLARE crsr_validate dynamic scroll cursor FOR CALL sa_validate();
- — 最初に、破損したデータベースをバックアップしないよう確認するためデータベースのバリデーションを実行します。
- OPEN crsr_validate;
- FETCH NEXT crsr_validate INTO res_messages, res_isvalid, res_object;
- IF res_isvalid = 0 THEN –バリデーションが失敗しました。
- CALL xp_startsmtp(‘mailuser’,’mailserver.xyz.com’);
- CALL xp_sendmail(‘admin@xyz.com‘,’Database Backup Failed!’,NULL,NULL,NULL,‘Validation failed for database: ‘ || res_object || ‘\n ‘ || res_messages );
- CALL xp_stopsmtp();
- MESSAGE ‘Validation failed for database: ‘ || res_object || ‘\n ‘ || res_messages;
- RETURN
- END IF;
- –データベースが良いコンディションであると満足した場合には、データベースをバックアップしログを記録します。
- — ローリングバックアップ7日のセットを使用します。
- SET backup_dir = ‘c:\backup\ ‘ + dayname(today());
- BACKUP DATABASE DIRECTORY backup_dir;
- EXCEPTION WHEN OTHERS THEN
- SELECT errormsg() INTO res_backup;
- CALL xp_startsmtp(‘mailuser’,’mailserver.xyz.com’);
- CALL xp_sendmail(‘admin@xyz.com‘,’Database Backup Failed!’,NULL,NULL,NULL,‘Backup failed for database: ‘ || res_backup);
- CALL xp_stopsmtp();
- END;
- –毎日実施されるようにバックアップイベントにスケジュールを追加します。
- 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」
を入力してください。
不具合につきましては、サポート契約者様専用の問い合わせ方法にてお問い合わせください。
======================
ご購入に関するお問い合わせ
こちらよりお問い合わせください。