DDL触发器确实可以帮助您跟踪Azure SQL数据库上的架构更改。下面是一个例子:
我是Azure的新手,我被要求在Azure SQL Server中生成添加/更改的数据库、表或列的每日报告。具体来说,我们想知道什么时候创建了新的基准,添加了新的表,或者更改了现有的表,列也是如此。在非Azure SQL Server中,您可以在标准报告中使用架构更改历史记录,但这在Azure中不可用。
我看到了一些建议,您可以使用Extended Events来实现这一点,但我没有找到任何资源来展示如何实现这一目标。如有任何帮助,我们将不胜感激。
CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT 'Save change on a log'
SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)');
数据库审核可以帮助更改架构和删除对象。下面是一个例子:
Set-AzureRmSqlDatabaseAuditing `
-State Enabled `
-ResourceGroupName "resourcegroupname" `
-ServerName "ssqlinstancename" ` #ssqlinstancename.database.windows.net
-StorageAccountName "strageaccountname" `
-DatabaseName "dbname" `
-AuditActionGroup 'SCHEMA_OBJECT_CHANGE_GROUP' `
-RetentionInDays 8 `
-AuditAction "DELETE ON schema::dbo BY [public]"
如果你也想跟踪DML操作,你可以使用时态表,但数据库审计也有帮助:
Set-AzureRmSqlDatabaseAuditing -ResourceGroupName "resourceGroup"
-ServerName "SQL Server Name" -DatabaseName "AdventureWorksLT"
-StorageAccountName "storageAccount"
-AuditActionGroup "SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP", "FAILED_DATABASE_AUTHENTICATION_GROUP", "BATCH_COMPLETED_GROUP"
-AuditAction "UPDATE ON database::[AdventureWorksLT] BY [public]"
-RetentionInDays 60