Estou trabalhando em um grande projeto ETL e DW, onde usamos o controle de fonte / TFS junto com o SSIS e o SSDT.
Hoje, descobri que, enquanto um pacote SSIS está executando um BULK INSERT em uma tabela de banco de dados, não é possível executar uma comparação de esquema SSDT nesse banco de dados. Isso é lamentável, pois alguns de nossos pacotes levam muito tempo para serem concluídos. Queremos usar a função Comparar esquema para detectar alterações na estrutura do banco de dados, a fim de salvá-las em nosso projeto SSDT para controle de versão do banco de dados.
Examinando um pouco mais isso, descobri que a função Comparação de Esquema no SSDT executa um script SQL que chama a OBJECTPROPERTY()
função do sistema nas tabelas no banco de dados. Especificamente no meu caso, qualquer chamada para OBJECTPROPERTY(<object_id>, N'IsEncrypted')
parece bloqueada, quando <object_id>
se refere a uma tabela que está sendo inserida em massa no momento.
No Visual Studio, o SSDT Schema Compare simplesmente excede o tempo limite e alega que nenhuma diferença foi detectada.
Existe uma solução alternativa para esse problema no SSDT ou devo tentar arquivar um relatório de bug do MS Connect?
Como alternativa, como o BULK INSERT ocorre a partir de um pacote SSIS, existe alguma maneira de fazer essa inserção sem bloquear as OBJECTPROPERTY
chamadas na tabela? Edit: Nos destinos SSIS OLE DB, podemos remover a marca de seleção de "Lock Table", que faz o que diz, mas isso pode prejudicar o desempenho em algumas situações. Estou muito mais interessado em uma solução que permita que o SSDT Schema Compare faça seu trabalho, mesmo que alguns objetos estejam bloqueados.