Пакет SSIS не работает на file.delete задачи скрипта

У меня есть пакет SSIS , zip.dtsx. Этот пакет успешно работает на сервере А. Я скопировал этот пакет в serverB. Однако, когда я пытаюсь запустить zip.dtsx на сервере, он терпит неудачу.

zip.dtsx просто считывает файл в исходной папке, сжимает его, сохраняет сжатый файл в другую папку, а затем удаляет исходный файл в исходной папке.

После некоторого расследования я понял, что если я прокомментирую часть в задаче сценария C #, которая удалит файл в исходной папке. Пакет успешно завершен.

Мне нужно удалить файл в исходной папке. В противном случае этот файл будет просто повторно загружен в базу данных. Я уже добавил ссылки на задания скриптов, как это предлагается здесь , но все же я не могу сделать file.delete успешно запущен.

 public void Main() { String sourcePath = Convert.ToString(Dts.Variables["SourcePath"].Value); String namePart = Convert.ToString(Dts.Variables["NamePart"].Value); String destinationPath = Convert.ToString(Dts.Variables["DestinationPath"].Value); FileStream sourceFile = File.OpenRead(@sourcePath + namePart); FileStream destFile = File.Create(@destinationPath + namePart); GZipStream compStream = new GZipStream(destFile, CompressionMode.Compress); try { int theByte = sourceFile.ReadByte(); while (theByte != -1) { compStream.WriteByte((byte)theByte); theByte = sourceFile.ReadByte(); } } finally { compStream.Dispose(); sourceFile.Close(); destFile.Close(); File.Delete(@sourcePath + namePart); } Dts.TaskResult = (int)ScriptResults.Success; } 

ОБНОВИТЬ:

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

  String sourcePath = Convert.ToString(Dts.Variables["SourcePath"].Value); String namePart = Convert.ToString(Dts.Variables["NamePart"].Value); String destinationPath = Convert.ToString(Dts.Variables["DestinationPath"].Value); FileStream sourceFile = File.OpenRead(@sourcePath + namePart); FileStream destFile = File.Create(@destinationPath + namePart); GZipStream compStream = new GZipStream(destFile, CompressionMode.Compress); try { int theByte = sourceFile.ReadByte(); while (theByte != -1) { compStream.WriteByte((byte)theByte); theByte = sourceFile.ReadByte(); } } finally { compStream.Dispose(); sourceFile.Close(); destFile.Close(); FileInfo currFileInfo = new FileInfo(@sourcePath + namePart); currFileInfo.Delete(); 

Я, наконец, понял это.

Чтобы объяснить всю ситуацию, у нас есть полностью запущенный sqlserver, serverA. Мы хотим дублировать это на сервере Б, чтобы мы могли иметь тестовую среду на сервере. Необходимые базы данных уже восстановлены на сервере, все остальное – пакеты SSIS и рабочие места агента SQL Server.

Основной пакет (main.dtsx) , загружающий содержимое файлов в БД, терпел неудачу.

Из каталога служб интеграции -> Папка каталога -> щелкните правой кнопкой мыши -> Отчеты -> Все казни, я узнал, что он не работает на Zip.dtsx, который вызывается из main.dtsx. Zip.dtsx, который сжимает доступ к файлу, архивирует его и удаляет из исходной папки.

После игры со сценарием в Zip.dtsx (идея, полученная от комментариев Kannan Kandasamy ), я понял, что она находится в части File.delete() где моя задача скрипта завершается с ошибкой. Мгновенно, можно подумать, что это проблема с разрешением.

Моя первая ошибка заключается в том, что я продолжал играть в своей скриптовой задаче при выполнении Zip.dtsx, щелкнув правой кнопкой мыши -> выполнить задачу в Visual Studio. Я все время получал ошибку выполнения во время предыдущей записи, не понимая, что получаю ее, потому что я использую переменную пакета, переданную main.dtsx в zip.dtsx. Я повесил трубку, пока не понял, почему задача сценария выполняется успешно, когда я заменяю переменные моими жестко заданными именами.

Моя вторая ошибка заключалась в замене переменной пакета Zip.dtsx на мои жестко закодированные пути. До тех пор, пока, наконец, я не понял, что папка, доступная по Zip.dtsx, является локальной папкой на сервереB, и я запускаю задания агента SQL-сервера на своей локальной машине , скажем, machineA. Итак, я поделил локальные папки serverB с учетной записью пользователя. По какой-то причине это сильно испортило мой пакет, что он больше не видит файлы в папке, поэтому мой пакет успешно работает, потому что он обнаруживает, что папка пуста.

Основное решение:

Я изменил изменения, внесенные в Zip.dtsx, и удалил общий доступ к локальным папкам сервераB в свою учетную запись пользователя и вместо этого добавил экземпляр NT Service \ SQL $, чтобы иметь полный контроль над исходной папкой, где задача сценария удаляет файлы. См. Эту ссылку, чтобы узнать, как добавить экземпляр SQLServer $ Instance в параметры разрешения папки.

Другие проблемы, с которыми я столкнулся:

  1. При передаче пакетов с разных серверов и сбоев пакетов я думаю, что это также важно . Я также сделал этот шаг. Но в serverB я не смог найти Microsoft.SQLServer.ManagedDTS.dll. Я сделал это, я скопировал эту dll от serverA к серверуB . Также проверьте свой системный путь, чтобы узнать, какую версию инструментов Microsoft SQL Server вы используете по умолчанию, и убедитесь, что это то, что вы указываете в задаче скрипта.

  2. В какой-то момент времени, исследуя, я столкнулся с ошибкой при просмотре отчета об исполнении всех служб Integration Services . Я решил это, перейдя в папку C: \ Temp . Когда я дважды щелкнул по нему, чтобы открыть его, появилось диалоговое окно, в котором у меня нет доступа. Я продолжил, нажав кнопку «продолжить» в диалоговом окне. После этого все отчеты об исполнении снова запускаются. Ошибка, полученная от SSMS,

TITLE: Microsoft SQL Server Management Studio

Произошла ошибка при обработке локального отчета. (Microsoft.ReportViewer.WinForms)

—————————— ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Определение отчета «недействительно». (Microsoft.ReportViewer.Common)


При компиляции выражений произошла непредвиденная ошибка. Исходное значение возвращаемого компилятора: '[BC2001] файл' C: \ Windows \ TEMP \ mpgc21o3.0.vb 'не найден.'. (Microsoft.ReportViewer.Common)

—————————— КНОПКИ:

ОК

Я не уверен, сколько из этого действительно имело значение для моего случая, но я делюсь с ним, если кто-то прошел через ту же проблему. Я новичок в MS SQL Server, поэтому я думаю, что это может помочь кому-то, кто тоже новичок, как я.

  • Отладчик Visual Studio 2015 - высокая производительность для SqlCommand
  • изменение двух элементов dropdownlists из таблицы sql, но оба имеют одинаковое выбранное значение
  • Указанное сетевое имя больше не доступно при подключении к SQL Server в .NET.
  • Можно ли игнорировать NOT FOR REPLICATION в сравнении Schema Visual Studio?
  • Как создать диаграмму базы данных для SQL Server в Visual Studio 2015?
  • Избегайте несоответствия схемы в таблицах с системной версией
  • Сравнение версий Visual Studio 2015 2 и Sql Server 2016
  • Изменение версии MSSqlLocalDB по умолчанию для Visual Studio 2015
  • Проект VS SQL Server Database (SSDT) ​​сравнивает схему проекта с базой данных со связанной переменной сервера / сервера
  • SQL вставляет многоуровневые записи на основе значения в форме VB
  • Целевая платформа проекта Visual Studio Database в профиле публикации
  • Давайте будем гением компьютера.