Stats automáticas

10/04/2008 - 10:10 por Alhambra Eidos Kiquenet | Informe spam
Hola,

estoy con un proceso dtsx (SSIS) manual de clonado de base de datos de una a
otra, ambas SQL SERVER 2005.

Al intentar llevar las estadísticas de las tablas tenemos problemas pues
existen unas automáticas.

Cómo podría copiarlas de una base de datos a otra ?

tengo esta consulta para obtener todas las estadísticas:

SELECT
'[' + SCHEMA_NAME(tbl.schema_id) + '].[' + tbl.name + ']' AS
[Table_Name_With_Schema],
'[' + st.name + ']' AS [Name],
'' + SCHEMA_NAME(tbl.schema_id) + '.' + tbl.name + ''
+ '.' + st.name + '' AS [Estadistica]
FROM
sys.tables AS tbl
INNER JOIN sys.stats st ON st.object_id=tbl.object_id
ORDER BY
[Table_Name_With_Schema] ASC,[Name] ASC

Sin embargo, cuando intento hacer DROP de las automáticas aparece este error:

No se puede DROP el índice 'dbo.ACTIVIDAD_PROVEEDOR.PK_ACTIVIDAD_PROVEEDOR'.
No es una colección de estadísticas.

Qué podría hacer ?

Saludos y muchas gracias de antemano.

http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.net
http://www.setbb.com/putainformatic...opic.php?p„3
www.trabajobasura.com/solusoft
 

Leer las respuestas

#1 Alejandro Mesa
10/04/2008 - 18:51 | Informe spam
Alhambra Eidos Kiquenet,

Creo que tienes una pequeña confusión entre estadisticas auto generadas por
SQL Server y las estadisticas que se mantienen para cada indice.

SQL Server almacena una serie de estadisticas por cada indice creado y
ademas mantiene estadisticas creadas por el usuario y/o auto generadas por el
el motor. Las estadisticas relacionadas con un indice tienen el mismo nombre
que el indice y ademas el valor de stats_id suele ser el mismo que el de
index_id.

use northwind
go

select *
from sys.stats
where object_id = object_id('dbo.orders')

select *
from sys.indexes
where object_id = object_id('dbo.orders')
go

Las estadisticas auto generadas por SQL Server, su nombre suele comenzar con
_WA_Sys_ y son creadas cuando se tiene prendida la opcion
AUTO_CREATE_STATISTICS a nivel de la base de datos.

Si tratas de eliminar las estadisticas relacionadas con un indice, entonces
no puedes usar "drop statistic...", sino "drop index...". La primera se puede
usar para eliminar estadisticas creadas por el usuario "create statistic..."
o generadas automaticamente por SQL Server.

Recuerda apagar las opciones AUTO_CREATE_STATISTICS y
AUTO_UPDATE_STATISTICS, si intentas transferir estadisticas desde una db a
otra.


AMB

"Alhambra Eidos Kiquenet" wrote:

Hola,

estoy con un proceso dtsx (SSIS) manual de clonado de base de datos de una a
otra, ambas SQL SERVER 2005.

Al intentar llevar las estadísticas de las tablas tenemos problemas pues
existen unas automáticas.

Cómo podría copiarlas de una base de datos a otra ?

tengo esta consulta para obtener todas las estadísticas:

SELECT
'[' + SCHEMA_NAME(tbl.schema_id) + '].[' + tbl.name + ']' AS
[Table_Name_With_Schema],
'[' + st.name + ']' AS [Name],
'' + SCHEMA_NAME(tbl.schema_id) + '.' + tbl.name + ''
+ '.' + st.name + '' AS [Estadistica]
FROM
sys.tables AS tbl
INNER JOIN sys.stats st ON st.object_id=tbl.object_id
ORDER BY
[Table_Name_With_Schema] ASC,[Name] ASC

Sin embargo, cuando intento hacer DROP de las automáticas aparece este error:

No se puede DROP el índice 'dbo.ACTIVIDAD_PROVEEDOR.PK_ACTIVIDAD_PROVEEDOR'.
No es una colección de estadísticas.

Qué podría hacer ?

Saludos y muchas gracias de antemano.

http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.net
http://www.setbb.com/putainformatic...opic.php?p„3
www.trabajobasura.com/solusoft

Preguntas similares