Pracuję w dużym projekcie ETL i DW, w którym używamy kontroli TFS / źródła razem z SSIS i SSDT.
Dzisiaj dowiedziałem się, że chociaż pakiet SSIS wykonuje BULK INSERT w tabeli bazy danych, nie można wykonać porównania schematu SSDT z tą bazą danych. Jest to niefortunne, ponieważ niektóre z naszych pakietów zajmują dość dużo czasu. Chcemy użyć funkcji porównywania schematów do wykrywania zmian w strukturze bazy danych w celu zapisania ich w naszym projekcie SSDT w celu kontroli wersji bazy danych.
Przyglądając się trochę temu, odkryłem, że funkcja porównywania schematów w SSDT wykonuje skrypt SQL, który wywołuje funkcję OBJECTPROPERTY()
systemową na tabelach w bazie danych. W szczególności w moim przypadku wszelkie wywołania do OBJECTPROPERTY(<object_id>, N'IsEncrypted')
wydają się być zablokowane, gdy <object_id>
odnoszą się do tabeli, która jest obecnie wstawiana zbiorczo.
W programie Visual Studio porównanie schematów SSDT po prostu wygasa po chwili i twierdzi, że nie wykryto żadnych różnic.
Czy istnieje obejście tego problemu w SSDT, czy może powinienem spróbować zgłosić raport o błędzie MS Connect?
Alternatywnie, skoro BULK INSERT odbywa się z pakietu SSIS, to może jest jakiś sposób na wykonanie tego wstawiania bez blokowania OBJECTPROPERTY
wywołań na stole? Edycja: W miejscach docelowych SSIS OLE DB możemy usunąć znacznik wyboru z „Zablokuj tabelę”, co robi, co mówi, ale w niektórych sytuacjach może to pogorszyć wydajność. Bardziej interesuje mnie rozwiązanie, które pozwala porównywać schemat SSDT, nawet jeśli niektóre obiekty są zablokowane.
źródło
Odpowiedzi:
OBJECTPROPERTY
Połączenia wymaga stabilność schematu (SCH-S) zamka, który jest tylko niezgodne z modyfikacją schematu (SCH-M) zamka.W
BULK INSERT
niektórych okolicznościach zabierze zamek Sch-M. Są one wymienione w sekcji „Blokowanie tabel i rejestrowanie podczas masowego importu” w Wytycznych dotyczących optymalizacji masowego importu w książkach online:Jeśli tabela docelowa jest klastrowana, pomocne może być włączenie flagi śledzenia 610 . Zapoznaj się z całą serią tych postów i Przewodnikiem wydajności ładowania danych i dokładnie przetestuj, jeśli zdecydujesz się wybrać tę trasę.
Nie mam pojęcia, dlaczego SSDT sprawdza
IsEncrypted
właściwość pod kątem tabel. Nie wyobrażam sobie scenariusza, w którym ma to sens, ale jest to pytanie do ludzi z SSDT.źródło