这周我学到了一个惨痛的教训。事实证明,虽然表更新/模式更新确实在可用性组上的数据库之间复制,但更改主副本上的数据库所有者并不会自动更改辅助副本上的数据库所有者。
因此,如果您执行故障转移,数据库所有者现在可能与主表的 SID 不同步。
在进行安全相关更改时,我的行动计划是否应该是
1. Apply change to primary replica
2. Fail over the Availability Group
3. Apply change to the new primary replica
我做出这些陈述是否正确?当我进行更改时,我必须注意的只是 DBOwner/Schema 更改吗?
是的,您需要确保数据库具有相同的所有者,架构更改将沿着可用性组进行。当数据库所有者发生更改时,这会出现问题,因为您需要将这些更改也重新应用到辅助节点。
如果可能,您可以在每个数据库上将所有者更改为 SA,然后在每晚以及发生故障转移时进行此更改。当您捕获故障转移时,您可以运行此命令以使每个数据库的 SA 所有者:
编辑:
如果您不想将 SA 作为所有者,您可以创建包含数据库所有者的表
填满桌子(把它作为一项工作,每小时安排一次或其他什么)
一旦发生故障转移,就需要在新的活动节点上运行: