2011-08-22 27 views
6

Nhóm phát triển của tôi đang gặp phải nhiều lỗi ORA-12571: TNS:packet writer failure sử dụng ASP.NET 3.5 và 4.0 so với Oracle 11g. Các lỗi này không nhất quán khi chúng xảy ra và được tạo ra bởi nhiều ứng dụng. Ngoại lệ này xảy ra khi gọi các thủ tục lưu trữ ngẫu nhiên, các gói và các câu lệnh SQL nội tuyến. Máy khách Oracle 11 được cài đặt trên máy chủ web. Một số ứng dụng sử dụng Microsoft System.Data.OracleClient để kết nối với Oracle, và một số sử dụng các thành phần .NET được cung cấp bởi oracle (ODP.NET). Cả hai đối tượng truy cập dữ liệu đều có cùng lỗi.ORA-12571: TNS: lỗi nhà văn gói với ASP.NET

Có các ứng dụng không .NET khác chạy trên một máy chủ web khác, nhưng sử dụng cùng một máy chủ cơ sở dữ liệu. Các ứng dụng không có bất kỳ vấn đề như vậy. Suy nghĩ ban đầu của tôi là có một cái gì đó cấu hình không chính xác trên máy chủ web với khách hàng Oracle.

Có ai khác đã nhận được lỗi này không? Bạn đã làm gì để khắc phục nó?

ORA-12571: TNS:packet writer failure 

Stack Trace:

at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc) 
    at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals) 
    at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, ArrayList& resultParameterOrdinals) 
    at System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behavior) 
    at System.Data.OracleClient.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior) 
    at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) 
    at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) 
    at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) 
    at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) 

Trả lời

1

Tôi nghĩ rằng đây là một lỗi trong Oracle. Tôi đã gặp nhiều vấn đề với phương thức DBDataAdapter.Fill, nơi mà Oracle Client sẽ bị sập trên một lỗi bộ nhớ. Điều này đã được giải quyết cho tôi bằng cách sử dụng máy khách 11.2.0.2 với bản vá 6 được áp dụng.

Nếu bạn tìm kiếm trang Hỗ trợ của Oracle, bạn sẽ thấy nhiều vấn đề như thế này.

Kiểm tra các sự cố "Đọc bộ nhớ được bảo vệ" với máy khách 11g1/11g2.

+0

Cảm ơn lời khuyên. Tôi sẽ thử cài đặt ứng dụng 11.2 với bản vá 6 được áp dụng. – dretzlaff17

+0

Tôi đang phân loại cùng một vấn đề @ dretzlaff17 nếu bạn đã giải quyết nó, vui lòng đề cập đến cách bạn giải quyết nó. tức là, khi thực thi SP với tham số vào và ra, bạn sẽ nhận được lỗi như bạn đã đề cập ở trên, nó hoạt động tốt. hy vọng bạn sẽ sớm trở lại bình luận của tôi. – Maxymus

5

Một giải pháp khả thi khác là tường lửa giữa bạn và cơ sở dữ liệu Oracle cho rằng kết nối của bạn đã chết và đóng nó bên dưới bạn. Bạn sẽ chỉ tìm ra khi bạn cố gắng thực hiện một truy vấn và nhận được lỗi ORA-12571.

Điều này là do có kết nối mở trong một thời gian dài mà không có hoạt động.

Giải pháp là thêm SQLNET.EXPIRE_TIME vào tệp sqlnet.ora trên máy chủ và đặt nó thành khoảng thời gian (10). Điều này sẽ làm cho các kết nối được ping mỗi 10 phút để đảm bảo chúng vẫn còn sống.

Kết quả của việc này là tường lửa của bạn sẽ thấy hoạt động mạng và không đóng kết nối.

SQLNET.EXPIRE_TIME=10 

ORA-12571: TNS:packet writer failure - One of the hardest problems I've had to resolve

+0

Liên kết bị gỡ xuống: ( – SuperJMN

+0

Cảm ơn bạn đã cho tôi biết, liên kết đã được cập nhật – JordanBean

0

Sau khi tôi cài đặt các module ELMAH và có thể phân tích các trường hợp ngoại lệ, tôi đã cố gắng để:

  1. Thay đổi cấu hình kết nối.
  2. Xóa và/hoặc cập nhật quy tắc tường lửa máy chủ.
  3. Cập nhật ứng dụng khách Oracle trên máy chủ.

Bất cứ các tùy chọn ở trên giải quyết vấn đề này, nhưng tôi đã quên nhà cung cấp lỗi thời (System.Data.OracleClient) chúng ta đang sử dụng. Sau khi tôi thay thế nó bằng phiên bản cuối cùng của ODP.NET (Oracle.DataAccess), mọi thứ bắt đầu hoạt động hoàn hảo.

Obs: Dựa trên mô tả ngoại lệ của bạn, bạn hiện đang sử dụng nhà cung cấp lỗi thời.

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