Tenía una base de datos, bd1, que usaba. Y tenía bd1.mdf y bd1.ldf.
Ahora esa base de datos se llama bd2, pero veo que sigue necesitando la
misma bd1.mdf y bd1.ldf. Si yo cambio manualmente los bd1.mdf y bd1.ldf a
bd2.mdf y bd2.ldf y borro los bd1, entonces el problema es que necesita los
bd1. Como no están, no me funciona. Si dejo los bd1, me deja funcionar.
El caso es que requiere los anteriores bd1. Algo que no entiendo bien por qué.
¿Cómo puedo hacer para que funcione todo bien?
Gracias de antemano.
Cual es la version de SS que usas?
Debes usar la instruccion "alter database". Primero debes poner la db en
modo offline, cambiar los nombres de los archivos manualmente, luego usar
"alter database ... modify file ...", poner la db online nuevamente.
Aqui te paso un ejemplo de como hacerlo programaticamente.
If you want to change the name of the physical files using ALTER DATABASE,
you will have to set the db to OFFLINE. It is not as simple as changing the
logical file names. Here is a simple example to show you the steps.
Voy a usar una backup de la db [Northwind], para luego cambiar su nombre y
simular lo que quieres.
USE [master]
GO
BACKUP DATABASE Northwind
TO DISK = 'C:\Temp\Northwind.bak'
GO
ALTER DATABASE Northwind
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
-- cambiar nombre de la db
ALTER DATABASE Northwind
MODIFY NAME = Northwnd
GO
-- C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data\northwnd.mdf
-- C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data\northwnd.ldf
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'Northwnd');
GO
-- cambiar nombre logico del archivo mdf
ALTER DATABASE Northwnd
MODIFY FILE (NAME = 'Northwind', NEWNAME = 'Northwnd')
GO
-- cambiar nombre logico del log
ALTER DATABASE Northwnd
MODIFY FILE (NAME = 'Northwind_log', NEWNAME = 'Northwnd_log')
GO
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'Northwnd');
GO
-- a partir de aqui comienza el cambio de los nombres fisicos
-- de los archivos
ALTER DATABASE Northwnd SET OFFLINE
GO
DECLARE @mdf NVARCHAR(260)
DECLARE @ldf NVARCHAR(260)
DECLARE @cmd NVARCHAR(4000)
SELECT @mdf = physical_name
FROM sys.master_files
WHERE database_id = DB_ID(N'Northwnd') AND [name] = 'Northwnd'
SELECT @ldf = physical_name
FROM sys.master_files
WHERE database_id = DB_ID(N'Northwnd') AND [name] = 'Northwnd_log'
SET @cmd = 'rename "' + @mdf + '" Northwind.mdf'
EXEC master..xp_cmdshell @cmd, no_output
SET @cmd = 'rename "' + @ldf + '" Northwind.ldf'
EXEC master..xp_cmdshell @cmd, no_output
GO
ALTER DATABASE Northwnd MODIFY FILE (NAME = Northwnd, FILENAME = 'C:\Program
Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data\northwind.mdf')
GO
ALTER DATABASE Northwnd MODIFY FILE (NAME = Northwnd_log, FILENAME =
'C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data\northwind.ldf')
GO
-- hastas aqui llega el cambio de los nombres fisicos
ALTER DATABASE Northwnd SET ONLINE
GO
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'Northwnd');
USE [Northwnd]
GO
SELECT TOP 1 * FROM dbo.[Orders]
GO
USE [master]
GO
DROP DATABASE [Northwnd]
GO
RESTORE DATABASE Northwind
FROM DISK = 'C:\Temp\Northwind.bak'
GO
AMB