Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2022 (16.x) i nowsze wersje
usługi Azure SQL Database
Azure SQL Managed Instance
Istnieje kilka zagadnień i ograniczeń, które należy wziąć pod uwagę podczas pracy z tabelami rejestru ze względu na charakter przechowywania wersji systemu i niezmiennych danych.
Ogólne zagadnienia i ograniczenia
Podczas pracy z rejestrem należy wziąć pod uwagę następujące kwestie.
- Nie można przekonwertować bazy danych rejestru, która ma włączoną właściwość rejestru, na zwykłą bazę danych, z wyłączoną właściwością rejestru.
- Automatyczne generowanie i przechowywanie skrótów bazy danych jest obecnie dostępne w usłudze Azure SQL Database, ale nie jest obsługiwane w programie SQL Server.
- Automatyczne zarządzanie wyciągami z tabel księgi przy użyciu niezmiennych obiektów blokowych Azure Storage nie oferuje użytkownikom możliwości korzystania z kont magazynu lokalnie nadmiarowego (LRS).
- Po utworzeniu bazy danych rejestru wszystkie nowe tabele utworzone domyślnie (bez określania
APPEND_ONLY = ONklauzuli) w bazie danych będą tabelami rejestru, które można aktualizować. Aby utworzyć tabele księgi w trybie tylko do dołączania, użyjAPPEND_ONLY = ONklauzuli w instrukcjach CREATE TABLE (Transact-SQL). - Transakcja może aktualizować maksymalnie 200 tabel rejestru.
Zagadnienia i ograniczenia dotyczące tabeli rejestru
- Istniejące tabele w bazie danych, które nie są tabelami rejestru, nie można przekonwertować na tabele rejestru. Aby uzyskać więcej informacji, zobacz Migrowanie danych z zwykłych tabel do tabel rejestru.
- Po utworzeniu tabeli rejestru nie można jej przywrócić do tabeli, która nie jest tabelą rejestru.
- Usuwanie starszych danych w tabelach rejestru tylko do dołączania lub w tabeli historii tabel rejestru z możliwością aktualizacji nie jest obsługiwane.
-
TRUNCATE TABLEnie jest obsługiwany. - Po utworzeniu tabeli rejestru, którą można aktualizować , dodaje cztery kolumny GENERATED ALWAYS do tabeli rejestru. Tabela rejestru z możliwością tylko dołączania dodaje dwie kolumny do tabeli rejestru. Te nowe kolumny są liczone względem maksymalnej obsługiwanej liczby kolumn w usłudze Azure SQL Database (1024).
- Tabele w pamięci nie są obsługiwane.
- Zestawy kolumn rozrzednych nie są obsługiwane.
- Partycja SWITCH IN/OUT nie jest obsługiwana.
- Baza danych DBCC CLONEDATABASE nie jest obsługiwana.
- Tabele rejestru nie mogą mieć indeksów pełnotekstowych.
- Tabele rejestru nie mogą być tabelami grafów.
- Tabele rejestru nie mogą być tabelami FileTable.
- Tabele rejestru nie mogą mieć indeksu nieklastrowanego magazynu wierszy, gdy mają indeks klastrowany magazynu kolumn.
- Śledzenie zmian nie jest dozwolone w tabeli historii, ale jest dozwolone w tabelach rejestru.
- Przechwytywanie zmian danych nie jest dozwolone w tabeli historii, ale jest dozwolone w tabelach rejestru.
- Replikacja transakcyjna nie jest obsługiwana w przypadku tabel rejestru.
- Dublowanie bazy danych nie jest obsługiwane.
- Usługa Azure Synapse Link jest obsługiwana, ale tylko dla tabeli rejestru, a nie tabeli historii.
- Zmień ścieżkę skrótu ręcznie po natywnym przywróceniu kopii zapasowej bazy danych do usługi Azure SQL Managed Instance.
- Ręcznie zmień ścieżkę skrótu po utworzeniu linku wystąpienia zarządzanego do usługi Azure SQL Managed Instance.
- Usługa SQL Data Sync nie jest obsługiwana w przypadku tabel rejestru.
Nieobsługiwane typy danych
- XML
- SqlVariant
- Typ danych zdefiniowany przez użytkownika
- FILESTREAM
- Wektor
Ograniczenia tabeli czasowej
Tabele rejestru z możliwością aktualizowania są oparte na technologii tabel czasowych i dziedziczą większość ograniczeń , ale nie wszystkie z nich. Poniżej znajduje się lista ograniczeń dziedziczona po tabelach czasowych.
- Jeśli nazwa tabeli historii jest określona podczas tworzenia tabeli historii, należy określić schemat i nazwę tabeli, a także nazwę widoku rejestru.
- Domyślnie tabela historii jest kompresowana z użyciem kompresji PAGE.
- Jeśli bieżąca tabela jest partycjonowana, tabela historii jest tworzona w domyślnej grupie plików, ponieważ konfiguracja partycjonowania nie jest replikowana automatycznie z bieżącej tabeli do tabeli historii.
- Tabele czasowe i historyczne nie mogą być tabelą FILETABLE i mogą zawierać kolumny dowolnego obsługiwanego typu danych innego niż FILESTREAM. FUNKCJA FILETABLE i FILESTREAM umożliwiają manipulowanie danymi poza programem SQL Server, a tym samym nie można zagwarantować wersjonowania systemu.
- Nie można utworzyć węzła lub tabeli krawędzi ani zmienić jej na tabelę czasową. Funkcja Graph nie jest obsługiwana przez księgę główną.
- Tabele czasowe obsługują typy danych obiektów blob, takie jak
(n)varchar(max),varbinary(max),(n)text, iimage, ponoszą znaczne koszty magazynowania i mają wpływ na wydajność ze względu na ich rozmiar. W związku z tym podczas projektowania systemu należy zachować ostrożność podczas korzystania z tych typów danych. - Tabela historii musi zostać utworzona w tej samej bazie danych co bieżąca tabela. Wykonywanie zapytań czasowych za pośrednictwem serwera połączonego nie jest obsługiwane.
- Tabela historii nie może mieć ograniczeń (klucz podstawowy, klucz obcy, tabela lub ograniczenia kolumn).
- Opcja online (
WITH (ONLINE = ON) nie ma wpływu naALTER TABLE ALTER COLUMNw przypadku tabeli czasowej w wersji systemowej.ALTER COLUMNnie jest wykonywane online, niezależnie od tego, która wartość została określona dla opcjiONLINE. -
INSERTiUPDATEinstrukcje nie mogą odwoływać się do kolumn GENERATED ALWAYS. Próby wstawienia wartości bezpośrednio do tych kolumn zostaną zablokowane. -
UPDATETEXTiWRITETEXTnie są obsługiwane. - Wyzwalacze w tabeli historii nie są dozwolone.
- Użycie technologii replikacji jest ograniczone:
- Zawsze włączone: w pełni obsługiwane
- Migawka, łączanie i replikacja transakcyjna nie są obsługiwane w przypadku tabel czasowych
- Nie można skonfigurować tabeli historii jako bieżącej tabeli w łańcuchu tabel historii.
- Następujące obiekty lub właściwości nie są replikowane z bieżącej tabeli do tabeli historii podczas tworzenia tabeli historii:
- Definicja okresu
- Definicja tożsamości
- Indeksy
- Statystyka
- Sprawdzanie ograniczeń
- Wyzwalaczy
- Konfiguracja partycjonowania
- Uprawnienia
- Predykaty zabezpieczeń na poziomie wiersza
Zagadnienia dotyczące zmian schematu
Dodawanie kolumn
Dodawanie kolumn mogących przyjmować wartość null jest obsługiwane. Dodawanie kolumn bez wartości null nie jest obsługiwane. Rejestr jest zaprojektowany tak, aby ignorować wartości NULL przy obliczaniu skrótu wersji wiersza. Na podstawie tego, gdy zostanie dodana kolumna dopuszczana do wartości null, rejestr zmodyfikuje schemat tabel rejestru i historii, aby uwzględnić nową kolumnę, jednak nie ma to wpływu na skróty istniejących wierszy. Dodawanie kolumn w tabelach księgi rachunkowej jest przechwytywane w sys.ledger_column_history.
Usuwanie kolumn i tabel
Zwykle usunięcie kolumny lub tabeli powoduje całkowite usunięcie danych bazowych z bazy danych i jest zasadniczo niezgodne z funkcją rejestru, która wymaga niezmienności danych. Zamiast usuwać dane, rejestr po prostu zmienia nazwy porzuconych obiektów, aby były logicznie usuwane ze schematu użytkownika, ale fizycznie pozostają w bazie danych. Wszystkie porzucone kolumny są również ukryte w schemacie tabeli rejestru, dzięki czemu pozostają niewidoczne dla użytkownika i jego aplikacji. Jednak dane takich porzuconych obiektów pozostają dostępne dla procesu weryfikacji rejestru i umożliwiają użytkownikom inspekcję wszelkich danych historycznych za pomocą odpowiednich widoków rejestru. Usuwanie kolumn w tabelach księgi głównej jest zapisywane w sys.ledger_column_history. Usuwanie tabeli rejestru jest zarejestrowane w sys.ledger_table_history. Porzucanie tabel rejestru i jego obiektów zależnych jest oznaczane jako porzucone w widokach wykazu systemu i zmieniane nazwy:
- Usunięte tabele rejestru są oznaczone jako usunięte przez ustawienie
is_dropped_ledger_tablew sys.tables i zmiana nazwy przy użyciu następującego formatu:MSSQL_DroppedLedgerTable_<dropped_ledger_table_name>_<GUID>. - Nazwy upuszczonych tabel historii dla aktualizowalnych tabel księgi są zmieniane przy użyciu następującego formatu:
MSSQL_DroppedLedgerHistory_<dropped_history_table_name>_<GUID>. - Porzucone widoki rejestru są oznaczone jako porzucone przez ustawienie w pliku
is_dropped_ledger_viewsys.views i zmienione przy użyciu następującego formatu:MSSQL_DroppedLedgerView_<dropped_ledger_view_name>_<GUID>.
Uwaga / Notatka
Nazwa porzuconych tabel rejestru, tabel historii i widoków rejestru może zostać obcięta, jeśli długość zmienionej tabeli lub widoku przekracza 128 znaków.
Zmienianie kolumn
Wszelkie zmiany, które nie mają wpływu na dane bazowe tabeli rejestru, są obsługiwane bez żadnej specjalnej obsługi, ponieważ nie mają wpływu na skróty przechwycone w rejestrze. Zmiany te obejmują:
- Zmiana nulowalności
- Porządkowanie ciągów Unicode
- Długość kolumn o zmiennej długości
Jednak wszelkie operacje, które mogą mieć wpływ na format istniejących danych, takie jak zmiana typu danych, nie są obsługiwane.