还原数据库相关,孤立用户无法删除,又无法与新建的同名登陆挂钩的解决办法(转)

如何将数据库还原至任意位置

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
posted @ 2012-04-16 10:28  !黑客牛仔  阅读(348)  评论(0编辑  收藏  举报