Estoy trabajando en un gran proyecto ETL y DW donde utilizamos TFS / control de fuente junto con SSIS y SSDT.
Hoy, descubrí que si bien un paquete SSIS está realizando una INSERCIÓN A GRANEL en una tabla de base de datos, no es posible realizar una Comparación de esquema SSDT con esa base de datos. Esto es lamentable, ya que algunos de nuestros paquetes tardan bastante tiempo en completarse. Queremos usar la función Comparar esquemas para detectar cambios en la estructura de la base de datos para guardarlos en nuestro proyecto SSDT para el control de versiones de la base de datos.
Mirando un poco más sobre esto, descubrí que la función Comparar esquemas en SSDT ejecuta un script SQL que llama a la OBJECTPROPERTY()
función del sistema en las tablas de la base de datos. Específicamente en mi caso, cualquier llamada a OBJECTPROPERTY(<object_id>, N'IsEncrypted')
parece estar bloqueada, cuando se <object_id>
refiere a una tabla que actualmente se está insertando en masa.
En Visual Studio, SSDT Schema Compare simplemente agota el tiempo de espera después de un tiempo y afirma que no se han detectado diferencias.
¿Hay alguna solución a este problema en SSDT, o tal vez debería intentar presentar un informe de error de MS Connect?
Alternativamente, dado que BULK INSERT ocurre desde un paquete SSIS, ¿hay alguna forma de hacer esta inserción sin bloquear las OBJECTPROPERTY
llamadas en la tabla? Editar: en SSIS OLE DB Destinations, podemos eliminar la marca de verificación de "Tabla de bloqueo", que hace lo que dice, pero esto puede afectar el rendimiento en algunas situaciones. Estoy mucho más interesado en una solución que permita que SSDT Schema Compare haga su trabajo, incluso si algunos objetos están bloqueados.
fuente
Respuestas:
La
OBJECTPROPERTY
llamada requiere un bloqueo de estabilidad de esquema (Sch-S), que solo es incompatible con un bloqueo de modificación de esquema (Sch-M).El
BULK INSERT
tomará una cerradura Sch-M en algunas circunstancias. Estos se enumeran en la sección "Bloqueo y registro de tablas durante la importación masiva" de las Directrices para optimizar la importación masiva en libros en línea:Si la tabla de destino está agrupada, puede ser útil habilitar la marca de seguimiento 610 . Lea la serie completa de esas publicaciones y la Guía de rendimiento de carga de datos y pruebe a fondo si decide seguir esta ruta.
No tengo idea de por qué SSDT comprueba la
IsEncrypted
propiedad en busca de tablas. No puedo imaginar un escenario en el que tenga sentido, pero esa es una pregunta para las personas SSDT.fuente