2011-05-09 13 views

Trả lời

9

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#>>' 
+0

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? –

+1

@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. –

3

Nếu phiên giao dịch không rollback một cách rõ ràng, nếu máy chủ cơ sở dữ liệu không còn có thể đạt được một khách hàng hoạt động của nó sẽ được cuộn lại tự động, và sau đó nó sẽ chấm dứt phiên.

Máy chủ thường khá hài lòng nếu khách hàng không thực hiện yêu cầu cho nó trong nhiều giờ khi kết thúc. Xem bạn có SQLNET.EXPIRE_TIME được đặt thành bất kỳ thứ gì trên máy chủ hay không. Nếu nó là một giá trị khác không, thì đó là bao nhiêu phút nó sẽ đợi trước khi kiểm tra xem liệu một kết nối máy khách đã chết chưa. Nếu đó là số không, nó sẽ không kiểm tra và sẽ chỉ nhận thức được nếu nó tìm thấy khách hàng đã chết khi trả lời một yêu cầu của khách hàng.

Ngoài ra, quá trình khôi phục có thể mất chút thời gian. Nếu có nhiều việc phải làm, có thể mất hàng giờ. Bất kỳ điều gì chờ đợi trong phiên đó sẽ tiếp tục chờ cho đến khi hoàn thành rollback đó

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