Published on

April 4, 2010

Автоматизация удаления файлов с помощью SSIS в SQL Server

Как администратор баз данных, у нас часто возникают задачи, выходящие за рамки традиционного управления базами данных. Одна из таких задач – управление файлами, используемыми пакетами SSIS и DTS. В этой статье мы узнаем, как создать процесс, основанный на таблице, с использованием задач SSIS для поиска и удаления файлов, которые достигли заданного порога хранения.

Настройка таблицы

Вместо жесткого кодирования данных, необходимых для этой задачи внутри пакета SSIS, мы можем создать таблицу для хранения необходимой информации. Эта таблица будет использоваться для заполнения свойств других задач. Вот пример структуры таблицы:

CREATE TABLE [dbo].[fileSweeper](
   [filePath] [varchar](200) NOT NULL,
   [pattern] [varchar](50) NOT NULL,
   [daysToKeep] [int] NOT NULL,
   [includeSubFolders] [bit] NULL CONSTRAINT [DF_fileSweeper_includeSubFolders] DEFAULT ((0))
) ON [PRIMARY]

Таблица имеет четыре столбца:

  • filePath: Содержит путь UNC или локальный путь к папке для файла или папки, содержащей файлы, которые нужно удалить.
  • pattern: Содержит имя файла или шаблон, используемый для поиска файла для удаления. Это позволяет выбирать несколько файлов для удаления.
  • daysToKeep: Содержит продолжительность времени (в днях), в течение которого файл должен быть сохранен перед удалением.
  • includeSubFolders: Определяет, должен ли процесс SSIS искать файлы для удаления в подпапках.

Создание задачи SSIS

Прежде чем мы начнем создавать задачи, нам нужно настроить некоторые переменные, с которыми мы будем работать на протяжении всего процесса. Мы создадим пять переменных, по одной для каждого поля в базе данных и одну для хранения результирующего набора данных после его извлечения из базы данных.

Следующим шагом является создание задачи EXECUTE SQL TASK, которая будет извлекать информацию из нашей таблицы. Эта задача выполнит SQL-запрос для извлечения данных. Затем мы сохраним результирующий набор данных в переменную. Вот пример SQL-запроса:

SELECT filePath, pattern, daysToKeep, includeSubFolders
FROM dbo.fileSweeper

После того, как у нас есть данные в переменной, мы можем использовать задачу FOREACH LOOP TASK для перебора данных и присвоения каждого столбца своей собственной переменной. Это позволит нам использовать данные позже в процессе удаления файлов.

Затем мы создаем еще одну задачу FOREACH LOOP TASK для поиска файлов, которые соответствуют критериям для удаления. Эта задача будет искать файлы внутри папок, указанных в базе данных. Мы присвоим переменные из предыдущей задачи FOREACH LOOP TASK свойствам этой новой задачи.

Наконец, мы добавляем задачу SCRIPT TASK внутри внутренней задачи FOREACH LOOP TASK для написания некоторого кода. Этот код будет определять, соответствует ли файл критериям для удаления на основе его даты создания. Если файл достаточно старый, он будет удален.

Заключение

Используя предопределенные задачи и несколько строк кода, мы создали процесс, который может автоматически искать и удалять файлы, которые соответствуют определенным критериям. Подход, основанный на таблице, позволяет легко изменять процесс без необходимости изменения самого пакета SSIS. Однако важно убедиться, что служба SQL Server Agent, выполняющая процесс, имеет доступ к сетевой папке для удаления файлов.

С помощью 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.