2016-10-28 12 views
0

Итак, у меня есть инструмент автоматизации, который использует C# для вызова сценария Powershell, который будет использовать sqlpackage.exe для извлечения базы данных на удаленном сервере в .dacpac и сохранить его в моей файловой системе.Сообщение об ошибке «Не удается получить доступ к закрытому потоку» при попытке извлечь базу данных с помощью sqlpackage.exe с powershell

Мы используем асинхронные вызовы процесса/конвейера powershell для получения текущего результата выполнения сценария и вывода их на экран для пользователя. Этот инструмент отлично справляется с возрастом, но внезапно останавливается на полпути процесса извлечения и выдает следующее сообщение об ошибке «Ошибка извлечения базы данных: не удалось экспортировать схему и данные из базы данных. Не получить доступ к закрытому потоку». На данный момент я понятия не имею, что заставляет поток перегружаться, и процесс извлечения внезапно прекращается.

Просто интересно, кто-нибудь испытал что-либо подобное или кто-нибудь может порекомендовать некоторые шаги для отладки этой ошибки?

Вот часть моего сценария, выполняющее извлечение:

sqlpackage ` 
     /action:extract ` 
     /SourceConnectionString:"$endpoint" ` 
     /TargetFile:"$dacPacFile" ` 
     /p:ExtractAllTableData=True ` 
     /p:ExtractReferencedServerScopedElements=False ` 
     /p:IgnoreUserLoginMappings=True 
+0

Я гуглом ошибки, и [это ] (https://social.msdn.microsoft.com/Forums/sqlserver/en-US/4da7fd2a-6867-4dd4-945a-b277cb8d516f/dacservicesexportbacpac-fails-repeatedly-for-a-single-azure-database-exception- can-not-access-a? forum = ssdt) предполагает, что это вызвано заполнением диска. Неужели? – TessellatingHeckler

+0

Хм кажется, что у ОП была такая же проблема, как у меня, но в его потоке не было разрешения. Я убедился, что это не проблема с дисковым пространством, и проверил все упомянутые каталоги –

ответ

0

«не может получить доступ к закрытому потоку» сообщения об ошибке может, к сожалению, заслонить реальную проблему. Вы можете включить трассировку SqlPackage, которая будет записывать все ошибки в файл ETL, который можно открыть с помощью средства просмотра событий. Шаги для сбора журнала событий являются:

  • Открыть новую командную строку с правами администратора и выполните следующую команду: лесоруб создать трассировку -n DacFxDebug -p «Microsoft-SQLServerDataTools» 0x800 -o «% LOCALAPPDATA% \ DacFxDebug.etl "-ets
  • Теперь регистрация включена, поэтому повторите операцию, воспроизведя проблему.
  • Отключить ведение журнала, вернувшись в командную строку и выполните следующую команду: LogMan остановить DacFxDebug -ets
  • Полученный файл ETL будет находиться в% LOCALAPPDATA% \ DacFxDebug.etl.
  • DacFxDebug.etl можно открыть с помощью средства просмотра событий в открытом сохраненном журнале ... кнопка
-1

я считаю, что это происходит из-за обновления вопроса, чтобы я перед аналогичной проблемой

 Смежные вопросы

  • Нет связанных вопросов^_^