連載
» 2017年11月02日 05時00分 公開

SPA実行編――短い工数で正確にSQLをテストする【12c対応】とにかく苦労しない「RAT」簡単攻略テクニック(4)(2/3 ページ)

[長内麻記,@IT]

STEP 6:1回目と2回目のSQL試行を比較してレポート出力

 STS最後のステップでは、1回目と2回目のSQL試行をSQLごとに比較し、レポートとして出力します。Enterprise Manager画面の動画で説明します(動画3)。

動画が取得できませんでした
動画3 1回目と2回目のSQL試行の比較とレポート出力の実行手順

 いかがでしたか。非常に簡単な手順でSPAを実行でき、エラーとなるSQLや実行計画が変わるSQL、性能が劣化するSQLを特定できました。

 性能が劣化したかどうかを調べるには、Enterprise Managerで「SQL試行比較の実行」画面を用い、「比較メトリック」として経過時間を選び、グラフを作成します(図4)。比較メトリックは、SPAを実行する環境や方法によって考慮が必要なものもあるため、次回詳しく解説します。

図4 図4 Enterprise ManagerのSQL試行比較の実行とレポート画面 経過時間を軸に選んだ

環境準備不足がエラーSQLを増やす可能性も

 動画3の中では、テストした94本のSQLのうち6本がエラーになりました。そのうち1本は非互換が原因のエラー、それ以外の5本は「ORA-01031: 権限が不足しています」というエラーです。詳細画面を確認すると、この5本はSOEスキーマのシーケンスを使用するSQLでした(図5)。

図5 図5 Enterprise ManagerのエラーとなるSQL確認画面

 原因を調べるために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)。

図6 図6 権限付与前後でエラーを起こしたSQLの本数が減った

 SPAには非互換が原因でエラーとなるSQLを見つけるための機能が備わっています。今回のような権限不足のエラーに加え、テーブルを移行し忘れると「ORA-00942: 表またはビューが存在しません」が発生するなど、テスト環境の準備不足が原因のエラーも、レポートに含まれます。

 もしエラーを起こすSQLが大量に出力されても慌てず、エラーメッセージを見て状況を判断してから対応しましょう。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。