恢复 SQL Server 数据库 - 提示和技巧?

Alb*_*ert 3 sql-server-2005 sql-server

在还原 SQL Server 数据库方面,有人有任何提示和技巧吗?

我最近将 .bak 从一台服务器/实例恢复到另一台,在两台服务器/实例上都使用 SQL Server 2005,并且遇到了以下问题(到目前为止):

所有身份插入值都重置为其原始值(在我的情况下为 1)。直到我找到以下命令来遍历所有表并将其重新设定为当前值 + 1 之前,我感到很痛苦:

 exec sp_MSforeachtable @command1 = 'DBCC CHECKIDENT (''?'', RESEED)'
Run Code Online (Sandbox Code Playgroud)

权限不见了。数据库级帐户当然过来了(连同他们的角色分配),但是每个角色的大部分数据库权限都消失了……这意味着每个表、视图和存储过程都缺少读取、插入、删除、执行等权限. 我写了一些像下面这样的脚本来纠正,但仍然很痛苦。

 select 'GRANT SELECT ON ' + TABLE_NAME + ' TO rolename' from Information_schema.tables      
Run Code Online (Sandbox Code Playgroud)

如果恢复到新实例,显然不存在实例级别的权限……但这有点痛苦,因为如果该帐户已存在于数据库级别,您似乎无法重新创建实例级别的帐户。这里最好的方法是什么?就我而言,我删除了数据库帐户,创建了实例,然后使用上述脚本授予了权限。

一般来说,我只是对一些最佳实践感到好奇,当涉及到恢复 SQL Server 数据库......和/或以某种方式避免我遇到的问题的提示时。我只是想为尽可能无错误的恢复铺平道路。

小智 5

看起来您没有恢复备份,但您只是使用某种 bcp 工具传输了表。

根据我的经验,备份/恢复的常见问题是:a) 登录丢失或不匹配,因为它们在 master 数据库中 b) 当您恢复备份的服务器的整理与来自的整理不同时的整理问题你做了备份。

当我有一个基于复制的主/从设置时,我遇到了你在 sqlserver 7 上遇到的问题。在我将 slave 切换为 master 的那一天,我不得不重新设定所有身份列并手动处理所有授权。这并不奇怪,因为复制不会复制系统表,并且标识列被设置为“NOT FOR REPLICATION”。