2012-12-12 35 views
15

Tôi gặp sự cố khi cố gắng cập nhật giá trị cột trong sqlplus.Xóa Khóa trong Oracle 10

Về cơ bản, nó sẽ không hoàn chỉnh và chỉ bị treo. Tôi tự hỏi nếu có anyway để loại bỏ ổ khóa trong oracle bằng vũ lực?

Tôi đã nhận thấy một bảng có tên v $ locked_object có chứa ID phát hành có liên quan đến vấn đề tôi đang gặp phải.

Hy vọng tôi đã giải thích điều này đủ tốt.

Cảm ơn bạn đã giúp đỡ!

+1

Bạn đã tìm thấy quy trình _what_ đã khóa đối tượng và quá trình đó đang làm gì? Chắc chắn nó tốt hơn để sửa chữa vấn đề hơn là hack xung quanh nó? (Tôi khá chắc chắn câu trả lời cho câu hỏi của bạn là không). – Ben

Trả lời

46

này chính xác sẽ phục vụ mục đích của bạn:

SELECT SESSION_ID FROM DBA_DML_LOCKS WHERE NAME = <TABLE_NAME>; 

Sử dụng SESSION_ID để tìm ra tương ứng SERIAL# với tuyên bố này:

SELECT SID, SERIAL# FROM V$SESSION WHERE SID IN (
    SELECT SESSION_ID FROM DBA_DML_LOCKS WHERE NAME = <TABLE_NAME> 
); 

Xác định vị trí vi phạm Tuples SID, SERIAL# và phát hành nó như thế này:

ALTER SYSTEM KILL SESSION 'SID, SERIAL#'; 
+0

Tôi đã giải quyết vấn đề này bằng cách tìm phiên giữ trong ứng dụng sau khi kiểm tra dba_blockers. Nhưng sẽ nhớ lệnh ALTER cho tương lai. Không thể bỏ phiếu cho câu trả lời do đại diện thấp. Cảm ơn –

+0

Tôi đoán bạn có thể bỏ phiếu ngay bây giờ :) Cảm ơn – Mari

0

Có thể ai đó đã cập nhật cùng một bảng và chưa cam kết. Nó thậm chí có thể là bạn (trong một công cụ khác hoặc một phiên khác).

Cách dễ nhất để thoát khỏi khóa là thực hiện công việc trong phiên khác.

+0

Xin chào, tôi đã cố gắng tìm ra nguyên nhân của vấn đề này bằng cách tìm trong DBA_BLOCKERS. Có ID phiên và đã giết nó. –

1

Được quản lý để giải quyết vấn đề này.

Tôi đã xem bảng DBA_BLOCKERS và nhận ID phiên. Sau đó, giết phiên và khóa đã được gỡ bỏ.

Các vấn đề liên quan