我一直在创建一个流程来检查我们所有的数据库并分析日志结构、备份、收缩和适当调整大小,同时考虑操作要求和 VLF 大小/数量。我的代码工作得很好,但我今天在测试中遇到了一些我没想到的事情。
我有一个大小适中的数据库,其中包含 104GB 日志和大约 900 个 VLF。在低活动期间,我备份了日志并缩小到几乎没有。然后我开始以 8GB 的迭代将它恢复到原来的大小,使 VLF 保持在 512MB 左右。在重新增长期间(介于 48GB 和 56GB 之间),我对数据库的可用性感到好奇,并开始对不同的表运行随机 SELECTS。结果返回没有问题。然后我在数据库中创建了一个表并循环了一堆插入。
当日志继续增长并且表创建和插入没有问题或延迟地完成时,我感到很惊讶。我的印象是数据库会以某种方式被锁定,阻止 DDL 和 DML,直到再生完成。当然,考虑到日志的循环性质,我可以看出这是一个错误的假设。但是我无法以某种方式在网络上找到任何东西。
有人可以阐明或指出正在发生的事情的正确方向吗?谢谢!
我最终用下面的代码解决了我自己的问题: