Pregunta

En SQL Server 2008, Quiero mover todos los índices no agrupados en una base de datos a un grupo de archivos secundario. ¿Cuál es la manera más fácil de hacer esto?

¿Fue útil?

Solución

Ejecutar este secuencia de comandos actualizada para crear un procedimiento almacenado llamado MoveIndexToFileGroup. Este procedimiento se desplaza todos los índices no agrupados en una mesa a un grupo de archivos especificado. Incluso soporta las columnas INCLUDE que algunos otros scripts no lo hacen. Además, no va a reconstruir o mover un índice que ya está en el grupo de archivo deseado. Una vez que ha creado el procedimiento, lo llaman así:

EXEC MoveIndexToFileGroup @DBName = '<your database name>',
                          @SchemaName = '<schema name that defaults to dbo>',
                          @ObjectNameList = '<a table or list of tables>',
                          @IndexName = '<an index or NULL for all of them>',
                          @FileGroupName = '<the target file group>';

Para crear un script que se ejecutará esto para cada tabla en su base de datos, cambiar su salida de la consulta de texto, y ejecutar la siguiente:

SELECT 'EXEC MoveIndexToFileGroup '''
    +TABLE_CATALOG+''','''
    +TABLE_SCHEMA+''','''
    +TABLE_NAME+''',NULL,''the target file group'';'
    +char(13)+char(10)
    +'GO'+char(13)+char(10)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_SCHEMA, TABLE_NAME;

Por favor remítase a la original Registrarse para más detalles. No he escrito este procedimiento, pero actualizado de acuerdo a las respuestas del blog y ha confirmado que funciona tanto en SQL Server 2005 y 2008.

Actualizaciones

  1. modificado el guión al trabajo en SQL Server 2012. Fusioné sus cambios.
  2. El procedimiento falla cuando la tabla tiene la opción de IGNORE_DUP_KEY. Hay una solución para esto todavía.
  3. @srutzky señaló el procedimiento no garantiza preservar el orden de un índice y sugerencias sobre cómo solucionarlo. He actualizado el procedimiento en consecuencia.
  4. ojiNY observado el procedimiento dejado fuera filtros de índice (por compatibilidad con SQL 2005). Por su sugerencia, les añadió de nuevo.

Otros consejos

Script ellas, cambie la cláusula ON, soltarlos, vuelva a ejecutar el nuevo guión. No hay alternativa realmente.

Afortunadamente, hay scripts en el Interwebs como este uno que se ocupará de secuencias de comandos para usted.

Actualización: Esta cosa va a tomar mucho tiempo para hacerlo manualmente el paso 2 si está utilizando gestor de MS SQL Server 2008R2 o anterior. Solía ??gestor de SQL Server 2014, por lo que funciona bien (debido a la forma en que la caída de la exportación y crear índice es fácil de modificar) Traté de ejecutar secuencias de comandos en el servidor SQL 2014 y tengo algún problema, soy demasiado perezoso para detectar los problemas, por lo que pensar en otra solución que no depende de la versión de SQL Server que está ejecutando.

  1. Exportar su índice (con la gota y crear) Haga clic derecho sobre su base de datos seleccione generar secuencias de comandos

Seleccionar tabla que desea mover el índice introducir descripción de la imagen aquí

2.Update su guión, quitar todo lo relacionado con la gota crear tablas, mantener la cosa pertenecen a indexs. y reemplazar el índice original con el nuevo índice (en mi caso, puedo reemplazar ON [PRIMARY] por ON [SECUNDARIA] [introducir descripción de la imagen aquí] 5

  1. Ejecutar script! Y esperar hasta que se haga.

(Es posible que desee guardar la secuencia de comandos para ejecutar en algún ambiente otros) .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top