如何将数据库还原至任意位置
1、执行
restore filelistonly FROM disk='E:\ChinaValue_db_200612250200.BAK'
获得当前备份文件的逻辑名
2、使用windows账户或者sa登陆执行以下SQL语句:
restore DATABASE [ChinaValue]
FROM disk='E:\ChinaValue_db_200612250200.BAK'
WITH
file=1,
move 'ChinaValueTemp' TO 'F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Data.MDF',
move 'ChinaValueTemp_Log' TO 'F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Log.LDF'
restore DATABASE [还原目的数据库]
FROM disk='E:\ChinaValue_db_200612250200.BAK' --备份文件的路径
WITH
file=1, --文件的编号
move 'ChinaValueTemp' TO 'F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Data.MDF', --数据库逻辑名 to 还原到的物理文件名
move 'ChinaValueTemp_Log' TO 'F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Log.LDF' --日志逻辑名 to 还原到的物理文件名
还原数据库后,孤立用户无法删除,又无法与新建的同名登陆挂钩的解决办法
--首先创建存储过程
CREATE proc p_validatelogin
@dbname sysname,--孤立用户所在的数据库名
@loginame sysname--孤立用户名
AS
IF db_id(@dbname) IS NULL
begin
print '无此数据库'
RETURN
end
declare @s nvarchar(4000),@sid BINARY(16)
IF EXISTS(SELECT * FROM master..sysxlogins WHERE name=@loginame)
begin--如果已经有该登录,则直接修改系统表
exec sp_configure 'allow updates',1 reconfigure WITH override
SELECT @sid=sid FROM master..syslogins WHERE name=@loginame
SET @s='update ['+REPLACE(@dbname,']',']]')
+']..sysusers set sid=@sid where name=@loginame and islogin=1'
exec sp_executesql @s
,N'@sid binary(16),@loginame sysname'
,@sid,@loginame
exec sp_configure 'allow updates',0 reconfigure WITH override
end
else
begin--如果没有该登录,则创建登录
SET @s='SELECT @sid=sid FROM ['+REPLACE(@dbname,']',']]')
+']..sysusers WHERE islogin=1 and name=@loginame'
exec sp_executesql @s
,N'@sid binary(16) out,@loginame sysname'
,@sid out,@loginame
exec sp_addlogin @loginame=@loginame,@sid=@sid
end
go
--执行存储过程
exec p_validatelogin 'ChinaValueBbs','chinavaluebbs'
go
--执行重新配置
RECONFIGURE