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 dočasnými tabulkami je potřeba vzít v úvahu některé aspekty a omezení, a to z důvodu povahy správy systémových verzí:
Dočasná tabulka musí mít definovaný primární klíč, aby bylo možné korelovat záznamy mezi aktuální tabulkou a tabulkou historie. 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ě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 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 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é 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á.
-
ON DELETE CASCADEaON UPDATE CASCADEnejsou v aktuální tabulce povolené. Jinými slovy, pokud časová tabulka odkazuje na tabulku v relaci cizího klíče (odpovídajícíparent_object_idvsys.foreign_key), možnostiCASCADEnejsou povoleny. Pokud chcete toto omezení obejít, použijte logiku aplikace nebo po triggerech, abyste zachovali konzistenci při odstranění v tabulce primárního klíče (odpovídajícíreferenced_object_idvsys.foreign_key). Pokud je tabulka primárního klíče dočasná a odkazování na tabulku není dočasné, neexistuje žádné takové omezení.
INSTEAD OFtriggery nejsou povolené v aktuální tabulce nebo v tabulce historie, aby se zabránilo zneplatnění logiky DML.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ě podporovaná
Change data capture a Change tracking: Podporováno pouze na 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ě se vydavatel používá pro úlohu OLTP, zatímco odběratel slouží k odlehčení zpracování výkazů (včetně dotazování
AS OF). Při spuštění distribučního agenta se otevře transakce, která zůstane otevřená, dokud se distribuční agent nezastaví.ValidFromaValidTose nastaví na čas zahájení první transakce, kterou zahájí distribuční agent. 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í : Pro dočasné tabulky se nepodporuje
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 dočasné tabulce s systémovou verzí.
Optimální strategie indexování zahrnuje index úložiště clusterovaných sloupců nebo index úložiště řádků stromu B v aktuální tabulce a clusterovaný index columnstore v tabulce historie pro optimální velikost a výkon úložiště. Pokud vytváříte nebo používáte vlastní tabulku historie, důrazně doporučujeme vytvořit tento typ indexu skládajícího se ze sloupců období začínajících sloupcem konce období. Tento index zrychluje dočasné dotazování a zrychluje dotazy, které jsou součástí kontroly konzistence dat. Výchozí tabulka historie obsahuje clusterovaný index rowstore vytvořený za vás na základě sloupců období (konec, začátek). Minimálně se doporučuje neclusterovaný index rowstore.
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í
- Triggers
- Konfigurace dělení
- Permissions
- Predikáty zabezpečení na úrovni řádků
Tabulku historie nejde nakonfigurovat jako aktuální tabulku v řetězu tabulek historie.
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ými dočasnými tabulkami
- kontroly konzistence systému temporálních tabulek
- Oddíl s dočasnými tabulkami
- zabezpečení temporálních tabulek
- Správa uchovávání historických dat v dočasných tabulkách s systémovou verzí
- dočasné tabulky s systémovou verzí s tabulkami optimalizovanými pro paměť
- zobrazení metadat temporálních tabulek a funkcí