it-swarm-vi.tech

ORA-03113: kết thúc tập tin trên kênh liên lạc sau thời gian dài không hoạt động trong ứng dụng ASP.Net

Tôi đã có một ứng dụng ASP.Net 2.0 cân bằng tải (không sử dụng trạng thái Phiên) trên IIS5 chạy trở lại một máy chủ Oracle 10g, sử dụng phiên bản 10.1.0.301 của trình điều khiển ODAC/ODP.Net. Sau một thời gian dài không hoạt động (một vài giờ), ứng dụng, dường như ngẫu nhiên, sẽ đưa ra một ngoại lệ của Oracle:

Ngoại lệ: ORA-03113: end-of-file trên kênh liên lạc tại Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode, OracleConnection Conn, IntPtr opsErrCtx, OpoSqlValCtx .OracleCommand.ExecuteRead

... Phần Oracle của ngăn xếp kết thúc tại đây ...

Chúng tôi đang tạo các kết nối mới theo mọi yêu cầu, được đóng và mở trong một lần thử/bắt/cuối cùng để đảm bảo đóng kết nối đúng, và toàn bộ điều được gói trong một khối sử dụng (OracleConnection yadayada) {...}. Vấn đề này không xuất hiện liên quan đến việc khởi động lại ứng dụng ASP.Net sau khi không hoạt động.

Chúng tôi vẫn chưa tái tạo vấn đề chính mình. Suy nghĩ, cầu nguyện, giúp đỡ?


Thêm : Đã kiểm tra với CNTT, tường lửa không được đặt để hủy kết nối giữa các máy chủ đó.

23
Greg Hurlman

ORA-03113: cuối tập tin trên kênh liên lạc

Là cơ sở dữ liệu cho bạn biết rằng kết nối mạng không còn nữa. Điều này có thể là do:

  1. Sự cố mạng - kết nối bị lỗi hoặc sự cố tường lửa
  2. Quá trình máy chủ trên cơ sở dữ liệu đang phục vụ bạn chết bất ngờ.

Cho 1) (tường lửa) tìm kiếm tahiti.Oracle.com cho SQLNET.EXPIRE_TIME. Đây là một tham số sqlnet.ora sẽ thường xuyên gửi một gói mạng với khoảng thời gian có thể định cấu hình, tức là: cài đặt này sẽ khiến tường lửa tin rằng kết nối đang hoạt động.

Đối với 1) (mạng) hãy nói với quản trị viên mạng của bạn (kết nối có thể không đáng tin cậy)

Cho 2) Kiểm tra alert.log cho các lỗi. Nếu quá trình máy chủ thất bại sẽ có một thông báo lỗi. Ngoài ra một tệp theo dõi sẽ được viết để cho phép hỗ trợ để xác định vấn đề. Thông báo lỗi sẽ tham chiếu tệp theo dõi.

Các vấn đề hỗ trợ có thể được nêu ra tại metalink.Oracle.com với Số nhận dạng dịch vụ khách hàng phù hợp (CSI)

19
mathewbutler

Thêm Xác thực kết nối = true vào chuỗi kết nối của bạn.

Nhìn vào blog này để tìm hiểu thêm về.

CHI TIẾT: Sau khi OracleConnection.C Đóng () kết nối cơ sở dữ liệu thực không chấm dứt. Đối tượng kết nối được đặt lại trong nhóm kết nối. Việc sử dụng nhóm kết nối được ẩn bởi ODP.NET. Nếu bạn tạo một kết nối mới, bạn sẽ có được một trong các nhóm. Nếu kết nối này "chưa mở", phương thức OracleConnection.Open () không thực sự tạo ra kết nối mới. Nếu kết nối thực sự bị hỏng (vì bất kỳ lý do nào), bạn sẽ gặp lỗi trong lần đầu tiên chọn, cập nhật, chèn hoặc xóa.

Với Kết nối xác thực, kết nối thực được xác thực trong phương thức Open ().

8
Christian13467

Kiểm tra xem không có tường lửa nào kết thúc kết nối sau một khoảng thời gian nhất định (đây là nguyên nhân gây ra sự cố tương tự chúng tôi gặp phải)

5
hamishmcn

cuối tập tin trên kênh truyền thông:

Một trong những lỗi của lỗi này là do cơ sở dữ liệu không thể ghi nhật ký khi nó đang trong giai đoạn mở;

Giải pháp kiểm tra cơ sở dữ liệu nếu nó chạy trong ARCHIVELOG hoặc NOARCHIVELOG

để kiểm tra sử dụng

select log_mode from v$database;

nếu nó vào ARCHIVELOG hãy thử đổi thành NOARCHIVELOG

bằng cách sử dụng sqlplus

  • khởi động gắn kết
  • thay đổi cơ sở dữ liệu noarcheelsog;
  • thay đổi cơ sở dữ liệu mở;

nếu nó hoạt động cho việc này

Sau đó, bạn có thể điều chỉnh khu vực flashrecovery của mình, có thể khu vực flashrecovery của bạn đã đầy -> sau đó sau khi xác nhận rằng khu vực flashrecovery của bạn có không gian bạn có thể thay đổi cơ sở dữ liệu của mình thành ARCHIVELOG

4
Mathias Stanley

Thông báo lỗi này có thể được ném vào nhật ký ứng dụng khi vấn đề thực tế là máy chủ cơ sở dữ liệu Oracle đã hết dung lượng.

Sau khi sửa lỗi không gian, thông báo lỗi cụ thể này biến mất.

3
Rajesh

Bạn có thể thử hack registry này:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DeadGWDetectDefault"=dword:00000001
"KeepAliveTime"=dword:00120000

Nếu nó hoạt động, chỉ cần tiếp tục tăng KeepAliveTime. Nó hiện đang được đặt trong 2 phút.

2
Ken Wren

Bài viết đã đề cập trước đây là tốt. http://forums.Oracle.com/forums/thread.jspa?threadID=19175 (theo như nó đi)

Nếu đây không phải là thứ chạy thường xuyên (không thực hiện trên trang chủ của bạn), bạn có thể tắt kết nối tổng hợp.

Có một "gotcha" khác không được đề cập trong bài viết. Nếu điều đầu tiên bạn cố gắng thực hiện với kết nối là gọi một thủ tục được lưu trữ, ODP sẽ HANG !!!! Bạn sẽ không nhận lại được một điều kiện lỗi để quản lý, chỉ là một HANG đầy đủ! Cách duy nhất để khắc phục là tắt kết nối TẮT. Một khi chúng tôi đã làm điều đó, tất cả các vấn đề đã biến mất.

Pooling là tốt trong một số tình huống, nhưng với chi phí tăng độ phức tạp xung quanh tuyên bố đầu tiên của mọi kết nối.

Nếu phương pháp xử lý lỗi rất tốt, tại sao họ không biến nó thành một tùy chọn cho ODP để xử lý nó cho chúng tôi ????

0
Brad Bruce