我想要一种编写自己的查询来恢复数据库的方法。要还原的数据库需要具有删除当前用户并重新映射同一用户的所有设置。原因是因为在恢复数据库时,用户将没有正确的设置来使用数据库,并且必须重新为用户分配权限。
答案 0 :(得分:9)
检查this: -
第1步:从备份中恢复数据库的逻辑文件名。
RESTORE FILELISTONLY
FROM DISK = 'D:BackUpYourBaackUpFile.bak'
GO
步骤2:在以下步骤中使用LogicalName列中的值。 ----将数据库设置为单用户模式
ALTER DATABASE YourDB
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE
----恢复数据库
RESTORE DATABASE YourDB
FROM DISK = 'D:BackUpYourBaackUpFile.bak'
WITH MOVE 'YourMDFLogicalName' TO 'D:DataYourMDFFile.mdf',
MOVE 'YourLDFLogicalName' TO 'D:DataYourLDFFile.ldf'
/ 如果数据库在多用户中之前语句中没有错误 模式。 如果发生错误,请执行以下命令进行转换 多用户数据库。 /
ALTER DATABASE YourDB SET MULTI_USER
GO
答案 1 :(得分:2)
原因是因为在恢复数据库时,用户将没有正确的设置来使用数据库,并且必须重新为用户分配权限。
我想:
正确?
如果是,您需要考虑以下事项:
我想第二点是你的用户在恢复后没有“正确设置”的原因。
一些背景知识:
所以可能发生的事情是:
123456789
123456789
从此数据库中读取”987654321
),因此123456789
上的现有权限不起作用他! Microsoft有一个名为sp_help_revlogin
的存储过程,它就是这样做的
它会为旧服务器中的所有用户生成一个脚本。然后,您可以在新服务器上运行该脚本,它将创建具有旧服务器上相同SID的用户。
然后,您可以将数据库从旧服务器还原到新服务器,并且数据库中已有的所有权限都可以正常工作。
您可以从此MSDN文章中获取sp_help_revlogin
:
How to transfer logins and passwords between instances of SQL Server
请注意,实际的恢复过程没有什么特别之处 - 用户及其SID会产生不同。
因此,您不需要任何“特殊”命令来恢复数据库,只需要标准数据库,例如来自Rahul Tripathi's answer的数据库。