Comandos DBCC SHRINKFILE y SHRINKDATABASE no funcione debido de apenas llena texto, ntext o columnas de imagen

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

Síntomas

Los comandos DBCC SHRINKFILE y DBCC SHRINKDATABASE no mover los datos y reducir el tamaño de archivo si el valor de EstimatedPages es igual al valor de MinimumSize se notifica cuando finaliza el comando. Debido a las consultas de modificación de datos en tablas con tipos de datos de objeto binario grande (BLOB) de ( texto , ntext , imagen ), es posible que muchas extensiones uniformes asignadas que apenas se llenan con datos (por ejemplo, sólo 1 de las páginas de 8 que se asigna los controles de extensión), que hará que DBCC SHRINKFILE y comandos de DBCC SHRINKDATABASE para over-estimate el número de EstimatedPages y los comandos no realizan las operaciones de reducción. Normalmente, en casos donde se produce este comportamiento, el tamaño de una copia de seguridad completa de la base de datos es 8 veces menor que el de los archivos de la base de datos después de ejecutar un DBCC SHRINKFILE en los archivos de base de datos.

Solución

Si las tablas afectadas no tiene que estar continuamente en línea mientras corregir esta situación, puede utilizar cualquiera de las siguientes soluciones para resolver este problema:
  • Utilice una instrucción SELECT INTO para transferir toda la tabla a una tabla nueva en la misma base de datos. Eliminar la tabla original y, a continuación, ejecutar una instrucción DBCC SHRINKFILE. Asigne la nueva tabla el nombre de tabla original.
  • Utilice una instrucción SELECT INTO para transferir toda la tabla a una nueva tabla en una base de datos diferente. Truncar la tabla original y, a continuación, ejecutar una instrucción DBCC SHRINKFILE. Transferir los datos la tabla original.
  • Utilice el programa de copia masiva para copiar la tabla de en modo nativo. Secuencia de comandos fuera de la tabla y, a continuación, colocar la tabla existente. Ejecutar una instrucción DBCC SHRINKFILE. Crear una tabla nueva y, a continuación, utilizar el programa de copia masiva para copiar los datos volver a la tabla.
  • Utilizar los servicios de transformación de datos (DTS) para transferir toda la base de datos a una nueva base de datos. Servicios de transformación de datos de SQL Server 7.0 no puede transferir text e image datos más de 64 KB correctamente. Este problema no se aplica a la versión de SQL Server 2000 de servicios de transformación de datos. Para obtener información adicional, haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:
    257425REVISIÓN: La transferencia de objetos DTS no transfiere datos BLOB mayor que 64
    Puede buscar columnas text e image que son mayores que 64 KB con la siguiente consulta:
    SELECT MAX (DATALENGTH (TextImageColumn)) FROM TableName
    si los datos text e image están mayores que 64 KB, la transferencia trunca los datos y no se produce cualquier error excepto en los DTS archivos de registro. Si tiene datos text o image mayores de 64 KB, utilice la información en el tercer elemento de viñeta para las tablas que tienen datos text o image. A continuación, utilice DTS para el resto de los elementos de la base de datos.
Si la base de datos debe estar en línea o el tamaño de la base de datos es demasiado grande para mover los datos en un archivo externo o en otra base de datos, puede utilizar el comando DBCC SHRINKFILE con la opción EMPTYFILE. Para utilizar este trabajo alrededor, siga estos pasos:
  1. Si está ejecutando SQL Server 7.0 Service Pack 3, activar indicadores de traza 1180 y 1197.
  2. Si utiliza Microsoft SQL Server 7.0 Service Pack 3 generar 7.00.987 o posterior, incluidos Service Pack 4, activar la traza indicador 1180.
  3. Si se dispone de la base de datos entre varios archivos por razones de rendimiento o de problemas de espacio de unidad, crear archivos de 1 o más adicionales en la base de datos mediante el comando ALTER DATABASE con un tamaño total comparable a los resultados de la consulta siguiente.
    select 'size in MB'=ceiling(sum(ei.pg_alloc)/128.000), sfg.groupname
    from extentinfo ei inner join sysfiles sf on ei.[file_id] = sf.fileid and ei.[file_id] != 1
     inner join sysfilegroups sfg on sf.groupid = sfg.groupid
    group by sfg.groupname
    Nota : la consulta anterior utiliza la tabla que se crea la consulta en la sección "Más información" de este artículo. Además, los totales de tamaño de archivo se desglosan por grupo de archivos.

  4. Ejecutar una consulta de DBCC SHRINKFILE, con la opción EMPTYFILE como segundo parámetro, en cada archivo que apenas se llenó blob extensiones uniformes.
  5. Puede realizar un seguimiento del progreso del comando DBCC SRHINKFILE creando una o varias tablas con el mismo esquema que la tabla extentinfo desde la sección "Más información" de este artículo. Ejecute "INSERT.. EXEC import_extentinfo "consulta para rellenar los datos a las nuevas tablas. Utilice la siguiente consulta para analizar los resultados:
    select [file_id], 'page count'=sum(pg_alloc), 'min page'=min(page_id), 'max page'=max(page_id) from extentinfo group by [file_id]
    Además, puede utilizar la siguiente consulta para el seguimiento de cuando se ejecuta el comando DBCC EXTENTINFO si las tablas se inicia con la misma trama de letras y crean cerca del momento como el comando DBCC EXTENTINFO:
    select crdate, [name] from sysobjects where type = 'U' and [name] like 'extent%' order by crdate
  6. Cuando finalice la consulta de DBCC SHRINKFILE, ejecuta un ALTER DATABASE consulta para quitar los archivos antiguos de la base de datos.
  7. Puede quitar espacio adicional, posiblemente, ejecutando una consulta de DBCC SHRINKFILE con la opción TRUNCATEONLY en los archivos nuevos creados en el paso 3.
  8. Si está ejecutando Microsoft SQL Server 7.0, desactive la opción los indicadores de traza que activa en el paso 1 o 2.

Más información

Puede ejecutar la siguiente consulta Transact-SQL desde cualquier herramienta de consulta, como el Analizador de consultas, si ha iniciado como un usuario que tiene derechos de sysadmin . Ejecutar la consulta de Transact-SQL en SQL Server para determinar si el comando DBCC SHRINKDATABASE y el comando no puede comprimir archivos debido apenas DBCC SHRINKFILE rellenan BLOB extensiones uniformes.

Nota : debe actualizar la cadena '< nombre de base de datos >' en el nombre de la base de datos de problema y escriba el nombre único entre comillas.

use pubs
go
if convert(int,substring(convert(binary(4), @@microsoftversion),1,1)) = 8
begin 
   create table extentinfo 
   (
   [file_id] smallint,
   page_id int,
   pg_alloc int,
   ext_size tinyint,
   obj_id int,
   index_id tinyint,
   pfs_bytes varbinary(10)
   )
end
go
if convert(int,substring(convert(binary(4), @@microsoftversion),1,1)) = 7
begin
   create table extentinfo 
   (
   [file_id] smallint,
   page_id int,
   pg_alloc int,
   ext_size tinyint,
   obj_id int,
   index_id tinyint,
   pfs_bytes varbinary(10),
   avg_used tinyint
   )
end
go
create procedure import_extentinfo as
dbcc extentinfo('<database name>')
go
insert extentinfo exec import_extentinfo
go

select [file_id],obj_id, index_id, ext_size, 'actual extent count'=count(*), 'actual page count'=sum(pg_alloc),
 'possible extent count'=ceiling(sum(pg_alloc)*1.0/ext_size),
 'possible extents / actual extents' = (ceiling(sum(pg_alloc)*1.00/ext_size)*100.00) / count(*)
 from extentinfo where ext_size != 1 and index_id = 255
 group by [file_id],obj_id, index_id, ext_size
 having count(*)-ceiling(sum(pg_alloc)*1.0/ext_size) > 0
 order by obj_id, index_id, [file_id]
Si ve las filas de resultados de la última consulta que tienen valores IdÍndice de 255 y el alcance posible / real extensión columna es menos de 75, esta base de datos apenas ha llenado BLOB extensiones y los métodos descritos en la sección "Solución" de este artículo puede reducir de tamaño.

Nota : esta consulta se basa en la funcionalidad de la EXTENTINFO DBCC comandos. No utilice el comando DBCC EXTENTINFO fuera de esta situación porque la funcionalidad puede cambiar o incluso se quiten de las versiones futuras de Microsoft SQL Server.

Referencias

Para obtener información adicional, haga clic en los números de artículo correspondientes para verlos en Microsoft Knowledge Base:
272220REVISIÓN: Espacio de almacenamiento de datos TEXT/IMAGE no recupera correctamente
308627REVISIÓN: DBCC SHRINKDATABASE o DBCC SHRINKFILE puede expandir la base con texto o datos de imagen

Propiedades

Id. de artículo: 324432 - Última revisión: viernes, 09 de diciembre de 2005 - Versión: 5.1
La información de este artículo se refiere a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Palabras clave: 
kbmt kbprb KB324432 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): 324432

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