From 9f06ca44844ae7cb674badb2e6c1a9ccef5e87e2 Mon Sep 17 00:00:00 2001 From: ypermitin Date: Thu, 31 Aug 2023 23:41:35 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D0=BB=D1=83=D0=B6=D0=B5=D0=B1=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=B1=D0=B0=D0=B7=D0=B0=20=D0=BC=D0=BE=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=D0=B0=20=D0=B8=20=D1=81?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=BE=D0=B2=D0=BE=D0=B6=D0=B4=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Обновлена документация - Добавлена процедура формирования бэкапов - Добавлена процедура очистки файлов - Обновлены миграции и скрипты создания базы --- .../CreateServiceDatabaseScript.sql | 178 +++++++++++++++++- ...V1_0_0_8__Backup_AddProcBackupDatabase.sql | 127 +++++++++++++ .../V1_0_0_9__Backup_AddProcClearFiles.sql | 47 +++++ .../Service-Database/Readme.md | 156 +++++++++++++++ 4 files changed, 507 insertions(+), 1 deletion(-) create mode 100644 SQL-Server-Maintenance/Service-Database/Migrations/V1_0_0_8__Backup_AddProcBackupDatabase.sql create mode 100644 SQL-Server-Maintenance/Service-Database/Migrations/V1_0_0_9__Backup_AddProcClearFiles.sql diff --git a/SQL-Server-Maintenance/Service-Database/CreateServiceDatabaseScript.sql b/SQL-Server-Maintenance/Service-Database/CreateServiceDatabaseScript.sql index 5152102..e19096b 100644 --- a/SQL-Server-Maintenance/Service-Database/CreateServiceDatabaseScript.sql +++ b/SQL-Server-Maintenance/Service-Database/CreateServiceDatabaseScript.sql @@ -2048,4 +2048,180 @@ BEGIN CLOSE databases_cursor; DEALLOCATE databases_cursor; END -GO \ No newline at end of file +GO + +CREATE PROCEDURE [dbo].[sp_BackupDatabase] + @databaseName sysname, + @backupDirectory nvarchar(max), + @backupType nvarchar(10) = 'FULL', + @useSubdirectory bit = 1, + @showScriptOnly bit = 0, + @backupCompressionType nvarchar(10) = 'AUTO', + @copyOnly bit = 0, + @checksum bit = 0, + @continiueOnError bit = 0, + @blockSize int = 0, + @maxTransferSize int = 0, + @bufferCount int = 0, + @verify bit = 0 + +AS +BEGIN + SET NOCOUNT ON; + + DECLARE + @backupExtension nvarchar(5), + @fileName nvarchar(max), + @backupFileFullName nvarchar(max), + @useCompression bit, + @msg nvarchar(max), + @sql nvarchar(max); + + IF DB_ID(@databaseName) IS NULL + BEGIN + SET @msg = 'Database ' + @databaseName + ' is not exists.'; + THROW 51000, @msg, 1; + RETURN -1; + END + + IF(NOT UPPER(@backupType) IN ('FULL', 'DIFF', 'TRN')) + BEGIN + SET @msg = 'Backup type is incorrect. Valid values: FULL, DIFF, TRN.'; + THROW 51000, @msg, 1; + RETURN -1; + END + + IF(NOT UPPER(@backupCompressionType) IN ('AUTO', 'ENABLE', 'DISABLE')) + BEGIN + SET @msg = 'Backup compression type is incorrect. Valid values: AUTO, ENABLE, DISABLE.'; + THROW 51000, @msg, 1; + RETURN -1; + END + + SET @backupExtension = + CASE + WHEN @backupType = 'FULL' THEN 'bak' + WHEN @backupType = 'DIFF' THEN 'diff' + WHEN @backupType = 'TRN' THEN 'trn' + END + + if(@backupCompressionType = 'AUTO') + BEGIN + SELECT @useCompression = CAST(value AS bit) + FROM sys.configurations + WHERE name = 'backup compression default'; + END ELSE IF(@backupCompressionType = 'ENABLE') + BEGIN + SET @useCompression = 1 + END ELSE IF(@backupCompressionType = 'DISABLE') + BEGIN + SET @useCompression = 0 + END + + SET @fileName = @databaseName + '_backup_' + FORMAT(sysdatetime(), 'yyyy_MM_dd_HHmmss_ffffff'); + + SET @backupFileFullName = + CASE WHEN SUBSTRING(@backupDirectory, LEN(@backupDirectory), 1) = '\' THEN SUBSTRING(@backupDirectory, 1, LEN(@backupDirectory) - 1) ELSE @backupDirectory END + + '\' + + CASE WHEN @useSubdirectory = 1 THEN @databaseName + '\' ELSE '' END; + + if(@showScriptOnly = 0) + BEGIN + SET @sql = 'EXEC master.sys.xp_create_subdir N''' + @backupFileFullName + '''' + EXECUTE sp_executesql @sql + END + + SET @backupFileFullName = @backupFileFullName + @fileName + '.' + @backupExtension; + + SET @sql = +'BACKUP ' + CASE WHEN @backupType = 'TRN' THEN 'LOG' ELSE 'DATABASE' END + ' [' + @databaseName + '] +TO DISK = N''' + @backupFileFullName + ''' WITH NOFORMAT, +NOINIT, +NAME = N''' + @fileName + ''', +SKIP, REWIND, NOUNLOAD' + + CASE WHEN @backupType = 'DIFF' THEN ', DIFFERENTIAL' ELSE '' END + + CASE WHEN @useCompression = 1 THEN ', COMPRESSION' ELSE '' END + + CASE WHEN @copyOnly = 1 THEN ', COPY_ONLY' ELSE '' END + + CASE WHEN @checksum = 1 THEN ', CHECKSUM' ELSE '' END + + CASE WHEN @continiueOnError = 1 THEN ', CONTINUE_AFTER_ERROR' ELSE '' END + + CASE WHEN @blockSize > 0 THEN ', BLOCKSIZE = ' + CAST(@blockSize as nvarchar(max)) ELSE '' END + + CASE WHEN @maxTransferSize > 0 THEN ', MAXTRANSFERSIZE = ' + CAST(@maxTransferSize as nvarchar(max)) ELSE '' END + + CASE WHEN @bufferCount > 0 THEN ', BUFFERCOUNT = ' + CAST(@bufferCount as nvarchar(max)) ELSE '' END + ', STATS = 10;' + + if(@verify = 1) + BEGIN + DECLARE @backupSetId as int; + + SELECT @backupSetId = position from msdb..backupset + WHERE [database_name] = @databaseName and backup_set_id = ( + select max(backup_set_id) + from msdb..backupset + where [database_name] = @databaseName + ) + + IF @backupSetId is null + BEGIN + raiserror(N'Ошибка верификации. Сведения о резервном копировании для базы данных "klgd82" не найдены.', 16, 1) + END + + SET @sql = @sql + ' + +RESTORE VERIFYONLY FROM DISK = N''' + @backupFileFullName + ''' WITH FILE = ' + CAST(@backupSetId AS nvarchar(max)) + ', NOUNLOAD, NOREWIND;' + END + + if(@showScriptOnly = 1) + BEGIN + PRINT @sql + END ELSE + BEGIN + EXECUTE sp_executesql @sql + END +END + +CREATE PROCEDURE [dbo].[sp_ClearFiles] + @folderPath nvarchar(max), + @fileType bit = 0, + @fileExtension nvarchar(10) = null, + @cutoffDate datetime = null, + @cutoffDateDays int = null, + @includeSubfolders bit = 1, + @scriptOnly bit = 0 +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @msg nvarchar(max); + + IF(@cutoffDate is not null AND @cutoffDateDays is not null) + BEGIN + SET @msg = 'You should setup only one parameter: @cutoffDate or @cutoffDateDays'; + THROW 51000, @msg, 1; + RETURN -1; + END + + IF(@cutoffDateDays IS NOT NULL) + BEGIN + SET @cutoffDate = DATEADD(day, -@cutoffDateDays, GETDATE()) + END ELSE IF(@cutoffDate is null) + BEGIN + SET @cutoffDate = GETDATE() + END + + DECLARE @sql nvarchar(max); + SET @sql = 'EXECUTE master.dbo.xp_delete_file ' + + CAST(@fileType AS nvarchar(max)) + + ',N''' + @folderPath + '''' + + ',N''' + @fileExtension + + ''',N''' + FORMAT(@cutoffDate, 'yyyy-MM-ddTHH:mm:ss') + ''',' + + CAST(@includeSubfolders AS nvarchar(max)) + + IF(@scriptOnly = 1) + BEGIN + PRINT @sql + END ELSE + BEGIN + EXECUTE sp_executesql @sql + END +END + + diff --git a/SQL-Server-Maintenance/Service-Database/Migrations/V1_0_0_8__Backup_AddProcBackupDatabase.sql b/SQL-Server-Maintenance/Service-Database/Migrations/V1_0_0_8__Backup_AddProcBackupDatabase.sql new file mode 100644 index 0000000..1f3afc9 --- /dev/null +++ b/SQL-Server-Maintenance/Service-Database/Migrations/V1_0_0_8__Backup_AddProcBackupDatabase.sql @@ -0,0 +1,127 @@ +CREATE PROCEDURE [dbo].[sp_BackupDatabase] + @databaseName sysname, + @backupDirectory nvarchar(max), + @backupType nvarchar(10) = 'FULL', + @useSubdirectory bit = 1, + @showScriptOnly bit = 0, + @backupCompressionType nvarchar(10) = 'AUTO', + @copyOnly bit = 0, + @checksum bit = 0, + @continiueOnError bit = 0, + @blockSize int = 0, + @maxTransferSize int = 0, + @bufferCount int = 0, + @verify bit = 0 + +AS +BEGIN + SET NOCOUNT ON; + + DECLARE + @backupExtension nvarchar(5), + @fileName nvarchar(max), + @backupFileFullName nvarchar(max), + @useCompression bit, + @msg nvarchar(max), + @sql nvarchar(max); + + IF DB_ID(@databaseName) IS NULL + BEGIN + SET @msg = 'Database ' + @databaseName + ' is not exists.'; + THROW 51000, @msg, 1; + RETURN -1; + END + + IF(NOT UPPER(@backupType) IN ('FULL', 'DIFF', 'TRN')) + BEGIN + SET @msg = 'Backup type is incorrect. Valid values: FULL, DIFF, TRN.'; + THROW 51000, @msg, 1; + RETURN -1; + END + + IF(NOT UPPER(@backupCompressionType) IN ('AUTO', 'ENABLE', 'DISABLE')) + BEGIN + SET @msg = 'Backup compression type is incorrect. Valid values: AUTO, ENABLE, DISABLE.'; + THROW 51000, @msg, 1; + RETURN -1; + END + + SET @backupExtension = + CASE + WHEN @backupType = 'FULL' THEN 'bak' + WHEN @backupType = 'DIFF' THEN 'diff' + WHEN @backupType = 'TRN' THEN 'trn' + END + + if(@backupCompressionType = 'AUTO') + BEGIN + SELECT @useCompression = CAST(value AS bit) + FROM sys.configurations + WHERE name = 'backup compression default'; + END ELSE IF(@backupCompressionType = 'ENABLE') + BEGIN + SET @useCompression = 1 + END ELSE IF(@backupCompressionType = 'DISABLE') + BEGIN + SET @useCompression = 0 + END + + SET @fileName = @databaseName + '_backup_' + FORMAT(sysdatetime(), 'yyyy_MM_dd_HHmmss_ffffff'); + + SET @backupFileFullName = + CASE WHEN SUBSTRING(@backupDirectory, LEN(@backupDirectory), 1) = '\' THEN SUBSTRING(@backupDirectory, 1, LEN(@backupDirectory) - 1) ELSE @backupDirectory END + + '\' + + CASE WHEN @useSubdirectory = 1 THEN @databaseName + '\' ELSE '' END; + + if(@showScriptOnly = 0) + BEGIN + SET @sql = 'EXEC master.sys.xp_create_subdir N''' + @backupFileFullName + '''' + EXECUTE sp_executesql @sql + END + + SET @backupFileFullName = @backupFileFullName + @fileName + '.' + @backupExtension; + + SET @sql = +'BACKUP ' + CASE WHEN @backupType = 'TRN' THEN 'LOG' ELSE 'DATABASE' END + ' [' + @databaseName + '] +TO DISK = N''' + @backupFileFullName + ''' WITH NOFORMAT, +NOINIT, +NAME = N''' + @fileName + ''', +SKIP, REWIND, NOUNLOAD' + + CASE WHEN @backupType = 'DIFF' THEN ', DIFFERENTIAL' ELSE '' END + + CASE WHEN @useCompression = 1 THEN ', COMPRESSION' ELSE '' END + + CASE WHEN @copyOnly = 1 THEN ', COPY_ONLY' ELSE '' END + + CASE WHEN @checksum = 1 THEN ', CHECKSUM' ELSE '' END + + CASE WHEN @continiueOnError = 1 THEN ', CONTINUE_AFTER_ERROR' ELSE '' END + + CASE WHEN @blockSize > 0 THEN ', BLOCKSIZE = ' + CAST(@blockSize as nvarchar(max)) ELSE '' END + + CASE WHEN @maxTransferSize > 0 THEN ', MAXTRANSFERSIZE = ' + CAST(@maxTransferSize as nvarchar(max)) ELSE '' END + + CASE WHEN @bufferCount > 0 THEN ', BUFFERCOUNT = ' + CAST(@bufferCount as nvarchar(max)) ELSE '' END + ', STATS = 10;' + + if(@verify = 1) + BEGIN + DECLARE @backupSetId as int; + + SELECT @backupSetId = position from msdb..backupset + WHERE [database_name] = @databaseName and backup_set_id = ( + select max(backup_set_id) + from msdb..backupset + where [database_name] = @databaseName + ) + + IF @backupSetId is null AND @showScriptOnly = 0 + BEGIN + raiserror(N'Ошибка верификации. Сведения о резервном копировании для базы данных не найдены.', 16, 1) + END + + SET @sql = @sql + ' + +RESTORE VERIFYONLY FROM DISK = N''' + @backupFileFullName + ''' WITH FILE = ' + CAST(@backupSetId AS nvarchar(max)) + ', NOUNLOAD, NOREWIND;' + END + + if(@showScriptOnly = 1) + BEGIN + PRINT @sql + END ELSE + BEGIN + EXECUTE sp_executesql @sql + END +END \ No newline at end of file diff --git a/SQL-Server-Maintenance/Service-Database/Migrations/V1_0_0_9__Backup_AddProcClearFiles.sql b/SQL-Server-Maintenance/Service-Database/Migrations/V1_0_0_9__Backup_AddProcClearFiles.sql new file mode 100644 index 0000000..4b11c22 --- /dev/null +++ b/SQL-Server-Maintenance/Service-Database/Migrations/V1_0_0_9__Backup_AddProcClearFiles.sql @@ -0,0 +1,47 @@ +CREATE PROCEDURE [dbo].[sp_ClearFiles] + @folderPath nvarchar(max), + @fileType bit = 0, + @fileExtension nvarchar(10) = null, + @cutoffDate datetime = null, + @cutoffDateDays int = null, + @includeSubfolders bit = 1, + @scriptOnly bit = 0 +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @msg nvarchar(max); + + IF(@cutoffDate is not null AND @cutoffDateDays is not null) + BEGIN + SET @msg = 'You should setup only one parameter: @cutoffDate or @cutoffDateDays'; + THROW 51000, @msg, 1; + RETURN -1; + END + + IF(@cutoffDateDays IS NOT NULL) + BEGIN + SET @cutoffDate = DATEADD(day, -@cutoffDateDays, GETDATE()) + END ELSE IF(@cutoffDate is null) + BEGIN + SET @cutoffDate = GETDATE() + END + + DECLARE @sql nvarchar(max); + SET @sql = 'EXECUTE master.dbo.xp_delete_file ' + + CAST(@fileType AS nvarchar(max)) + + ',N''' + @folderPath + '''' + + ',N''' + @fileExtension + + ''',N''' + FORMAT(@cutoffDate, 'yyyy-MM-ddTHH:mm:ss') + ''',' + + CAST(@includeSubfolders AS nvarchar(max)) + + IF(@scriptOnly = 1) + BEGIN + PRINT @sql + END ELSE + BEGIN + EXECUTE sp_executesql @sql + END +END + + diff --git a/SQL-Server-Maintenance/Service-Database/Readme.md b/SQL-Server-Maintenance/Service-Database/Readme.md index 6d49f0e..9b010af 100644 --- a/SQL-Server-Maintenance/Service-Database/Readme.md +++ b/SQL-Server-Maintenance/Service-Database/Readme.md @@ -30,6 +30,9 @@ - [Контроль логов транзакций](#контроль-логов-транзакций) - [Реорганизация индексов и блокировки на уровне страниц](#реорганизация-индексов-и-блокировки-на-уровне-страниц) - [Исправление системного кэша объектов для реплик AlwaysOn](#исправление-системного-кэша-объектов-для-реплик-alwayson) + - [Бэкапирование](#бэкапирование) + - [Формирование бэкапов](#формирование-бэкапов) + - [Очистка бэкапов](#очистка-бэкапов) Далее рассмотрим примеры работы с этой базой данных. @@ -103,6 +106,8 @@ V<ВерсияМиграции>__<ИмяМиграции>.sql - Обслуживание статистик - Сбор информации о размерах таблиц баз данных на сервере - Служебные действия по настройке и исправлению некоторых проблем +- Бэкапирование +- Очистка файлов Кроме этого, все операции обслуживания логируются, что позволяет диагностировать их работу, находить узкие места и делать более гибкие настройки обслуживания. @@ -675,3 +680,154 @@ GO - **CreatedDate** - дата обнаружения проблемы. При обнаружении проблемы будет вызвана системная процедура **[FREESYSTEMCACHE(<ИмяБазы>)](https://learn.microsoft.com/ru-ru/sql/t-sql/database-console-commands/dbcc-freesystemcache-transact-sql?view=sql-server-ver16)**. + + +### Бэкапирование + +Для упрощения решения некоторых задач с бэкапированием, сделана оберточная процедура для упрощенного вызова формирования бэкапов всех типов (полный, разностный или лога транзакций) со всеми доступными опциями для формирования бэкапов. + +Ниже несколько примеров использования данной процедуры. + +#### Формирование бэкапов + +Ниже самый просто пример формирования бэкапа с указанием минимального количества параметров. + +```sql +-- Формирование полного бэкапа +EXECUTE [SQLServerMaintenance].[dbo].[sp_BackupDatabase] + -- Имя базы данных. Обязательный параметр. + @databaseName = 'FIASToolSetService_Prod' + -- Каталог для хранения бэкапов. Обязательный параметр. + ,@backupDirectory = 'C:\Backup' + -- Тип бэкапа. Обязательный параметр. + -- Возможные значения: + -- * FULL - полный бэкап + -- * DIFF - разностный бэкап + -- * TRN - бэкап лога транзакций + ,@backupType = 'FULL' + +-- Разностного +EXECUTE [SQLServerMaintenance].[dbo].[sp_BackupDatabase] + @databaseName = 'FIASToolSetService_Prod' + ,@backupDirectory = 'C:\Backup' + ,@backupType = 'DIFF' + +-- Лога транзакций +EXECUTE [SQLServerMaintenance].[dbo].[sp_BackupDatabase] + @databaseName = 'FIASToolSetService_Prod' + ,@backupDirectory = 'C:\Backup' + ,@backupType = 'TRN' +``` + +В результате будет создан каталог **C:\Backup\FIASToolSetService_Prod** с файлом полгого бэкапа вида **FIASToolSetService_Prod_backup_2023_08_31_231757_917514.bak**. + +Также есть более гибкие возможности настройки формирования бэкапа. В листинге ниже приведены все возможности процедуры. + +```sql +EXECUTE [SQLServerMaintenance].[dbo].[sp_BackupDatabase] + -- Имя базы данных. Обязательный параметр. + @databaseName = 'FIASToolSetService_Prod' + -- Каталог для хранения бэкапов. Обязательный параметр. + ,@backupDirectory = 'C:\Backup' + -- Тип бэкапа. Обязательный параметр. + -- Возможные значения: + -- * FULL - полный бэкап + -- * DIFF - разностный бэкап + -- * TRN - бэкап лога транзакций + ,@backupType = 'FULL' + -- Использовать подкаталоги для каждой базы данных. + -- Не обязательный параметр, по умолчанию используется. + ,@useSubdirectory = 1 + -- Использование сжатия бэкапов. Не обязательный параметр. + -- Возможные значения: + -- AUTO - использовать глобальную настройку на сервере. Значение по умолчанию. + -- ENABLE - использовать сжатие. + -- DISABLE - НЕ использовать сжатие. + ,@backupCompressionType = 'ENABLE' + -- Режим только копирования. Не обязательный. По умолчанию выключен. Не обязательный параметр. + -- В даном режиме формирование бэкапа не будет влиять на цепочку транзакций. + ,@copyOnly = 0 + -- Сформировать контрольную сумму. По умолчанию выключен. Не обязательный параметр. + ,@checksum = 0 + -- Продолжить при возникновении ошибок. По умолчанию выключен. Не обязательный параметр. + ,@continiueOnError = 0 + -- Проверять бэкап после формирования. По умолчаниювыключен. Не обязательный параметр. + ,@verify = 1 + -- Только показать текст скрипта для формирования бэкапа. + -- Сам бэкап при этом сформирован не будет. + ,@showScriptOnly = 1 + + -- Параметры для управления потоком резервного копирования. + -- Могут использоваться для оптимизации времени формирования бэкапа, + -- но со значительным влиянием на работу ситсемы ввода-вывода. + -- Подробнее можете прочитать здесь: + -- https://www.mssqltips.com/sqlservertip/4935/optimize-sql-server-database-restore-performance/ + --,@blockSize + --,@maxTransferSize + --,@bufferCount +``` + +Практически все параметры дублируют настройки, которые присутствуют в стандартных планах обслуживания SQL Server. + +#### Очистка бэкапов + +Также для целей управления бэкапами добавлена процедура очистки устаревших файлов бэкапов. + +Ниже примеры использования процедуры с описанием параметров. + +```sql +EXECUTE [dbo].[sp_ClearFiles] + -- Каталог для очистки. Обязательный параметр. + @folderPath = 'C:\Backup' + -- Расширение файлов для удаления. Обязательный параметр. + ,@fileExtension = 'bak' + -- Количество дней хранения файлов. Не обязательный параметр. + -- По умолчанию будут считаться устаревшими все файлы. + ,@cutoffDateDays = 28 +``` + +В данном случае будут удалены файлы полных бэкапов ***.bak** старше 30 дней. Это же можно достичь, указав явно дату, до которой файлы бэкапов будут считаться устаревшими. + +```sql +DECLARE @cutoffDate datetime = DATEADD(week, -4, GETDATE()); +EXECUTE [dbo].[sp_ClearFiles] + -- Каталог для очистки. Обязательный параметр. + @folderPath = 'C:\Backup' + -- Расширение файлов для удаления. Обязательный параметр. + ,@fileExtension = 'bak' + -- Дата, до которой файлы считаются устарешвими. + -- Не обязательный параметр. По умолчанию - текущая дата. + -- Если не заполнить, то удалятся все файлы без анализа даты создания. + ,@cutoffDate = @cutoffDate +``` + +Вот полный синтаксис данной процедуры. + +```sql +DECLARE @cutoffDate datetime = DATEADD(week, -4, GETDATE()); +EXECUTE [dbo].[sp_ClearFiles] + -- Каталог для очистки. Обязательный параметр. + @folderPath = 'C:\Backup' + -- Расширение файлов для удаления. Обязательный параметр. + ,@fileExtension = 'bak' + -- Количество дней хранения файлов. Не обязательный параметр. + -- По умолчанию будут считаться устаревшими все файлы. + -- Одновремено можно указать либо @cutoffDateDays, либо @cutoffDate. + ,@cutoffDateDays = 28 + -- Дата, до которой файлы считаются устарешвими. + -- Не обязательный параметр. По умолчанию - текущая дата. + -- Если не заполнить, то удалятся все файлы без анализа даты создания. + -- Одновремено можно указать либо @cutoffDateDays, либо @cutoffDate. + ,@cutoffDate = @cutoffDate + -- Использовать для очистки подкаталоги первого уровня. + -- По умолчанию включен. Не обязательный параметр. + ,@includeSubfolders=1 + -- Только показать скрипт для удаления файлов. + ,@scriptOnly = 1, + -- Типы удаляемых файлов. + -- Есть вариант для файлов бэкапов (0, используется по умолчанию), + -- либо файлы логов задания обслуживания (1). + @fileType = 0 +``` + +Почти все параметры дублируют стандартную задачу очистки SQL Server. \ No newline at end of file