例如,我想在所有数据库上运行索引维护作业。
我的服务器有很多AOAG,经常同时扮演不同AOAG的主副副本角色。
如果我在该服务器上有一个辅助数据库,并且它是只读的,我无法在其中找到此信息,sys.databases
因为它显示0
.
如何运行游标并跳过作为辅助副本的 AOAG 的一部分的数据库,而不中断工作?
我知道我可以使用... SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability')
但是有没有更简单的方法可以将它实现到游标/查询/过程中?
谢谢
我通常使用系统函数 fn_hadr_database_is_primary_replica。它接受数据库名称作为参数。如果数据库是可用性组和主副本的一部分,则返回 1,如果不在主副本上,则返回 0,如果数据库不属于可用性组,则返回 NULL。
例如…
这将进入现有循环,您已经拥有来自 sys.databases 的数据库名称列表。然后,当您转到循环中的每个新数据库名称时,您将调用此 IF 语句。