Published on

December 4, 2018

Использование SSIS для поддержки файловой системы

Мы все сталкивались с необходимостью или желанием очистить старые неактуальные файлы из файловой системы, будь то удаление старых файлов резервных копий или плоских файлов, созданных из одного процесса или другого. И исходя из этой потребности/желания, мы все придумали метод, чтобы помочь достичь этой цели. Некоторые из методов могут включать флаг в плане обслуживания, который может быть использован. Другие методы могут использовать 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, вы можете оптимизировать процесс обслуживания файлов и обеспечить организованность и свободу от беспорядка в файловой системе.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.