未使用のストアド プロシージャを削除できるように、ストアド プロシージャが最後に実行された日時を確認したいと考えています。1 つの方法は、コードをスキャンして、使用されているストアド プロシージャのリストを見つけ、使用されていないストアド プロシージャを削除することです。ストアド プロシージャの数は数千に及ぶため、DB2 にこれを簡単に見つけるためのオプションがあるかどうかを知りたいです。
2 に答える
使用しているDB2のプラットフォームまたはバージョンはわかりません。
DB2 for Linux / UNIX / Windowsを実行していて、V9.7以降を使用している場合は、のLASTUSED
列を確認できます。この列にはSYSCAT.PACKAGES
、次の方法で参加できSYSCAT.PROCEDURES
ますSYSCAT.ROUTINEDEP
。
select
proc.procschema
,proc.procname
,pkg.lastused
from
syscat.procedures proc
,syscat.routinedep rd
,syscat.packages pkg
where
proc.specificname = rd.routinename
and rd.bname = pkg.pkgname
and pkg.lastused <> '01/01/0001'
order by
pkg.lastused desc;
プロシージャが実行されたことがない場合、LASTUSEDの値は「01/01/0001」になります。上記のクエリはこれらを除外します。
PROCSCHEMA
また、すべてのシステムストアドプロシージャが表示されないように、フィルタリングすることもできます...
明示的なロギングまたはトレースがないと、データベースのすべてのストアドプロシージャについてこの情報を取得することはできません。ただし、--sys.dm_exec_procedure_statsを使用すると、現在サーバーに実行プランがキャッシュされているストアドプロシージャに関連する他の多くの情報とともに、この詳細を取得できます。これは、キャッシュされたストアドプロシージャの集計パフォーマンス統計を返すシステム動的ビューです。
このビューは、キャッシュされたストアドプロシージャプランごとに1つの行を返します。行の有効期間は、ストアドプロシージャがキャッシュされたままである限りです。ストアドプロシージャがキャッシュから削除されると、対応する行がこのビューから削除されます。
USE DBName // replace with your DB name
GO
SELECT
O.name,
PS.last_execution_time
FROM
sys.dm_exec_procedure_stats PS
INNER JOIN sys.objects O
ON O.[object_id] = PS.[object_id]
GO
上記のスクリプトは、現在のデータベースのすべてのキャッシュされたストアドプロシージャの名前と、最後の実行時刻を返します。
詳しくはこちらをご確認ください
DB2では、特定の時間、間隔、または指定されたイベントが発生したときに実行されるようにストアドプロシージャをスケジュールできると思います。管理タスクスケジューラは、これらの要求を管理します。
手順
ストアドプロシージャの実行をスケジュールするには:
Add a task for the administrative task scheduler by using the ADMIN_TASK_ADD stored procedure. When you add your task, specify which stored procedure to run and when to run it. Use one of the following parameters or groups of parameters of ADMIN_TASK_ADD to control when the stored procedure is run:
間隔-ストアドプロシージャは、指定された一定の間隔で実行されます。ポイントインタイム-ストアドプロシージャは、指定された時間に実行されます。trigger-task-name-ストアドプロシージャは、指定されたタスクが発生したときに実行されます。trigger-task-name trigger-task-cond trigger-task-code-ストアドプロシージャは、指定されたタスクとタスクの結果が発生したときに実行されます。
オプションで、次の1つ以上のパラメーターを使用して、ストアード・プロシージャーをいつ実行するかを制御することもできます。
begin-timestamp最も早い許可された実行時間end-timestamp最も遅い許可された実行時間max-invocations最大実行数
ストアード・プロシージャーを実行するために指定された時間またはイベントが発生すると、管理タスク・スケジューラーはDB2®のストアード・プロシージャーを呼び出します。
- オプション:タスクの実行が終了したら、ADMIN_TASK_STATUS関数を使用してステータスを確認します。この関数は、スケジュールされた各タスクの最後の実行ステータスを示す1行のテーブルを返します。スケジュールされたタスクがストアドプロシージャの場合、JOB_ID、MAXRC、COMPLETION_TYPE、SYSTEM_ABENDCD、およびUSER_ABENDCDフィールドにnull値が含まれます。DB2エラーの場合、SQLCODE、SQLSTATE、SQLERRMC、およびSQLERRPフィールドには、DB2がストアード・プロシージャーの呼び出しから返した情報が含まれています。
ADMIN_TASK_STATUSの詳細については、ここをクリックしてください