Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

SCHEMA_BINDING

Termin Definicja
SCHEMA_BINDING

SCHEMA_BINDING wiąże obiekt z definicją tabel źródłowych, uniemożliwiając ich zmianę bez usunięcia powiązania.

SCHEMABINDING w silniku Microsoft SQL Server

SCHEMA_BINDING to określenie odnoszące się do mechanizmu SCHEMABINDING dostępnego w Microsoft SQL Server. Jest to opcja stosowana przy definiowaniu niektórych obiektów bazy danych, przede wszystkim widoków, funkcji użytkownika oraz funkcji używanych w kolumnach obliczanych. Włączenie wiązania schematu powoduje, że definicja obiektu zależnego zostaje formalnie powiązana ze strukturą obiektów, do których się odwołuje. SQL Server może wtedy kontrolować, czy zmiana tabeli, widoku albo innego elementu nie unieważni istniejącej definicji.

W praktyce schemat źródłowy nie może zostać zmieniony w sposób kolidujący z obiektem oznaczonym jako schemabound. Próba usunięcia kolumny używanej przez taki widok lub funkcję, zmiany jej typu w niedozwolony sposób albo usunięcia tabeli może zakończyć się błędem. Najpierw trzeba usunąć lub zmodyfikować obiekt zależny, a dopiero później wykonać zmianę w tabeli źródłowej. Mechanizm nie blokuje jednak każdej możliwej modyfikacji danych. Dodawanie i aktualizowanie rekordów jest czym innym niż zmiana definicji tabeli.

Jak powstaje zależność między obiektem a tabelą

Obiekt tworzony z opcją SCHEMABINDING musi spełniać wymagania narzucone przez SQL Server. Odwołania do tabel i widoków są podawane z użyciem co najmniej dwuczłonowej nazwy, obejmującej schemat i nazwę obiektu, na przykład dbo.Orders. Obiekty używane w definicji muszą znajdować się w tej samej bazie danych. SQL Server zapisuje zależność w metadanych i nie pozwala na operacje, które mogłyby pozostawić definicję bez wymaganej kolumny lub obiektu źródłowego.

Przykładowy widok może zostać zdefiniowany jako CREATE VIEW dbo.OrderSummary WITH SCHEMABINDING AS SELECT OrderID, CustomerID FROM dbo.Orders;. W takim przypadku tabela dbo.Orders nie może zostać usunięta ani zmieniona w zakresie, który narusza używane elementy. Przy obiektach przeznaczonych do indeksowania obowiązują dodatkowe ograniczenia, dotyczące między innymi deterministyczności wyrażeń, ustawień sesji oraz konstrukcji zapytania. Samo dodanie słowa SCHEMABINDING nie powoduje automatycznego utworzenia indeksu ani przyspieszenia każdego zapytania.

Skutki dla zmian, wdrożeń i zależności

Najważniejszą korzyścią jest wcześniejsze wykrywanie zmian niezgodnych z kontraktem obiektu. Bez wiązania schematu modyfikacja tabeli może spowodować, że późniejsze odwołanie do widoku lub funkcji przestanie działać. Przy schemabinding SQL Server odrzuca część takich zmian już podczas wykonywania instrukcji DDL. Ogranicza to ryzyko przypadkowego usunięcia kolumny wykorzystywanej przez raport, funkcję obliczeniową albo inny obiekt zależny.

Wiązanie schematu wpływa również na kolejność wdrażania zmian. Jeżeli konieczna jest zmiana typu kolumny, jej nazwy lub struktury tabeli, należy najpierw ustalić wszystkie zależności, a następnie zaplanować modyfikację obiektów zależnych. Pomocne są widoki katalogowe takie jak sys.sql_expression_dependencies, sys.views, sys.objects i sys.sql_modules. Warto odróżnić zależność zapisaną w metadanych od zwykłego tekstowego wystąpienia nazwy tabeli w kodzie procedury, ponieważ nie każda relacja między obiektami jest wykrywana w ten sam sposób.

Rozpoznawanie problemu z SCHEMA_BINDING

Podczas diagnostyki należy sprawdzić dokładną definicję obiektu, jego schemat właściciela oraz wszystkie używane tabele, widoki i funkcje. Nieprawidłowość może wynikać z próby zmiany kolumny zablokowanej przez zależny widok, z użycia nazwy jedno-członowej albo z przeniesienia obiektu do innej bazy danych. Błąd może pojawić się także podczas wdrażania skryptu, gdy skrypt zakłada kolejność odwrotną do wymaganej przez zależności. Pomocne jest odczytanie treści definicji przez OBJECT_DEFINITION lub sprawdzenie jej w sys.sql_modules.

Naprawa powinna polegać na świadomym uporządkowaniu zależności, a nie na przypadkowym usuwaniu blokady. Najpierw należy ustalić, czy obiekt rzeczywiście musi zachować ochronę schematu. Jeżeli tak, trzeba dostosować zmianę tabeli do istniejącej definicji albo zmienić obiekt zależny w kontrolowanym wdrożeniu. Jeżeli wiązanie jest już nieaktualne, można usunąć i odtworzyć obiekt z poprawną definicją, po wcześniejszym sprawdzeniu zapytań, indeksów i zależnych elementów aplikacji. SCHEMA_BINDING opisuje więc kontrolę struktury obiektów SQL Server, a nie mechanizm ochrony samych rekordów.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę