Sdílet prostřednictvím


Důležité informace o registru a omezení

Platí pro: SQL Server 2022 (16.x) a novější verze Azure SQL DatabaseAzure SQL Managed Instance

Při práci s tabulkami registru je potřeba vzít v úvahu některé aspekty a omezení, a to z důvodu povahy správy verzí systému a neměnných dat.

Obecné aspekty a omezení

Při práci s registrem zvažte následující skutečnosti.

Úvahy a omezení tabulky účetní knihy

  • Existující tabulky v databázi, které nejsou tabulkami registru, nelze převést na tabulky registru. Další informace najdete v tématu Migrace dat z běžných tabulek do tabulek registru.
  • Po vytvoření tabulky registru se nedá vrátit k tabulce, která není tabulkou registru.
  • Odstranění starších dat v tabulkách registru jen pro připojení nebo v tabulce historie aktualizovatelných tabulek registru není podporováno.
  • TRUNCATE TABLE není podporováno.
  • Při vytvoření aktualizovatelné tabulky registru přidá do tabulky registru čtyři sloupce GENERATED ALWAYS . Tabulka registru pouze pro přidávání přidá dva sloupce do tabulky registru. Tyto nové sloupce se počítají do maximálního podporovaného počtu sloupců ve službě Azure SQL Database (1 024).
  • Tabulky v paměti nejsou podporované.
  • Použití řídkých sad sloupců není podporováno.
  • Oddíl SWITCH IN/OUT není podporovaný.
  • DBCC CLONEDATABASE se nepodporuje.
  • Tabulky registru nemohou mít fulltextové indexy.
  • Tabulky registru nemůžou být tabulkou grafů.
  • Tabulky registru nemůžou být FileTables.
  • Tabulky registru nemohou mít neklusterovaný index úložiště řádků, pokud mají clusterovaný index columnstore.
  • Sledování změn není v tabulce historie povolené, ale je povolené u tabulek registru.
  • V tabulce historie není povolené zachytávání dat změn, ale povoluje se u tabulek registru.
  • Transakční replikace není podporovaná pro tabulky registru.
  • Zrcadlení databáze se nepodporuje.
  • Azure Synapse Link se podporuje, ale pouze pro účetní tabulku, ne pro tabulku historie.
  • Cestu digestu můžete změnit ručně po nativním obnovení zálohy databáze do spravované instance Azure SQL.
  • Cestu digestu změňte ručně po vytvoření odkazu spravované instance na spravovanou instanci Azure SQL.
  • Synchronizace dat SQL není u tabulek registru podporovaná.

Nepodporované datové typy

  • jazyk XML
  • SqlVariant
  • Uživatelem definovaný datový typ
  • FILESTREAM
  • Vektor

Omezení časových tabulek

Aktualizovatelné tabulky registru jsou založené na technologii dočasných tabulek a dědí většinu omezení , ale ne všechny. Níže je seznam omezení, která se dědí z dočasných tabulek.

  • Pokud je název tabulky historie zadán během vytváření tabulky historie, je nutné zadat schéma a název tabulky a také název zobrazení registru.
  • Ve výchozím nastavení je tabulka historie komprimovaná pomocí komprese PAGE.
  • Pokud je aktuální tabulka rozdělená na oddíly, vytvoří se ve výchozí skupině souborů tabulka historie, protože konfigurace dělení se automaticky nereplikuje z aktuální tabulky do tabulky historie.
  • Dočasné tabulky a tabulky historie nemohou být FILETABLE a mohou obsahovat sloupce libovolného podporovaného datového typu než FILESTREAM. FILETABLE a FILESTREAM umožňují manipulaci s daty mimo SQL Server, a proto není možné zaručit správu verzí systému.
  • Uzel nebo hraniční tabulka nelze vytvořit jako dočasnou tabulku ani ji změnit. Graf není podporován v účetní knize.
  • I když temporální tabulky podporují datové typy objektů blob, jako například (n)varchar(max), varbinary(max), (n)text a image, budou způsobovat značné náklady na úložiště a mají výkonové důsledky kvůli své velikosti. Při návrhu systému je třeba věnovat pozornost používání těchto datových typů.
  • Tabulka historie musí být vytvořena ve stejné databázi jako aktuální tabulka. Dočasné dotazování na odkazovaný server se nepodporuje.
  • Tabulka historie nemůže mít omezení (omezení primárního klíče, cizího klíče, tabulky nebo sloupce).
  • Možnost online (WITH (ONLINE = ON) nemá žádný vliv na ALTER TABLE ALTER COLUMN v případě systémově verzované časové tabulky. ALTER COLUMN se neprovádí jako online bez ohledu na to, jaká hodnota byla pro možnost ONLINE zadána.
  • INSERT a UPDATE příkazy nemohou odkazovat na sloupce GENERATED ALWAYS. Pokusy o vložení hodnot přímo do těchto sloupců budou blokovány.
  • UPDATETEXT a WRITETEXT nejsou podporovány.
  • Triggery v tabulce historie nejsou povolené.
  • Použití replikačních technologií je omezené:
    • AlwaysOn: Plně podporovaná
    • Snapshot, merge a transakční replikace: Nepodporováno pro temporální tabulky
  • Tabulku historie nejde nakonfigurovat jako aktuální tabulku v řetězu tabulek historie.
  • Následující objekty nebo vlastnosti se při vytváření tabulky historie nereplikují z aktuální tabulky do tabulky historie:
    • Definice období
    • Definice identity
    • Rejstříky
    • Statistika
    • Kontrola omezení
    • Spouštěče
    • Konfigurace dělení
    • Povolení
    • Predikáty zabezpečení na úrovni řádků

Úvaha o změnách schématu

Přidání sloupce

Přidání sloupců s možnou hodnotou null je podporováno. Přidání ne-nullovatelných sloupců není podporováno. Ledger je navržen tak, aby při výpočtu hash pro verzi řádku ignoroval hodnoty NULL. Na základě toho, když přidáte sloupec s možnou hodnotou null, hlavní kniha upraví schéma tabulek registru a historie tak, aby zahrnovaly nový sloupec, ale nemá to vliv na hodnoty hash existujících řádků. Přidávání sloupců v tabulkách registru je zachyceno v sys.ledger_column_history.

Vyřazení sloupců a tabulek

Za normálních okolností vyřazení sloupce nebo tabulky úplně vymaže podkladová data z databáze a je v zásadě nekompatibilní s funkcemi registru, které vyžadují neměnnost dat. Místo odstranění dat systém účetních knih jednoduše přejmenuje objekty určené k odebrání tak, aby byly logicky odebrány ze schématu uživatele, ale fyzicky zůstaly v databázi. Všechny vyřazené sloupce jsou také skryty ze schématu tabulky registru, aby byly neviditelné pro uživatelskou aplikaci. Data těchto vyřazených objektů však zůstávají k dispozici pro proces ověření registru a umožňují uživatelům kontrolovat všechna historická data prostřednictvím odpovídajících zobrazení registru. Zahození sloupců v tabulkách registru je zachyceno v sys.ledger_column_history. Odstranění tabulky z registru je zaznamenáno v sys.ledger_table_history. Vyřazené tabulky účetní knihy a jejich závislé objekty jsou označeny jako vyřazené v zobrazeních systémového katalogu a přejmenovány.

  • Vyřazené tabulky registru jsou označeny jako vyřazené nastavením is_dropped_ledger_table v sys.tables a přejmenovány pomocí následujícího formátu: MSSQL_DroppedLedgerTable_<dropped_ledger_table_name>_<GUID>.
  • Odstraněné historické tabulky pro aktualizovatelné tabulky účetní knihy jsou přejmenovány pomocí následujícího formátu: MSSQL_DroppedLedgerHistory_<dropped_history_table_name>_<GUID>.
  • Vyřazená zobrazení registru jsou označena jako vyřazena nastavením is_dropped_ledger_view v sys.views a přejmenována pomocí následujícího formátu: MSSQL_DroppedLedgerView_<dropped_ledger_view_name>_<GUID>.

Poznámka:

Název vynechaných tabulek registru, tabulek historie a zobrazení registru může být zkrácen, pokud délka přejmenované tabulky nebo zobrazení přesahuje 128 znaků.

Změna sloupců

Všechny změny, které nemají vliv na podkladová data tabulky registru, jsou podporovány bez speciálního zpracování, protože nemají vliv na hodnoty hash zachycené v registru. Jde o tyto změny:

  • Změna nulovatelnosti
  • Kolace pro řetězce Unicode
  • Délka sloupců s proměnlivou délkou

Všechny operace, které můžou mít vliv na formát existujících dat, například změna datového typu, se ale nepodporují.