Мы все сталкивались с необходимостью или желанием очистить старые неактуальные файлы из файловой системы, будь то удаление старых файлов резервных копий или плоских файлов, созданных из одного процесса или другого. И исходя из этой потребности/желания, мы все придумали метод, чтобы помочь достичь этой цели. Некоторые из методов могут включать флаг в плане обслуживания, который может быть использован. Другие методы могут использовать SQL-скрипт с использованием xp_cmdshell и операторов удаления. Еще один может использовать хранимые процедуры sp_oa и DMO. И все же другие могли попробовать PowerShell, чтобы выполнить ту же задачу. Суть в том, что методов много.
В этой статье мы рассмотрим еще один метод поддержки файловой системы с использованием SQL Server Integration Services (SSIS). SSIS – это мощный инструмент, который позволяет создавать пакеты для выполнения различных задач по интеграции и преобразованию данных. Он предоставляет визуальный интерфейс для проектирования рабочих процессов и задач, что упрощает управление и поддержку сложных процессов.
Требования
Используемый метод должен иметь возможность выполнить следующее:
- Удаление нескольких типов файлов
- Быть настраиваемым
- Очищать файлы из нескольких каталогов
- Удалять файлы, старше определенного количества дней
Настройка
Решение использует SSIS и требует таблицы в базе данных для управления пакетом. Таблица должна иметь следующую структуру:
USE [AdminDB_Test] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[FilePaths]') AND type in (N'U')) DROP TABLE [dbo].[FilePaths] GO USE [AdminDB_Test] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[FilePaths]( [PathID] [int] IDENTITY(1,1) NOT NULL, [Process] [varchar](32) NULL, [FilePath] [varchar](256) NULL, CONSTRAINT [PK_FilePaths] PRIMARY KEY CLUSTERED ( [PathID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO
Таблица “FilePaths” содержит путь файловой системы для каждого каталога, который нужно очистить. Столбец “Process” описывает, к чему относится этот путь, например, “MaintainDirectory”.
Пакет
Созданный в SSIS 2008 пакет состоит из следующих объектов:
- ADO.Net источник данных
- 2 задачи выполнения SQL
- 2 контейнера цикла ForEach
- Задача сценария
- 8 переменных
Используемые переменные в пакете:
- SQLServerName – Значение, хранящееся здесь, используется в выражении для источника данных.
- DatabaseName – Используется вместе с переменной SQLServerName в выражении для источника данных.
- DaysToKeep – Это значение является точкой отсечения для того, какие файлы нужно сохранить, а какие файлы будут удалены.
- obj_FileExtension – Эта объектная переменная используется для хранения набора результатов из одной из задач выполнения SQL и результатов функции разделения строки из переменной FileExtensionList.
- FileExtensionList – Это разделенный список расширений файлов, которые нужно оценить для удаления.
- FileExtension – Используется в одном из контейнеров цикла ForEach. Эта переменная будет получать расширение файла из переменной obj_FileExtension по одному.
- obj_ListOfDirectories – Эта переменная будет получать набор результатов задачи выполнения SQL, который позже будет использоваться одним из контейнеров цикла ForEach.
- DirectoryToMaintain – По одному получает каталог для обработки удаления файлов. Контейнер цикла ForEach сохраняет значение из obj_ListOfDirectories в эту переменную для обработки.
Пакет также включает две задачи выполнения SQL, одну для получения списка каталогов для поддержки из таблицы FilePaths, и другую для разделения строки для переменной FileExtensionList.
Пакет также включает два контейнера цикла ForEach. Первый работает с переменной/массивом obj_ListOfDirectories, а второй обрабатывает расширения файлов, перечисленные в переменной FileExtensionList.
Пакет также включает задачу сценария, где выполняется фактическое удаление файлов. Сценарий сравнивает LastWriteTime каждого файла с переменной PurgeDays и удаляет файл, если он соответствует критериям.
После создания пакета его можно запланировать с помощью SQL Agent для автоматического выполнения в указанные интервалы. Переменные можно настроить либо внутри пакета, либо передать через задание для перезаписи переменных при выполнении задания.
Заключение
В этой статье мы рассмотрели, как использовать SSIS для поддержки файловой системы в SQL Server. SSIS предоставляет мощный и гибкий способ автоматизации задач по очистке файлов, позволяя удалять старые неактуальные файлы из нескольких каталогов на основе настраиваемых критериев. Используя SSIS, вы можете оптимизировать процесс обслуживания файлов и обеспечить организованность и свободу от беспорядка в файловой системе.