Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na: SQL Server 2016 (13.x) a novější verze
Azure SQL Database
Azure SQL Managed Instance
SQL database in Microsoft Fabric
Při práci s časovými tabulkami mějte na paměti následující aspekty a omezení vyplývající z povahy systémového verzování:
Časová tabulka musí mít definovaný primární klíč, aby se záznamy korelovaly mezi aktuální tabulkou a historickou tabulkou. Tabulka historie nemůže mít definovaný primární klíč.
Sloupce
SYSTEM_TIMEobdobí použité k zaznamenávání hodnotValidFromaValidTomusí být definovány datovým typem datetime2.Dočasná syntaxe funguje u tabulek nebo zobrazení, která jsou uložená místně v databázi. U vzdálených objektů, jako jsou tabulky na propojeném serveru nebo externích tabulkách, nemůžete přímo v dotazu použít klauzuli
FORani predikáty období.Pokud je název tabulky historie zadán během vytváření tabulky historie, je nutné zadat schéma a název tabulky.
Ve výchozím nastavení je tabulka historie
PAGEkomprimována.Pokud je aktuální tabulka rozdělena, historická tabulka se vytvoří ve výchozí souborové skupině, protože konfigurace rozdělení se automaticky nereplikuje z aktuální tabulky do historické tabulky.
Dočasné tabulky a tabulky historie nemůžou používat FileTable ani FILESTREAM. FileTable a FILESTREAM umožňují manipulaci s daty mimo SQL Server, takže správu verzí systému není možné zaručit.
Uzel nebo hraniční tabulka nelze vytvořit jako dočasnou tabulku ani ji změnit.
Dočasné tabulky podporují datové typy objektů blob, například (n)varchar(max), varbinary(max), (n)texta image, nesou významné náklady na úložiště a mají vliv na výkon kvůli jejich velikosti. Při návrhu systému buďte opatrní při používání těchto typů dat.
Tabulka historie musí být vytvořena ve stejné databázi jako aktuální tabulka. Dočasné dotazování na odkazované servery se nepodporuje.
Tabulka historie nemůže mít omezení (omezení primárního klíče, cizího klíče, tabulky nebo sloupce).
Indexovaná zobrazení nejsou podporována nad dočasnými dotazy (dotazy, které používají klauzuli
FOR SYSTEM_TIME).Možnost Online (
WITH (ONLINE = ON) nemá žádný vliv naALTER TABLE ALTER COLUMNv časové tabulce verzované systémem.ALTERsloupec se neprovádí jako online operace bez ohledu na to, jakou hodnotu byla zadána proONLINEmožnost.INSERTa výrokyUPDATEnemohou odkazovat na sloupce obdobíSYSTEM_TIME. Pokusy o vložení hodnot přímo do těchto sloupců jsou blokované.TRUNCATE TABLEse nepodporuje, zatímcoSYSTEM_VERSIONINGjeON.Přímá úprava dat v tabulce historie není povolená.
Aby nedošlo k narušení logiky jazyka pro manipulaci s daty (DML),
INSTEAD OFnejsou povoleny triggery ani v aktuální tabulce, ani v tabulce historie.AFTERtriggery jsou povoleny pouze v aktuální tabulce. Tyto triggery jsou v tabulce historie blokované, aby se zabránilo zneplatnění logiky DML.Použití replikačních technologií je omezené:
Skupiny dostupnosti: Plně podporována
Zachycování dat a sledování změn: Podporováno pouze v aktuální tabulce
Snímek a transakční replikace: Podporuje se pouze pro jednoho vydavatele bez povolení časových funkcí a jednoho odběratele s povolenými časovými funkcemi. Použití více odběratelů není podporováno kvůli závislosti na místních systémových hodinách, což může vést k nekonzistentním dočasným datům. V tomto případě je vydavatel použit pro pracovní zátěž zpracování online transakcí (OLTP), zatímco odběratel slouží k odlehčování reportování (včetně
AS OFdotazování). Když distribuční agent začne, otevírá transakci, která zůstává otevřená, dokud distribuční agent nepřestane.ValidFromaValidTojsou vyplněny do začátku první transakce, kterou distribuční agent zahájí. Pokud je pro vaši aplikaci nebo organizaci důležité mítValidFromaValidTonaplněné časem, který je blízko aktuálního systémového času, může být vhodnější spustit distribučního agenta podle plánu, než ho spouštět nepřetržitě podle výchozího chování. Další informace najdete v tématu scénáře použití dočasných tabulek.Replikace sloučení: Není podporována pro časové tabulky
Běžné dotazy mají vliv jenom na data v aktuální tabulce. Pokud chcete dotazovat data v tabulce historie, musíte použít dočasné dotazy. Další informace najdete v tématu Dotazování dat v časové tabulce s verzováním podle systému.
Optimální strategie indexování zahrnuje clusterovaný sloupcový index nebo řádkový index typu B-tree na aktuální tabulce a clusterovaný sloupcový index na tabulce historie pro optimální velikost úložiště a výkon. Pokud si vytvoříte nebo používáte vlastní tabulku historie, vytvořte tento typ indexu složený z sloupců s obdobím začínajícím sloupcem na konci období. Tento index urychluje časové dotazování a dotazy, které jsou součástí kontroly konzistence dat. Výchozí tabulka historie vytváří shlukovaný index řádků založený na sloupcích období (konec, začátek). Minimálně použijte neclusterovaný index řádků.
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
- Indexes
- Statistika
- Kontrola omezení
- Spouštěče
- Konfigurace dělení
- Permissions
- Predikáty zabezpečení na úrovni řádků
Nemůžete nastavit tabulku historie jako aktuální tabulku v řetězci historických tabulek.
Note
Dokumentace používá termín B-tree obecně v odkazu na indexy. V indexech rowstore databázový stroj implementuje strom B+. To neplatí pro indexy columnstore ani indexy v tabulkách optimalizovaných pro paměť. Další informace najdete v SQL Serveru a architektuře indexu Azure SQL a průvodci návrhem.
Související obsah
- temporální tabulky
- Začínáme se systémově verzovanými temporálními tabulkami
- Kontroly konzistence systému časových tabulek
- Oddíl s dočasnými tabulkami
- zabezpečení časových tabulek
- Správa uchovávání historických dat v systémově verzovaných časových tabulkách
- Systémově verzované časové tabulky s tabulkami optimalizovanými pro paměť
- Zobrazení a funkce metadat temporálních tabulek