Resolución del error DBCC 2570 en SQL Server 2005 y versiones posteriores

Seleccione idioma Seleccione idioma
Id. de artículo: 923247 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

INTRODUCCIÓN

Este artículo describe el error de SQL Server 2570, lo que hace que el error y cómo resolver el problema.

Más información

Controles DATA_PURITY

En SQL Server 2005, se ha agregado una nueva opción, DATA_PURITY, para los comandos DBCC CHECKDB y DBCC CHECKTABLE. Al ejecutar un DBCC CHECKDB o comando de DBCC CHECKTABLE con esta opción habilitada, llevará a cabo el comando las validaciones de "pureza de datos" en cada valor de la columna en todas las filas de la tabla o tablas de la base de datos. Estas nuevas comprobaciones se realizan para asegurar que el los valores almacenados en las columnas son válidos (es decir, que los valores no son fuera de intervalo para el dominio asociado con el tipo de datos de la columna). El naturaleza de la validación realizada depende del tipo de datos de la columna. El Después de la lista no exhaustiva ofrecen algunos ejemplos:
Contraer esta tablaAmpliar esta tabla
Tipo de datos de columnaTipo de validación de datos realizada
Carácter UnicodeLa longitud de datos debe ser un múltiplo de 2.
Fecha y horaEl campo de días debe estar entre el 1 de enero de 1753 y el 31 de diciembre, 9999. El campo de hora debe ser anterior a '11:59:59:999 PM'.
Real y FloatCompruebe la presencia de válido valores de punto flotante como NaN, QNAN, NINF, ND, PD, PINF.
No todos los tipos de datos se comprueban la validez de la columna datos. Sólo aquellos donde es posible tener un valor almacenado en la que está fuera del se comprueban el rango. Por ejemplo, el tipo de datos tinyint tiene un intervalo válido de 0 a 255 y se almacena en un solo byte (que sólo puede almacenar valores de 0 a 255), por lo que comprobar el valor no es necesario.

No están habilitadas las comprobaciones de validación de la pureza de datos automáticamente para todas las bases de datos. Los controles se activan en función de varios factores:
  • Para bases de datos creadas en SQL Server 2005 y versiones posteriores, estos controles están habilitados de forma predeterminada y no se puede deshabilitar, por lo que el uso de la opción de DATA_PURITY al ejecutar un comando DBCC CHECKDB o DBCC CHECKTABLE es irrelevante.
  • Para bases de datos que se crearon en versiones anteriores de SQL Servidor, como, por ejemplo, SQL Server 2000, SQL Server 7.0 y versiones actualizadas a SQL Server 2005, estos controles no están habilitados de forma predeterminada. Para que estas comprobaciones a realizar, debe especificar la opción de DATA_PURITY de DBCC CHECKDB o Comando DBCC CHECKTABLE. Esto puede dar lugar a dos cosas:
    • El comando DBCC finaliza y se informa de que la base de datos está limpio, incluidos los controles de pureza de todos los datos. Este hecho se registra en el encabezado de base de datos. Todos los comandos de DBCC CHECKDB o DBCC CHECKTABLE posteriores ejecuciones dará cuenta de esta información y realizan automáticamente los datos controles de pureza, tal como sucedería para bases de datos creadas en SQL Server 2005. En el otras palabras, una vez que una base de datos se conoce como "limpio", los controles de pureza de datos son siempre se realizan.
    • El comando DBCC finaliza pero informa de problemas acerca de Incoherencia de datos. Si éste es el caso, tendrá que limpiar la base de datos quitar las incoherencias y, a continuación, intente ejecutar de nuevo el comando DBCC. Tendrá que especificar la opción DATA_PURITY del comando DBCC hasta el base de datos se considerará como limpio.
  • Si se especifica la opción PHYSICAL_ONLY cuando el DBCC Se ejecuta el comando CHECKDB o DBCC CHECKTABLE, los controles de pureza de datos no son lleva a cabo.

SÍNTOMAS

Datos no válidos o fuera del intervalo pueden haber sido guardados en el SQL Base de datos de servidor en las versiones anteriores por las razones siguientes:
  • Datos no válidos estaban presentes en el origen mientras se utiliza masiva Insertar métodos, como, por ejemplo, la herramienta bcp.
  • Datos no válidos se ha pasado a través de las llamadas de evento RPC realizadas a SQL Server.
  • Evitar otros posibles causas de la corrupción de datos físicos izquierda el valor de la columna en un estado no válido.
Si tiene datos no válidos en una columna de una tabla, pueden surgir problemas en función del tipo de operación que no se realiza con los datos no válidos. Sin embargo, también es posible que no hay ningún problema aparecerá y no se detectarán los datos no válidos hasta que ejecute un comando DBCC CHECKDB o DBCC CHECKTABLE en SQL Server 2005 y versiones posteriores.

Algunos de los síntomas puede observar debido a la presencia de datos no válidos incluyen (pero no se limitan para):
  • Las infracciones de acceso u otros tipos de excepciones mientras se ejecutar consultas en la columna afectada.
  • Resultados incorrectos devueltos por las consultas ejecutadas en el columna afectada.
  • Errores o problemas cuando se construyen las estadísticas contra las columnas afectadas.
  • Mensajes de error similar al siguiente:
    Msg 9100, 23 De nivel, estado 2, línea 1 posibles daños del índice detectado. Ejecutar DBCC CHECKDB.

Informe de problemas DATA_PURITY

Al ejecutar un comando DBCC CHECKDB o DBCC CHECKTABLE con habilitada la opción de DATA_PURITY (o se ejecutan los controles de pureza de datos de manera automática), y existen datos no válidos en las tablas comprobados por el DBCC los comandos, el resultado DBCC incluye mensajes adicionales que indican el problemas con los datos. Algunos mensajes de error de ejemplo que indican la pureza de datos problemas se muestran a continuación:
Resultados DBCC para "account_history".
Msg 2570, nivel 16, estado 2, línea 1
Página (1:1073) objeto 1977058079 de ID, ID. de índice 0, partición ID 129568478265344, la ranura 33 unidad de asignación ID 129568478265344 (tipo de "datos de la fila"). Columna "account_name_japan" valor está fuera del intervalo para el tipo de datos "nvarchar". Actualizar la columna a un valor válido.
Msg 2570, nivel 16, estado 2, línea 1
Página (1:1156), ranura 120 en objeto 1977058079 De ID, ID. de índice 0, partición de 129568478265344 de ID, identificador de la unidad de asignación 129568478265344 (escriba "En fila datos"). Valor de "account_name_japan" de la columna está fuera del intervalo para el tipo de datos "nvarchar". Actualizar la columna a un valor válido.
No existe son 153137 filas en las páginas de 1080 de objeto "account_history".
CHECKDB encuentra 0 errores de asignación y 338 errores de coherencia en la tabla "account_history" (object ID 1977058079).
CHECKDB encuentra 338 y errores de asignación 0 errores de coherencia de base de datos 'BadUnicodeData'.
Ejecución de DBCC completada. Si los mensajes de error de DBCC, póngase en contacto con el administrador del sistema.
Resultados de DBCC para 'Tabla1'.
Msg 2570, nivel 16, Estado 3, línea 1
Página (1:154), la ranura 0 en objeto 2073058421 de ID, ID de índice 0, partición de 72057594038321152 de ID, ID de 72057594042318848 (tipo de unidad de asignación "Datos de la fila"). Valor de columna "col2" está fuera del intervalo para el tipo de datos "real". Actualizar la columna a un valor válido.
Hay 4 filas en dos páginas para objeto "Tabla1".
CHECKDB encuentra errores de asignación de 0 y errores de 1 coherencia en tabla 'Tabla1' (object ID 2073058421).
CHECKDB encuentra 0 errores de asignación y los errores de 1 coherencia en la base de datos 'realdata'. Ejecución de DBCC completada. Si Error de DBCC mensajes, póngase en contacto con el administrador del sistema.
Resultados de DBCC para 'tabla2'.
Msg 2570, nivel 16, Estado 3, línea 1
Página (1:155), la ranura 0 en objeto 2105058535 de ID, ID de índice 0, partición de 72057594038452224 de ID, ID de 72057594042449920 (tipo de unidad de asignación "Datos de la fila"). Valor de columna "col2" está fuera del intervalo para el tipo de datos "decimal". Actualizar la columna a un valor válido.
Hay 4 filas en las páginas 1 objeto "tabla2".
CHECKDB encuentra errores de asignación de 0 y errores de 1 coherencia en tabla 'tabla2' (object ID 2105058535).
CHECKDB encuentra 0 errores de asignación y los errores de 1 coherencia en la base de datos 'realdata'. Ejecución de DBCC completada. Si Error de DBCC mensajes, póngase en contacto con el administrador del sistema.
Resultados de DBCC para 'tabla3'.
Msg 2570, nivel 16, Estado 3, línea 1
Página (1:157), la ranura 0 en objeto 2121058592 de ID, ID de índice 0, partición de 72057594038517760 de ID, ID de 72057594042515456 (tipo de unidad de asignación "Datos de la fila"). Valor de columna "col2" está fuera del intervalo para el tipo de datos "datetime". Actualizar la columna a un valor válido.
Hay tres filas en las páginas 1 objeto "Tabla3".
CHECKDB encuentra errores de asignación de 0 y errores de 1 coherencia en tabla 'tabla3' (object ID 2121058592).
CHECKDB encuentra 0 errores de asignación y los errores de 1 coherencia en la base de datos 'realdata'. Ejecución de DBCC completada. Si Error de DBCC mensajes, póngase en contacto con el administrador del sistema.
Para se genera cada fila que contiene un valor de columna no válido, un error de 2570.

Solucionar el problema de pureza de datos

No se puede reparar los errores de 2570 utilizando cualquiera de la reparación DBCC opciones. Esto es debido a que es imposible que DBCC determinar qué valor debe utilizar para reemplazar el valor de columna no válido. Por lo tanto, debe ser el valor de columna actualizar manualmente.

Para realizar una actualización manual, tiene que buscar la fila tiene el problema. Hay dos formas de conseguirlo.
  • Ejecutar una consulta en la tabla que contiene el valores no válidos para buscar las filas que contienen los valores no válidos.
  • Utilice la información del error 2570 para identificar el filas que tienen un valor no válido.
Trataremos ambos métodos con detalle a continuación, utilizar ejemplos para buscar las filas que tienen datos no válidos.

Una vez que encuentre el la fila correcta, una decisión debe estar en el nuevo valor que se utilizará para reemplazar los datos existentes no válidos. Esta decisión debe realizarse con sumo cuidado según el intervalo de valores que funcionan para la aplicación, así como qué sentido lógico para esa fila determinada de datos. Las opciones que tiene son:
  • Si sabe qué valor debe ser, establézcalo para valor específico.
  • Establézcalo en un valor aceptable.
  • Establecer el valor de la columna a NULL.
  • Establezca el valor de columna en el valor máximo o mínimo para ese tipo de datos de la columna.
  • Si crees que la fila específica no es de cualquier uso sin un valor válido para la columna, puede eliminar por completo esa fila.

Buscar filas con valores no válidos mediante consultas de T-SQL

El tipo de consulta que se debe ejecutar para buscar las filas que tienen los valores no válidos depende del tipo de datos de la columna que informó de un problema. Si examina el mensaje de error 2570, observará dos elementos importantes de información que le ayudará con esto. En el ejemplo siguiente, la columna valor de "account_name_japan" está fuera del intervalo para el tipo de datos "nvarchar". Se puede identificar fácilmente la columna que tiene el problema, así como el tipo de datos de la columna implicada. Por lo tanto, una vez conoce los datos de tipo y trate de la columna, puede formular la consulta para buscar las filas que contienen valores no válidos para el que columna, seleccionando las columnas necesarias para identificar la fila (como los predicados en una cláusula WHERE) para cualquier además de actualizar o eliminar.

Tipo de datos Unicode:
SELECT col1 ,DATALENGTH(account_name_japan) as Length ,account_name_japan 
FROM account_history
WHERE DATALENGTH(account_name_japan) % 2 != 0

Tipo de datos float:
-- Change col1 to your actual primary key column(s), col2 to the column from the 2570 error, table1 to the table from the CHECKDB output

SELECT col1, col2 FROM table1
WHERE col2<>0.0 AND (col2 < 2.23E-308 OR col2 > 1.79E+308) AND (col2 < -1.79E+308 OR col2 > -2.23E-308)

Tipo de datos reales:
-- Change col1 to your actual primary key column(s), col2 to the column from the 2570 error, table1 to the table from -- the CHECKDB output

SELECT col1, col2 FROM testReal 
WHERE col2<>0.0 AND (col2 < CONVERT(real,1.18E-38) OR col2 > CONVERT(real,3.40E+38)) AND (col2 < CONVERT(real,-3.40E+38) OR col2 > CONVERT(real,-1.18E-38)) 
ORDER BY col1; -- checks for real out of range
Decimal y Numeric tipo de datos:
SELECT col1 FROM table2
WHERE col2 > 9999999999.99999 
OR col1 < -9999999999.99999
Tenga en cuenta que necesitará para ajustar los valores basados en el precisión y escala con el que ha definido la columna decimal o numeric. En el ejemplo anterior, la columna se ha definido como col2 decimal(15,5).

Fecha de datos en tiempo de tipo:
Tendrá que ejecutar dos consultas diferentes para identificar las filas que contienen valores no válidos para la columna de tiempo de fecha.
SELECT col1 FROM table3
WHERE col2 < '1/1/1753 12:00:00 AM' OR col2 > '12/31/9999 11:59:59 PM'

SELECT col1 FROM table3 WHERE
((DATEPART(ms,col2)+ (1000*DATEPART(s,col2)) + (1000*60*DATEPART(mi,col2)) + (1000*60*60*DATEPART(hh,col2)))/(1000*0.00333)) 
> 25919999

Buscar filas con el valor no válido mediante la ubicación física:

Puede utilizar este método si no puede encontrar las filas de interés mediante el método de T-SQL que se ha explicado anteriormente. En el mensaje de error 2570, el se imprime la ubicación física de la fila que contiene el valor no válido. Para ejemplo, ver el mensaje siguiente:
Página (1:157) la ranura 0 en objeto 2121058592 de ID, ID. de índice 0, partición ID 72057594038517760, unidad de asignación ID 72057594042515456 (tipo de "datos de la fila"). Es el valor de la columna "col2" fuera del intervalo para el tipo de datos "datetime". Actualizar la columna a un oficio valor.
En este mensaje, se dará cuenta de la información: página (1:157) ranura 0. Se trata de la información que necesita identificar la fila. El FileId es 1, el PageInFile es 157 y los RanuraID es 0. Una vez que tenga esta información, tendrá que ejecutar el comando, como sigue:
DBCC TRACEON ( 3604 )
DBCC PAGE ( realdata , 1 , 157 , 3 )
Este comando imprimirá todo el contenido de una página. Los parámetros para el Comando DBCC página son:
  • nombre de base de datos
  • FileId
  • PageInFile
  • opción de impresión
Una vez que ejecute este comando, se dará cuenta de salida contiene información similar al siguiente formato:
Slot 0 Offset 0x60 Length 19 Record Type = PRIMARY_RECORD Record
		  Attributes = NULL_BITMAP Memory Dump @0x44D1C060 00000000: 10001000 01000000
		  ffffffff ffffffff ?................ 00000010:
		  0200fc???????????????????????????????... Slot 0 Column 0 Offset 0x4 Length 4 col1 = 1Slot 0 Column 1 Offset 0x8 Length 8 col2 = Dec 31 1899 19:04PM Slot 1 Offset 0x73 Length 19 Record Type = PRIMARY_RECORD Record
		  Attributes = NULL_BITMAP Memory Dump @0x44D1C073 00000000: 10001000 02000000
		  0ba96301 f8970000 ?..........c..... 00000010:
		  0200fc???????????????????????????????... Slot 1 Column 0 Offset 0x4 Length 4
		  col1 = 2 Slot 1 Column 1 Offset 0x8 Length 8 col2 = Jul 8 2006 9:34PM Slot 2
		  Offset 0x86 Length 19 Record Type = PRIMARY_RECORD Record Attributes =
		  NULL_BITMAP Memory Dump @0x44D1C086 00000000: 10001000 03000000 0ba96301
		  f8970000 ?..........c..... 00000010: 0200fc???????????????????????????????...
		  Slot 2 Column 0 Offset 0x4 Length 4 col1 = 3 Slot 2 Column 1 Offset 0x8 Length
		  8 col2 = Jul 8 2006 9:34PM 
En esta salida puede ver claramente los valores de columna de la fila de su interés. En este caso, se necesita la fila almacenada en la ranura 0 de la página. Desde el mensaje de error, sabe ese col2 es aquella con el problema. Por lo que puede tomar el valor de col1 para Ranura 0 y utilizar como predicado en la cláusula WHERE de la instrucción update o la instrucción delete.

Advertencia Le recomendamos que utilice el primer método (es decir, utilizar T-SQL consultas para encontrar la información necesaria). Uso de comandos DBCC PAGE sólo como un último recurso. Tener sumo cuidado mientras utilice este comando en una producción medio ambiente. Es recomendable para restaurar la base de datos de producción en una prueba servidor, a continuación, obtener toda la información necesaria mediante DBCC PAGE y a continuación, realice la actualizaciones en el servidor de producción. Como siempre, asegúrese de mantener una copia de seguridad listo en caso de que algo va mal y necesita volver a una copia anterior de la base de datos.

Referencias

Para obtener más información acerca de la instrucción DBCC CHECKDB, vea el tema "DBCC CHECKDB (Transact-SQL)" en el programador de Microsoft siguiente Sitio Web de Network (MSDN):
http://msdn2.Microsoft.com/en-us/library/ms176064.aspx
Para obtener más información acerca de conocidos problemas en SQL Server 2000, haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:
900335REVISIÓN: La operación de recuperación automática de la base de datos SQL Server 2000 puede no tener éxito si un índice contiene un tipo de datos FLOAT o un tipo de datos REAL y este tipo de datos contiene un valor NaN
Para obtener más información acerca de los eventos RPC, consulte el Tema "Llamada a un procedimiento almacenado (OLE DB)" en el siguiente sitio Web de MSDN:
http://msdn2.Microsoft.com/en-us/library/aa198358 (SQL.80) .aspx
Para obtener más información acerca de los diferentes tipos de datos, vea la Tema "Llamada a un procedimiento almacenado (OLE DB)" en el siguiente sitio Web de MSDN:
http://msdn2.Microsoft.com/en-us/library/ms187752.aspx
Para obtener más información acerca de las convenciones de valor de punto flotante, visite el siguiente sitio Web de Intel:
http://www.Intel.com/design/PentiumII/manuals/243191.htm
Microsoft Proporciona información de contacto de otros proveedores para ayudarle a encontrar soporte técnico. Esta información de contacto puede cambiar sin previo aviso. Microsoft no lo hace garantizar la exactitud de esta información de contacto de terceros.

Propiedades

Id. de artículo: 923247 - Última revisión: jueves, 22 de marzo de 2012 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Express Edition with Advanced Services
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 Express with Advanced Services
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 Standard Edition for Small Business
Palabras clave: 
kbtshoot kbexpertiseadvanced kbsql2005engine kbinfo kbmt KB923247 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 923247

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com