Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

cambiar nombre al mdf y ldf

1,264 views
Skip to first unread message

martin

unread,
Jan 28, 2010, 5:10:02 AM1/28/10
to
Hola a todos:

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.

Alejandro Mesa

unread,
Jan 28, 2010, 9:29:01 AM1/28/10
to
Martin,

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

0 new messages