El índice de almacén de columnas en el grupo de archivos read_only evita CheckDB


15

Parece establecer un grupo de archivos para read_onlyevitar dbcc checkdbla base de datos completa si el grupo de archivos contiene un índice de almacén de columnas. Al intentar ejecutar checkdbo checkfilegroup( para cualquier grupo de archivos en la base de datos, incluidos los secundarios de lectura-escritura y[PRIMARY] ), se devuelve el siguiente error ...

Msg 8921, Level 16, State 1, Line 24
Check terminated. A failure was detected while collecting facts. 
Possibly tempdb out of space or a system table is inconsistent. Check previous errors.

¿Existe un método compatible para tener datos de almacén de columnas en un grupo de archivos de solo lectura? ¿O estoy excluido de las verificaciones de integridad en este escenario?

Repro

create database check_fg_ro
go
use check_fg_ro
go
exec sp_changedbowner 'sa';
go
alter database check_fg_ro add filegroup check_fg_ro_2;
alter database check_fg_ro
    add file (
         name='check_fg_ro_2'
        ,filename='C:\check_fg_ro_2.ndf'
    ) to filegroup check_fg_ro_2;
go
create table foo ( 
    i int not null primary key
) on check_fg_ro_2;
go
create columnstore index ccix_foo on foo(i);
go
use master
go
alter database check_fg_ro modify filegroup check_fg_ro_2 read_only;
go
dbcc checkdb( check_fg_ro ) with no_infomsgs, all_errormsgs, extended_logical_checks;
/*
Msg 8921, Level 16, State 1, Line 24
Check terminated. A failure was detected while collecting facts. 
Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
*/
go

Descargo de responsabilidad: publicación cruzada en foros de technet

Respuestas:


12

El problema ocurre cuando DBCC intenta verificar un mapa de bits eliminado para una tabla de almacén de columnas de solo lectura.

Los mapas de bits eliminados se almacenan en el mismo grupo de archivos que la tabla de almacén de columnas. Rastrean filas eliminadas lógicamente de grupos de filas comprimidos.

Por lo que puedo decir, todo está organizado correctamente en las tablas internas del sistema (en SQL Server 2017 CU3), y la mayoría del código DBCC representa correctamente los conjuntos de filas ocultos que contienen los mapas de bits eliminados del almacén de columnas.

Por alguna razón, una comprobación de grupos de archivos sin conexión o de solo lectura da como resultado una excepción no controlada:

Pila de llamadas

Msg 8921, Level 16, State 1, Line 69
Check terminated. A failure was detected while collecting facts.
Possibly tempdb out of space or a system table is inconsistent.
Check previous errors.

La misma verificación fuera de línea / solo lectura se realiza varias veces antes en el procesamiento DBCC (cuando se recopilan los hechos) sin problemas.

El problema ocurre cuando DBCC CHECKDBo DBCC FILEGROUPse ejecuta (en cualquier grupo de archivos), o DBCC CHECKTABLEse le pide que verifique una tabla específica de almacén de columnas de solo lectura. Ninguno de estos debería producir una condición de error fatal que impida la ejecución del resto de las comprobaciones de DBCC, por lo que esto debe ser un error.


¿O estoy excluido de las verificaciones de integridad en este escenario?

Como solución alternativa, ejecute DBCC CHECKFILEGROUPen el grupo de archivos del almacén de columnas inmediatamente antes de que sea de solo lectura (o ejecute DBCC CHECKDBen ese momento) y luego:

  1. DBCC CHECKALLOC en la base de datos
  2. correr DBCC CHECKCATALOG
  3. Ejecutar DBCC CHECKTABLEpara cada tabla (excluyendo las tablas de almacén de columnas en un grupo de archivos de solo lectura)
  4. Quizás también quieras correr DBCC CHECKCONSTRAINTS.

Consulte las Opciones de comprobación de coherencia para un VLDB de Paul Randal y el Q&A Dividing DBCC CHECKDB durante varios días .


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.