Cómo mover un archivo Ndf a otra unidad sin desconectar la BD?

t102715
25 de Septiembre del 2009
Tengo una BD de Sql Server 2000 compuesta por 1 archivo Mdf, 1 Ldf y varios Ndf y necesito mover varios archivos Ndf a otra unidad por problemas de espacio.
He revisado Alter Database Modify File y sólo es aplicable a los archivos de sistema.
Sp_Detach_DB y sp_Attach_db (o Create Database ... for Attach, si son más de 16 archivos) podría valer. Desconectas toda la base de datos y luego vuelves a conectarla indicando la ubicación, antigua o nueva, de cada uno de los archivos, pero ¿hay algún modo de reubicar un archivo Ndf sin necesidad de desconectar toda la BD?
Gracias.

mvallejos
25 de Septiembre del 2009
Hasta donde yo se no, esas son esas tareas que requieren uso exclusivo de la base de datos y que necesitas desconectarlas.
La pregunta es el porqué necesitas mover un dispositivo sin desactivar la base de datos.

Saludos

T102715
25 de Septiembre del 2009
Me preocupan los privilegios. Si puedes mover en "caliente" un archivo, tienes la garantía de que los privilegios no sufrirán cambios, y sobre este tema no hay referencia en ninguna parte.
Tengo una maraña de usuarios y privilegios considerable y, si hubiera sido posible, preferiría no tener que averiguar por mí mismo qué sucede con los privilegios de los objetos cuando vuelves a conectar la BD. ¿Se restituyen sin problemas?
Gracias por todo, procederé con detach_db y attach_db.
Saludos.

T102715
25 de Septiembre del 2009
Mi preocupación era infundada.
Todos los privilegios se restituyen correctamente en todos los objetos de la BD.

EXEC sp_detach_db 'RH', 'true'
go
CREATE DATABASE RH
ON PRIMARY (FILENAME= 'E:BBDDRHRH_Data.MDF'),
(FILENAME = 'E:BBDDRHRH_Log.LDF'),
(FILENAME = 'E:BBDDRHDatos_2006.NDF'),
(FILENAME = 'E:BBDDRHDatos_2007.NDF'),
(FILENAME = 'E:BBDDRHDatos_2008.NDF'),
(FILENAME = 'E:BBDDRHDatos_2009.NDF'),
(FILENAME = 'E:BBDDRHDatos_2010.NDF'),
(FILENAME = 'E:IndicesRHIndices_2006.NDF'),
(FILENAME = 'E:IndicesRHIndices_2007.NDF'),
(FILENAME = 'E:IndicesRHIndices_2008.NDF'),
(FILENAME = 'E:IndicesRHIndices_2009.NDF'),
(FILENAME = 'E:IndicesRHIndices_2010.NDF'),
(FILENAME = 'E:IndicesRHIndices_TW.NDF')
FOR ATTACH
go

Saludos.