programing

ODP.NET으로 Oracle 11g에서 보호된 메모리 읽기 또는 쓰기 시도

newsource 2023. 9. 7. 21:43

ODP.NET으로 Oracle 11g에서 보호된 메모리 읽기 또는 쓰기 시도

저는 ODP를 통해 오라클(11g) 데이터베이스를 활용하고 장기간 실행되는 애플리케이션을 개발하고 있습니다.그물.

하지만 시스템은 가끔(2~3일에 한 번) 발생합니다.액세스 위반ODP에서 예외가 발생합니다.NET과 애플리케이션을 다시 시작해야 합니다.스택 트레이스는 다음과 같습니다.

Unhandled exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. 
---> System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at Oracle.DataAccess.Client.OpsSql.Prepare2(IntPtr opsConCtx, IntPtr& opsErrCtx, IntPtr& opsSqlCtx, IntPtr& opsDacCtx, OpoSqlValCtx*& pOpoSqlValCtx, string pCommandText, IntPtr& pUTF8CommandText, OpoMetValCtx*& pOpoMetValCtx, Int32 prmCnt)
at Oracle.DataAccess.Client.OracleCommand.ExecuteNonquery()

스택 트레이스의 나머지 부분은 수시로 다르며, 애플리케이션에서 내부 호출을 참조합니다.

여기에 묻기 전에 꽤 많은 조사를 했지만 결정적인 것은 아무것도 발견하지 못했습니다.많은 다른 사람들이 근본 원인은 매우 다양한 것으로 보이지만, 동일한 문제를 경험하고 있는 것으로 보입니다.누군가 이것에 대한 해결책을 가지고 있기를 정말 바랍니다 :-)

관련이 없는 참고로 이 예외는 {}개의 캡처 블록을 무시할 수 있으며 발생할 때마다 애플리케이션이 충돌할 수 있습니다.그것이 메모리 손상 문제와 관련이 있기 때문일까요?

안녕, 안드레아

편집: 추가 조사를 통해 "Distributed Transactions Coordinator" 서비스를 시작할 가치가 있다고 생각하고 예외가 더 이상 적용되지 않는지 확인할 수 있었습니다.당신은 어떻게 생각하나요?

이건 벌레입니다.11.1 및 11.2 프로바이더는 이러한 문제를 가지고 있었습니다.이 문제를 해결할 수 있는 유일한 방법은 11.2.0.2 클라이언트를 설치한 다음 패치 6을 적용하는 것입니다.

Oracle Command 개체를 구성하고 매개 변수를 추가하는 중...

다음과 같은 변화를 발견했습니다.

select.Parameters.Add("Result", OracleDbType.RefCursor);

받는 사람:

select.Parameters.Add("Result", OracleDbType.RefCursor, ParameterDirection.Output);

11.2.0.2 클라이언트에서 이 문제를 제거했습니다.

동일한 액세스 위반을 경험했습니다.출력 대신 RefCursor가 입력 매개 변수로 선언되었기 때문에 예외입니다.

command.Parameters.Add("O_RECS", OracleDbType.RefCursor, null, ParameterDirection.Input);

이것은 그러한 단순한 실수에 대한 가혹한 메시지입니다.파라미터 방향을 변경하면 오류가 수정됩니다.

command.Parameters.Add("O_RECS", OracleDbType.RefCursor, null, ParameterDirection.Output);

이 문제를 발견한 다른 사람들을 위해.BatchSize에 적절한 값이 없으면 메모리가 부족해질 수 있습니다.이렇게 하면 같은 오류가 발생합니다.

언급URL : https://stackoverflow.com/questions/6550209/attempted-to-read-or-write-protected-memory-in-oracle-11g-with-odp-net