MSSQLSERVER_7105

적용 대상:SQL Server

세부 사항

attribute
제품 이름 SQL Server
이벤트 ID 7105
이벤트 원본 MSSQLSERVER
구성 요소 SQLEngine
심볼 이름 TXT_PGNOTEXIST
메시지 텍스트 데이터베이스 ID %d, 페이지 %S_PGID, LOB 데이터 형식 노드의 슬롯 %d이(가) 없습니다. 이 오류는 일반적으로 데이터 페이지에서 커밋되지 않은 데이터를 읽을 수 있는 트랜잭션에 의해 발생합니다. DBCC CHECKTABLE 실행

설명

데이터베이스 페이지 행에서 참조된 LOB(Large Object) 데이터에 액세스할 수 없는 경우 쿼리에서 메시지 7105가 발생할 수 있습니다.

이 오류는 심각도 수준 22이므로 서버에서 연결을 종료합니다. 이 오류 메시지는 EventID=7105를 사용하여 SQL ERRORLOG 파일 및 Windows 애플리케이션 이벤트 로그에도 기록됩니다.

가능한 원인

이 오류는 다음 이유 중 하나로 인해 발생할 수 있습니다.

  • 데이터베이스 손상 문제는 데이터베이스 페이지 내에서 또는 데이터베이스 페이지가 참조하는 LOB 페이지 구조 내에 있습니다.
  • READ UNCOMMITTED ISOLATION LEVEL 또는 NOLOCK 쿼리 힌트를 사용하는 쿼리가 실패합니다.
  • SQL Server 엔진 내에 이 오류로 인해 쿼리가 실패하는 문제가 있습니다.

특정 문제의 원인과 적절한 해결 방법을 확인하려면 해결 방법 및 추가 정보 섹션을 참조하세요.

사용자 작업

  1. 메시지에서 볼 수 있듯이, 수행해야 하는 첫 번째 단계는 데이터베이스 또는 DBCC CHECKTABLE 문제가 발생한 테이블에 대해 실행하는 DBCC CHECKDB 것입니다.

    • 데이터베이스 ID가 메시지에 제공됩니다.

    • DBCC CHECKDB를 실행하지 않고 영향을 받는 테이블을 정확하게 찾으려면 오류가 발생한 쿼리에서 액세스한 테이블을 확인해야 합니다. 한 가지 방법은 SQL Profiler를 사용하여 쿼리를 추적하는 것입니다. 그러나 SQL Server 2008(10.0.x) 및 SQL Server 2008(10.0.x) R2에서는 system_health 확장 이벤트 세션을 사용하여 쿼리를 찾을 수 있습니다. system_health 세션을 사용하는 방법에 대한 자세한 내용은 이 링크를 참조하세요. system_health 세션 사용.

    • 데이터베이스 일관성 문제와 마찬가지로 이 문제가 포함되지 않은 알려진 정상 백업에서 복원하여 이러한 오류를 해결할 수 있습니다.

    • 그러나 백업에서 복원할 수 없는 경우 이러한 오류에 대한 DBCC CHECKDB 권장 사항을 따르거나 DBCC CHECKTABLE 복구합니다. 이로 인해 데이터가 손실될 수 있습니다. CHECKDB 사용 및 데이터베이스 손상 문제의 원인에 대한 자세한 내용은 DBCC CHECKDB에서 보고한 데이터베이스 일관성 오류를 해결하는 방법 문서를 참조하세요.

  2. 테이블에 액세스하는 쿼리가 격리 수준 READ UNCOMMITTED 또는 NOLOCK 쿼리 힌트(더티 읽기라고도 함)를 사용했기 때문에 이 오류가 발생했을 수 있습니다.

    • 이 테이블 및 LOB 데이터와 관련된 오류를 표시하거나 DBCC CHECKTABLE 표시하지 않는 경우 DBCC CHECKDB 가장 가능성이 큰 원인은 dedirty 읽기를 사용하는 것입니다. 애플리케이션의 경우 더티 읽기를 사용하지 않거나 쿼리를 다시 시도해야 합니다.

    • 이것이 오류의 원인인 경우 실제 데이터베이스 일관성 문제가 없습니다.

추가 정보

데이터베이스 손상이 이 문제의 DBCC CHECKDBDBCC CHECKTABLE 원인인 경우 오류를 보고해야 합니다. 그러나 두 명령은 메시지 7105를 보고하지 않습니다. CHECKDB에서 발생하는 오류는 LOB 구조체 또는 LOB 구조 자체에 대한 참조 내에서 손상된 내용에 따라 달라집니다.

  • 데이터베이스 페이지 행이 유효한 LOB 페이지를 올바르게 참조하지 않는 경우 다음과 같은 오류가 표시 될 수 있습니다.

    Msg 8929, Level 16, State 1, Line 1
    개체 ID 2137058649, 인덱스 ID 0, 파티션 ID 72057594038910976, 할당 단위 ID 72057594039828480(행 내 데이터 형식): RID = (1:179:1)로 식별된 데이터 레코드가 소유한 ID 131203072 있는 행 내 데이터에서 발견된 오류
    메시지 8964, 수준 16, 상태 1, 줄 1
    테이블 오류: 개체 ID 2137058649, 인덱스 ID 0, 파티션 ID 72057594038910976, 할당 단위 ID 72057594039894016(LOB 데이터 형식). 페이지의 행이 아닌 데이터 노드(1:177), 슬롯 1, 텍스트 ID 131203072 참조되지 않습니다.
    Msg 8965, 수준 16, 상태 1, 줄 1
    테이블 오류: 개체 ID 2137058649, 인덱스 ID 0, 파티션 ID 72057594038910976, 할당 단위 ID 72057594039894016(LOB 데이터 형식). 페이지 (255:177), 슬롯 1, 텍스트 ID 131203072의 행 외부 데이터 노드가 페이지 (1:179), 슬롯 1에서 참조되지만 검색에 없습니다.

  • 문제 시나리오에 따라 다른 오류 조합이 발생할 수 있습니다. 이 예제에서:

    데이터베이스 페이지 1:179, 슬롯 1은 데이터베이스에서 유효한 페이지가 아닌 LOB 페이지를 참조합니다(255:177 페이지). 페이지(1:177)는 유효한 LOB 페이지이지만 데이터베이스 페이지에서 참조되지 않았습니다. 따라서 이 경우 문제는 1:179 페이지의 슬롯 1에 있는 행이 1:177 대신 255:177 페이지를 참조한다는 것입니다.

  • '행이 아닌 데이터' 및 'LOB 데이터 형식'이라는 구를 검색하여 오류가 LOB 페이지 문제와 관련이 있는지 여부를 DBCC CHECKDB 확인하는 키입니다.

    메시지 8929는 LOB 페이지를 참조하는 데이터베이스 페이지와 관련된 오류입니다.
    Msg 8964는 LOB 페이지가 데이터베이스 페이지에서 참조되지 않았음을 나타내는 오류입니다.
    Msg 8965는 LOB 페이지가 데이터베이스 페이지에서 참조되었지만 유효한 페이지로 존재하지 않음을 나타내는 오류입니다.

    이러한 유형의 오류와 관련된 많은 상황에서 복구하면 LOB 데이터와 LOB 데이터 자체를 가리키는 행이 삭제됩니다. 복구 알고리즘은 문제의 데이터베이스 행에 영향을 주지만 LOB '트리 구조' 내에서 손상된 항목에 따라 모든 상황에서 보장할 수 없는 LOB 조각만 제거하려고 시도합니다.

  • 여기에 표시된 예제에서 CHECKTABLE을 사용하여 REPAIR_ALLOW_DATA_LOSS 반환된 메시지는 다음과 같습니다.

    복구: 페이지(1:179), 슬롯 1에서 개체 ID 2137058649, 인덱스 ID 0, 파티션 ID 72057594038910976, 할당 단위 ID 72057594039828480(행 내 데이터 입력)에 대한 레코드가 삭제되었습니다. 인덱스가 다시 작성됩니다.
    복구: 개체 ID 2137058649, 인덱스 ID 0, 파티션 ID 72057594038910976, 페이지(1:177), 슬롯 1의 할당 단위 ID 72057594039894016(LOB 데이터 형식)의 경우 ID 131203072 있는 행에서 벗어난 데이터 열이 삭제되었습니다.
    Msg 8929, Level 16, State 1, Line 1
    개체 ID 2137058649, 인덱스 ID 0, 파티션 ID 72057594038910976, 할당 단위 ID 72057594039828480(행 내 데이터 형식): RID = (1:179:1)로 식별된 데이터 레코드가 소유한 ID 131203072 있는 행 내 데이터에서 발견된 오류
            오류가 복구되었습니다.
    메시지 8964, 수준 16, 상태 1, 줄 1
    테이블 오류: 개체 ID 2137058649, 인덱스 ID 0, 파티션 ID 72057594038910976, 할당 단위 ID 72057594039894016(LOB 데이터 형식). 페이지의 행이 아닌 데이터 노드(1:177), 슬롯 1, 텍스트 ID 131203072 참조되지 않습니다.
            오류가 복구되었습니다.
    Msg 8965, 수준 16, 상태 1, 줄 1
    테이블 오류: 개체 ID 2137058649, 인덱스 ID 0, 파티션 ID 72057594038910976, 할당 단위 ID 72057594039894016(LOB 데이터 형식). 페이지의 행이 아닌 데이터 노드(255:177), 슬롯 1, 텍스트 ID 131203072 페이지(1:179), 슬롯 1에서 참조되지만 검색에 표시되지 않았습니다.
            이 오류를 복구할 수 없습니다.

    마지막 메시지는 Could not repair this error 오해의 소지가 있습니다. 잘못된 페이지(255:177)를 가리키는 데이터베이스 페이지 행이 삭제되어 오류가 복구되었습니다.