ALLOCATE_UNIQUE_AUTONOMOUS ストアドプロシージャは、ユーザーロックを申請するために使用します。ユーザーはロック名 lockname を指定する必要があります。初回申請時には、テーブル DBMS_LOCK_ALLOCATED に申請されたロックが記録され、lockhandle が返されます。その後の申請時に、対応するレコードが既に存在すれば、直接ロックハンドルが返されます。つまり、2回の申請は同じロックを対象としています。
ユーザーロックにはタイムアウト時間が設定されており、この時間は expiration_secs で指定します。タイムアウト後、DBMS_LOCK_ALLOCATED テーブル内の該当するレコードは削除されます。再度申請された同名のユーザーロックは、別のロックとなり、以前のユーザーロックとは関係ありません。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみ提供されます。
構文
DBMS_LOCK.ALLOCATE_UNIQUE_AUTONOMOUS (
lockname IN VARCHAR2,
lockhandle OUT VARCHAR2,
expiration_secs IN INTEGER DEFAULT 864000);
パラメータの説明
パラメータ |
説明 |
|---|---|
| lockname | ロック名。ORA$ で始まらないように注意してください。 |
| lockhandle | ALLOCATE_UNIQUE_AUTONOMOUS で生成されたロックハンドルを返します。このハンドルを使用して REQUEST 操作を実行できます。任意のセッションが ALLOCATE_UNIQUE_AUTONOMOUS を使用して同じロック名で取得したロックハンドルは、すべて同じロックを指します。lockhandle の最大長は VARCHAR2 (128) です。 |
| expiration_secs | ALLOCATE_UNIQUE_AUTONOMOUS で申請されたロックはすべて、DBMS_LOCK_ALLOCATED テーブルにレコードとして保存されます。expiration_secs はそのレコードの保持時間を指定し、この時間内に対応するロックマッピングはクリーンアップされません。デフォルトのタイムアウト時間は10日間です。ALLOCATE_UNIQUE_AUTONOMOUS は期限切れのロックを自動的にクリーンアップするため、DBMS_LOCK_ALLOCATED テーブルのデータを手動で削除する必要はありません。 |
エラーメッセージ
エラーメッセージは次のとおりです: OBE-20000, ORU-10003: Unable to find or insert lock <lockname> into catalog dbms_lock_allocated.
例
obclient> DELIMITER /
obclient> DECLARE
my_lockname VARCHAR2(100) :='test01';
my_lockhandle VARCHAR2(200);
BEGIN
DBMS_LOCK.ALLOCATE_UNIQUE_AUTONOMOUS(lockname => my_lockname,lockhandle => my_lockhandle);
END;/
Query OK, 1 row affected