让我们说我正在运行一个SQL Server实例,每周添加许多新的数据库。
为了保持一致性,我想要Z:\Data
中的所有数据库数据文件和Z:\Log
中的所有日志文件。 10个文件中的9个安装在正确的位置,但是1/10,它们不是(由于无法控制的安装默认值或人为错误)。
我想要做的是通过触发针对sys.master_files
视图的插入或更新来检测添加新数据库文件或移动新数据库文件的时间,我理解这是不可能的(因为它是视图)和\或只能使用INSTEAD OF并安排SQL Agent Job来实现。
如果可能的话,我想尝试从触发器获取文件名,并避免使用代理。 是否有可以触发的文件路径的实际表格?
另外,这些实例是不断生产的,由于担心生产数据丢失,我用来移动文件的脚本只会在下次重启sql服务时将它们排队移动,这意味着我仍然必须手动安排服务重启。这并不可怕 - 我宁愿保证只是为了移动文件而没有数据丢失,但是有更好的方法吗?在数据库联机之前,我能以任何方式触发\捕获数据库文件在create \ attach \ move上的位置吗?
--Example
ALTER DATABASE tempdb
MODIFY FILE
(NAME = tempdev, FILENAME = 'Z:\Data\Tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE
(NAME = templog, FILENAME = 'Z:\Log\Tempdb.ldf');
GO
--No trigger on sys.master_files
--Requires SQL Service restart :-(