如何将数据库还原至任意位置
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