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
'programing' 카테고리의 다른 글
SQL에 대한 공개된 코딩 스타일 지침이 있습니까? (0) | 2023.09.07 |
---|---|
Moment.js를 사용하여 날짜 형식 지정 및 날짜 빼기 (0) | 2023.09.07 |
C 프로그램은 동일한 고정 길이 데이터 유형을 사용함에도 불구하고 여러 기계에서 다른 결과를 산출합니다. (0) | 2023.09.07 |
Mysql/Mariadb 스크립트를 debian에서 부팅할 때 어떻게 작동합니까? (0) | 2023.09.07 |
Python 파일로 긴 상수 목록 가져오기 (0) | 2023.09.07 |