Không thể đăng xuất khỏi cơ sở dữ liệu Oracle mà không cam kết hoặc quay lại. Có thể ứng dụng khách đã gặp sự cố hoặc bị buộc phải chấm dứt và không có cơ hội đăng xuất khỏi một phiên trên máy chủ đang giữ một số khóa. Nếu đúng như vậy, DBA sẽ cần phải giết phiên đó.
Nếu bạn là DBA và bạn không chắc chắn những gì phiên cần phải bị giết, bạn có thể chạy các truy vấn sau đây để có được thông tin về các buổi khác nhau mà đang nắm giữ ổ khóa được ngăn chặn buổi khác
SELECT ses.sid, ses.serial#, ses.username, ses.program, ses.osuser, ses.machine
FROM v$session ses,
dba_blockers blk
WHERE blk.holding_session = ses.sid
một khi bạn đã xác định phiên (s) để giết
ALTER SYSTEM KILL SESSION '<<sid>>, <<serial#>>'
Nguồn
2011-05-09 04:25:43
Cảm ơn @JustinCave cho câu trả lời của bạn. Để làm rõ, nếu phiên không được chấm dứt một cách rõ ràng, nó sẽ không bao giờ tự động chấm dứt? –
@RussellSilva - Nó phụ thuộc vào ý bạn là "tự động". Nếu ứng dụng khách gặp sự cố, bạn có thể bật phát hiện kết nối chết (DCD) trên máy chủ cơ sở dữ liệu. Điều đó sẽ làm cho cơ sở dữ liệu định kỳ ping khách hàng để xác định xem nó vẫn còn lên và để giết phiên nếu khách hàng đã bị rơi. Điều đó xảy ra tương đối nhanh chóng, tuy nhiên, vì vậy nó không liên quan đến câu hỏi ban đầu. Bạn có thể cấu hình Oracle để giết các phiên nếu chúng không hoạt động quá lâu. Trong cả hai trường hợp này, phiên được kết thúc rõ ràng bằng một 'rollback', nó chỉ bị cơ sở dữ liệu chấm dứt. –