cambiar nombre al mdf y ldf

28/01/2010 - 11:10 por martin | Informe spam
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.
 

Leer las respuestas

#1 Alejandro Mesa
28/01/2010 - 15:29 | Informe spam
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

ALTER DATABASE Northwind
MODIFY NAME = Northwnd
GO

SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'Northwnd');
GO

ALTER DATABASE Northwnd
MODIFY FILE (NAME = 'Northwind', NEWNAME = 'Northwnd')
GO

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

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\Dataorthwind.mdf')
GO

ALTER DATABASE Northwnd MODIFY FILE (NAME = Northwnd_log, FILENAME =
'C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Dataorthwind.ldf')
GO

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


"martin" wrote:

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.

Preguntas similares