sql server - tipos - ¿Cómo puedo mover la tabla a otro grupo de archivos?
mover.ldf en sql server (7)
Tengo SQL Server 2008 Ent y la base de datos OLTP con dos tablas grandes. ¿Cómo puedo mover estas tablas a otro grupo de archivos sin interrumpir el servicio? Ahora, se insertaron entre 100 y 130 registros y 30 a 50 registros actualizados cada segundo en estas tablas. Cada tabla tiene aproximadamente 100 millones de registros y seis campos (incluida una geografía de campo).
Estoy buscando una solución a través de google, pero todas las soluciones contienen "crear una segunda tabla, insertar filas de la primera mesa, soltar la primera mesa, bla bla bla".
¿Puedo usar funciones de particionamiento para resolver este problema? Gracias.
¿Cómo puedo mover la tabla a otro grupo de archivos?
NOTA: mover una tabla a otro grupo de archivos solo funciona con Enterprise Edition.
Paso 1 :
Compruebe en qué tabla de grupos de archivos reside:
-- Query to check the tables and their current filegroup:
SELECT tbl.name AS [Table Name],
CASE WHEN dsidx.type=''FG'' THEN dsidx.name ELSE ''(Partitioned)'' END AS [File Group]
FROM sys.tables AS tbl
JOIN sys.indexes AS idx
ON idx.object_id = tbl.object_id
AND idx.index_id <= 1
LEFT JOIN sys.data_spaces AS dsidx
ON dsidx.data_space_id = idx.data_space_id
ORDER BY [File Group], [Table Name]
Paso 2 :
Mover una tabla o tablas existentes al nuevo grupo de archivos
Si el grupo de archivos al que desea mover la tabla aún no existe, cree el grupo de archivos secundario y luego mueva la tabla.
Mover una tabla a un grupo de archivos diferente implica mover el índice agrupado de la tabla al nuevo grupo de archivos. El nivel de la hoja del índice agrupado realmente contiene los datos de la tabla. Así que mover el índice agrupado se puede hacer en una sola declaración usando la cláusula DROP_EXISTING de la siguiente manera:
CREATE UNIQUE CLUSTERED INDEX [Index_Name] ON [SchemaName].[TableName]
(
[ClusteredIndexKeyFields]
)WITH (DROP_EXISTING = ON, ONLINE = ON) ON [FilegroupName]
GO
Paso 3:
Mueva los índices restantes no agrupados a un grupo de archivos secundario
Debe mover los índices no agrupados manualmente utilizando la sintaxis que se menciona a continuación:
--1st check the index information using the following sp
sp_helpindex [YourTableName]
--Now by using the following query you can move the remaining indexes to secondary filegroup
CREATE NONCLUSTERED INDEX [Index_Name] ON [SchemaName].[TableName]
(
[IndexKeyFields]
)WITH (DROP_EXISTING = ON, ONLINE = ON) ON [FilegroupName]
GO
Mover un Heap a otro grupo de archivos:
Como sé, la única forma de mover el Heap a otro grupo de archivos es agregar temporalmente un índice agrupado en el nuevo grupo de archivos y luego soltarlo (si es necesario).
Creo que estos pasos son muy simples y sencillos para mover cualquier tabla a un grupo de archivos diferente (a través de Management Studio):
Mueva todos los índices no agrupados a un nuevo grupo de archivos simplemente cambiando la propiedad FileGroup para cada índice
Cambia el índice de clúster a no-clúster y cambia simplemente su grupo de archivos (como en el paso anterior)
Agregue un nuevo índice de clúster temporal con "nuevo grupo de archivos" a través de este comando (o mediante IDE):
CREATE CLUSTERED INDEX [PK_temp] ON YOURTABLE([Id]) ON NEWFILEGROUP
(el comando anterior causa mover todos los datos al nuevo grupo de archivos)
Elimine el PK temporal anterior (¡cuando hace su trabajo perfectamente!)
Cambie de nuevo el índice del clúster principal para volver a ser índice de clúster (a través de IDE nuevamente)
El beneficio de los pasos anteriores no es eliminar las relaciones FK existentes. Además, el uso de IDE evita la pérdida de datos en condiciones de error.
NOTA: asegúrese de que la cuota de disco no esté habilitada para su grupo de archivos o configúrelo de forma incorrecta. De lo contrario, obtienes tu excepción de "grupo de archivos completo".
El particionamiento es una solución, pero podría "mover" el índice agrupado al nuevo grupo de archivos sin interrupción del servicio (sujeto a algunas condiciones, ver el enlace a continuación) usando
CREATE CLUSTERED /*oops*/ INDEX ... WITH (DROP_EXISTING = ON, ONLINE = ON, ...) ON newfilegroup
El índice agrupado es la información y esto es lo mismo que mover el grupo de archivos.
Por favor vea CREATE INDEX
Esto depende de si su clave principal está agrupada o no, lo que cambia la forma en que lo haríamos
Este extracto de SQL Server Books Online lo dice todo: "Debido a que el nivel de hoja de un índice agrupado y las páginas de datos son las mismas por definición, crear un índice agrupado y usar ON partition_scheme_name o ON filegroup_name cláususe mueve efectivamente una tabla desde el grupo de archivos en el que se creó la tabla para el nuevo esquema de partición o grupo de archivos ". (Fuente - http://msdn.microsoft.com/en-us/library/ms188783.aspx ) de ( http://www.mssqltips.com/sqlservertip/2442/move-data-between-sql-server-database-filegroups/ )
como ya dijeron otros amigos como respuesta aceptada por marc_s siguiente, la captura de pantalla te ofrece otra forma de hacerlo mediante la GUI de SSMS.
tenga en cuenta que puede mover fácilmente a otro grupo de archivos de la propiedad del índice en la pestaña de almacenamiento
Para responder a esta pregunta, primero debemos entender
- Si una tabla no tiene un índice, sus datos se llaman montón
- Si una tabla tiene un índice agrupado, ese índice es efectivamente su información de tabla. Por lo tanto, si mueve el índice agrupado, también moverá sus datos.
El primer paso es obtener más información sobre la tabla que queremos mover. Hacemos esto ejecutando este T-SQL:
sp_help N''<<your table name>>''
El resultado le mostrará una columna titulada ''Data_located_on_filegroup''. Esta es una forma útil de saber en qué grupo de archivos se encuentran los datos de su tabla. Pero más importante es el resultado que muestra información sobre los índices de la tabla. (Si solo desea ver información sobre los índices de la tabla, solo ejecute sp_helpindex N''<<your table name>>''
) Su tabla puede tener 1) ningún índice (por lo que es un montón), 2) un solo índice, o 3 ) índices múltiples. Si index_description comienza con ''clustered, unique, ...'', ese es el índice que desea mover. Si el índice también es una clave principal, eso está bien, aún puede moverlo.
Para mover el índice, tome nota de index_name e index_keys que se muestran en los resultados de la consulta de ayuda anterior, luego utilícelos para completar los <<blanks>>
en <<blanks>>
en la siguiente consulta:
CREATE UNIQUE CLUSTERED INDEX [<<name of clustered index>>]
ON [<<table name>>]([<<column name the index is on - from index_keys above>>])
WITH DROP_EXISTING, ONLINE
ON <<name of file group you want to move the index to>>
Las opciones DROP EXISTING, ONLINE
anteriores son importantes. DROP EXISTING
se asegura de que el índice no esté duplicado, y ONLINE
mantiene la tabla en línea mientras la mueve.
Si el índice que está moviendo no es un índice agrupado, entonces reemplace UNIQUE CLUSTERED
arriba con NONCLUSTERED
Para mover una tabla de almacenamiento dinámico, agregue un índice agrupado, luego ejecute la instrucción anterior para moverla a un grupo de archivos diferente, luego suelte el índice.
Ahora, regrese y ejecute sp_help
en su tabla, y verifique los resultados para ver dónde se encuentran ahora sus datos de tabla y de índice.
Si su tabla tiene más de un índice , luego de ejecutar la declaración anterior para mover el índice agrupado, sp_helpindex
mostrará que su índice agrupado está en el nuevo grupo de archivos, pero los índices restantes seguirán estando en el grupo de archivos original. La tabla continuará funcionando normalmente, pero debería tener una buena razón por la que desea que los índices se encuentren en diferentes grupos de archivos. Si desea que la tabla y todos sus índices estén en el mismo grupo de archivos, repita las instrucciones anteriores para cada índice, sustituyendo CREATE [NONCLUSTERED, or other] ... DROP EXISTING...
según sea necesario, dependiendo del tipo de índice que CREATE [NONCLUSTERED, or other] ... DROP EXISTING...
están en movimiento.
Si solo desea mover la tabla a un nuevo grupo de archivos, debe volver a crear el índice agrupado en la tabla (después de todo: el índice agrupado es la información de la tabla) en el nuevo grupo de archivos que desea.
Puedes hacer esto con, por ejemplo:
CREATE CLUSTERED INDEX CIX_YourTable
ON dbo.YourTable(YourClusteringKeyFields)
WITH DROP_EXISTING
ON [filegroup_name]
o si su índice agrupado es único :
CREATE UNIQUE CLUSTERED INDEX CIX_YourTable
ON dbo.YourTable(YourClusteringKeyFields)
WITH DROP_EXISTING
ON [filegroup_name]
Esto crea un nuevo índice agrupado y descarta el existente, y crea el nuevo índice agrupado en el grupo de archivos que especificó; et voila, los datos de su tabla se han movido al nuevo grupo de archivos.
Consulte los documentos de MSDN en CREATE INDEX para obtener detalles sobre todas las opciones disponibles que desee especificar.
Esto, por supuesto, todavía no se trata de la partición, pero esa es otra historia entera para sí misma ...
CREATE CLUSTERED INDEX IXC_Products_Product_id
ON dbo.Products(Product_id)
WITH (DROP_EXISTING = ON) ON MyNewFileGroup