STS最後のステップでは、1回目と2回目のSQL試行をSQLごとに比較し、レポートとして出力します。Enterprise Manager画面の動画で説明します(動画3)。
いかがでしたか。非常に簡単な手順でSPAを実行でき、エラーとなるSQLや実行計画が変わるSQL、性能が劣化するSQLを特定できました。
性能が劣化したかどうかを調べるには、Enterprise Managerで「SQL試行比較の実行」画面を用い、「比較メトリック」として経過時間を選び、グラフを作成します(図4)。比較メトリックは、SPAを実行する環境や方法によって考慮が必要なものもあるため、次回詳しく解説します。
動画3の中では、テストした94本のSQLのうち6本がエラーになりました。そのうち1本は非互換が原因のエラー、それ以外の5本は「ORA-01031: 権限が不足しています」というエラーです。詳細画面を確認すると、この5本はSOEスキーマのシーケンスを使用するSQLでした(図5)。
原因を調べるためにSQL*Plusユーティリティから、SPAを実行したSPAUSERでログインし、エラーが出ているSQLを実行しました。すると、同じように「ORA-01031」が発生し、SOEが保有するシーケンスに対して権限が不足していると分かります。
SQL> show user ユーザーは"SPAUSER"です。 SQL> SQL> SELECT SOE.ADDRESS_SEQ.NEXTVAL 2 FROM DUAL; SELECT SOE.ADDRESS_SEQ.NEXTVAL * 行1でエラーが発生しました。: ORA-01031: 権限が不足しています
今回の動画では、SPAを実行する上で必要最低限の権限しか、SPAUSERに付与していませんでした。テスト対象のSQL実行に必要な権限が不足していたことが、エラーの原因だったのです。
対処法は2つあります。手動で該当の権限を1つずつ付与する方法と、DBA権限を付与する方法です。DBA権限は極力付与したくないでしょう。しかし、SPAを実行するユーザーはテスト環境での一時的なものと割り切って付与してしまうのも、1つの手です。
どちらの方法にせよ、権限付与後にテストを再実行すると、5本のSQLはエラーにはならず、テスト対象として実行できました(図6)。
SPAには非互換が原因でエラーとなるSQLを見つけるための機能が備わっています。今回のような権限不足のエラーに加え、テーブルを移行し忘れると「ORA-00942: 表またはビューが存在しません」が発生するなど、テスト環境の準備不足が原因のエラーも、レポートに含まれます。
もしエラーを起こすSQLが大量に出力されても慌てず、エラーメッセージを見て状況を判断してから対応しましょう。
Copyright © ITmedia, Inc. All Rights Reserved.