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

还原数据库相关

 

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

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(@dbnameIS 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 @ 2008-04-24 15:46  Happiness...  阅读(436)  评论(0编辑  收藏  举报
Happiness.....