0

alter table disable table lock 句を使用して、誤ってテーブルのロックを無効にしました。次のステートメントを使用してテーブル名を変更したいので、ロックを有効にします。

SQL> テーブル account.acctbk_payment_seq を変更すると、テーブル ロックが有効になります。alter table account.acctbk_payment_seq enable table lock * 1 行目のエラー: ORA-00054: リソースがビジーで、NOWAIT を指定して取得するか、タイムアウトが期限切れになりました

理想は?

お返事ありがとうございます。たとえば、ora 1120:

create table scott.t8 (id number);
alter table scott.t8 disable table lock;
alter table scott.t8 enable table lock;

ORA-00054: リソースがビジーで、NOWAIT を指定して取得するか、タイムアウトになりました

4

1 に答える 1

1

オラクルのドキュメントから:

ENABLE TABLE LOCK ENABLE TABLE LOCK を指定してテーブル ロックを有効にし、テーブルでの DDL 操作を許可します。Oracle Databaseが表ロックを有効にする前に、現在実行中のすべてのトランザクションをコミットまたはロールバックする必要があります。

「テーブルを使用している現在実行中のすべてのトランザクション」とは言わないことに注意してください。これがインスタンス全体で未処理のトランザクションが存在できないことを本当に意味するかどうかはわかりませんが、そうである可能性があります。

データベースにアクセスしているすべてのセッション、特にこのテーブルに対してトランザクションを開いている可能性のあるセッションをすべて削除してみてください。それでもエラーが発生する場合は、インスタンスを再起動すると解決することがあります。

更新: Oracle サポートからの支援が必要なようです。しかし、サポート Web サイトで検索を行ったところ、考えられる理由についていくつかのメモが見つかりました。テーブルに触れている未確定の分散トランザクションが存在する可能性があります。これらのクエリが何かを返すかどうかを確認し、そうであれば、これらの保留中のトランザクションを解決する必要があります。

SELECT * FROM DBA_2PC_PENDING;
SELECT * FROM DBA_2PC_NEIGHBORS;
于 2011-04-07T12:52:36.713 に答える