在我们从简单的 Windows 更新导致的机器重启中恢复后,SQL Server 2005 从我们的一个镜像数据库中删除了一个用户。
我检查并登录不在镜像服务器中(它在主服务器中)。如果系统经历了故障转移,这是否可以解释为什么用户在恢复到主数据库时会从用户数据库中删除?我在文档中找不到任何表明 SQL Server 会丢弃孤立用户的内容(http://msdn.microsoft.com/en-us/library/ms175475%28SQL.90%29.aspx)。我应该在日志中寻找什么吗?
编辑:失败前的设置:PRIMARY - 登录确定。数据库中的用户正常。MIRROR - 登录不存在。用户在数据库中不存在。
失败后:PRIMARY - 登录 OK。用户在数据库中不存在。MIRROR - 登录不存在。用户在数据库中不存在。
编辑:在上周 WINDOWS UPDATES 重新启动后恢复数据库系统后,我们注意到我们的一个表中缺少一个触发器,另一个用户也是如此。我 100% 确信这不是我们做的(我们只有两个 sa,我就是其中之一)。到底他妈发生了什么?这一定是 SQL Server 2005 镜像的错误。
镜像服务器是否曾经创建过登录?如果不是,您需要从主系统编写登录脚本,以便 SID 匹配。
用户可能在镜像数据库中,只是没有同步到登录。如果设置镜像时用户在那里,即使登录不存在,SQL Server 也不会删除它。在那里。
如果您稍后添加它,它将穿过镜子。不是登录名,而是 CREATE USER 将被转移。
这就是我认为发生的事情,这是基于您对孤儿用户的问题标签中的预感,所以我可能是错的。
sp_change_users_login 'Update_One'
以修复登录问题。这将更改数据库中的用户 sid 以匹配数据库服务器上登录的 sid。sp_change_users_login
来解决问题。应该发生的情况:
参与镜像的数据库中使用的主体登录被脚本化(如 denny 先生建议的那样)到镜像。最简单的方法是使用sp_help_rev_login 您也可以使用SSIS 传输登录任务。
数据库服务器登录的 sid 在 sys.server_principals 中可见。数据库用户的 sid 在 sys.database_principals 中。检查这些以确保没有错配。
这是我们的第 3 方供应商的应用程序将触发器作为其应用程序的一部分丢弃。疯狂的。
触发器是错误的,因为有人放弃了它。时期。无意冒犯,但如果您是管理员之一,并且您不知道服务器主体驻留在哪里以及为什么数据库主体在故障转移后会成为孤立对象,那么我无法相信您知道触发器消失的原因。
使用默认管理跟踪来找出谁删除了触发器以及何时删除。如果幸运的话,跟踪文件还没有被回收。设置审计以跟踪从现在开始在您的服务器上发生的更改。对于管理员来说,当触发器消失时,这不应该是一个“惊喜”。不,你不能责怪产品。