バージョン6 とバージョン7 のSQL Anywhere Studio におけるDBVALID の 相違点

本書では、バージョン6 とバージョン7 のSQL Anywhere Studio におけるdbvalid コマンドライン・ユーティリティの相違点をいくつか説明します。

dbvalid コマンドライン・ユーティリティは、データベース内の一部または全部のテーブルでインデックスとキーを検証します。本書では、バージョン6 とバージョン7 のSQL AnywhereStudio におけるdbvalid コマンドライン・ユーティリティの相違点をいくつか説明します。

バージョン6 では、次のようなチェックがdbvalid コマンドライン・ユーティリティによって実行されます。

・ SYSTABLE 内のテーブルごとにリストされたページと、テーブルのデータが格納されている実際のページを比較する
・ SYSTABLE 内のテーブルごとにリストされたローの数と、テーブルに含まれるローの実際の数を比較する
・ テーブルをスキャンして、各テーブルのデータと、テーブル上で定義されたインデックスまたはキーの値が対応していることを確認する

上記のいずれかのチェックが失敗に終わると、どのテーブルのどのローによってエラーが発生したのかがdbvalid ユーティリティによって示されます。そのエラーの解決は、ユーザ自身が行う必要があります。
バージョン7 のdbvalid コマンドライン・ユーティリティのデフォルト動作はバージョン6と同じです。ただし、バージョン7 のユーティリティは作り直されて機能も向上しているため、その動作はバージョン6 よりも高速になっています。このバージョンのユーティリティには、他のチェックを利用するためのスイッチがいくつか用意されています。

-fi スイッチを使用すると、バージョン6 の場合と同じチェックのほかに、各インデックスをスキャンしてインデックス値が実際のローと対応していることを確認する処理が実行されます。これはデフォルトの動作とは逆であり、テーブル・チェックに加えて実行されるので注意してください。

-fd スイッチを使用すると、バージョン6 の場合と同じチェックのほかに、データが連続していることの確認が行われます。デフォルトのチェックでは、テーブル内のローがインデックス値と一致していることは確認されますが、すべてのデータがテーブル内にあることは確認されません。場合によっては、ローがデータベースの複数のページに頻繁にまたがることがあります(特に、Long、Binary、Image、BLOB などの大きなデータ型の場合)。バージョン6 のチェックでは、データの開始ポイントがインデックス値に対応していることだけを確認していました。-fd スイッチを指定すると、データのすべての部分が完全な状態であることを確認するために、同じローの一部分を含んだ各ページが実際にスキャンされます。このチェック中にデータが壊れていることがわかると、そのローとテーブルが示されます。そのため、ユーザはテーブルからローを選択して、そのローを再作成することができます。

-f スイッチを付けてdbvalid を実行すると、デフォルトのチェックに加えて、-fd と-fi のチェックも実行されます。