Dela via


Överväganden och begränsningar för transaktionsregister

gäller för: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

Det finns vissa överväganden och begränsningar att tänka på när du arbetar med transaktionsregistertabeller på grund av typen av systemversioner och oföränderliga data.

Allmänna överväganden och begränsningar

Tänk på följande när du arbetar med transaktionsregistret.

Överväganden och begränsningar för transaktionsregistertabeller

  • Befintliga tabeller i en databas som inte är transaktionsregistertabeller kan inte konverteras till transaktionsregistertabeller. Mer information finns i Migrera data från vanliga tabeller till transaktionsregistertabeller.
  • När en transaktionsregistertabell har skapats kan den inte återställas till en tabell som inte är en transaktionsregistertabell.
  • Det går inte att ta bort äldre data i registertabeller med endast tillägg eller historiktabellen för uppdaterbara transaktionsregistertabeller .
  • TRUNCATE TABLE stöds inte.
  • När en uppdaterad transaktionsregistertabell skapas lägger den till fyra GENERATED ALWAYS-kolumner i transaktionsregistret. En transaktionsregistertabell med endast tillägg lägger till två kolumner i transaktionsregistertabellen. Dessa nya kolumner räknas mot det maximala antalet kolumner som stöds i Azure SQL Database (1 024).
  • Minnesinterna tabeller stöds inte.
  • Glesa kolumnuppsättningar stöds inte.
  • SWITCH IN/OUT-partition stöds inte.
  • DBCC CLONEDATABASE stöds inte.
  • Transaktionsregistertabeller kan inte ha fulltextindex.
  • Transaktionsregistertabeller får inte vara graftabeller.
  • Transaktionsregistertabeller får inte vara FileTables.
  • Transaktionsregistertabeller kan inte ha ett icke-grupperat rowstore-index när de har ett grupperat kolumnlagringsindex.
  • Ändringsspårning tillåts inte i historiktabellen, men tillåts i transaktionsregistertabeller.
  • Ändringsdatainsamling tillåts inte i historiktabellen, men tillåts i transaktionsregistertabeller.
  • Transaktionsreplikering stöds inte för transaktionsregistertabeller.
  • Databasspegling stöds inte.
  • Azure Synapse Link stöds men endast för transaktionsregistertabellen, inte historiktabellen.
  • Ändra digest-sökvägen manuellt efter en inbyggd återställning av en databassäkerhetskopia till en Azure SQL Managed Instance.
  • Ändra sammanställningssökvägen manuellt efter att en hanterad instanslänk har skapats till en Azure SQL Managed Instance.
  • SQL Data Sync stöds inte med transaktionsregistertabeller.

Datatyper som inte stöds

  • XML
  • SqlVariant
  • Användardefinierad datatyp
  • FILESTREAM
  • Vektor

Begränsningar i tidstabell

Uppdaterade transaktionsregistertabeller baseras på tekniken för tidstabeller och ärver de flesta begränsningarna , men inte alla. Nedan visas en lista över begränsningar som ärvs från temporala tabeller.

  • Om namnet på en historiktabell anges när historiktabellen skapas måste du ange schema- och tabellnamnet och även namnet på transaktionsregistervyn.
  • Som standard är historiktabellen PAGE komprimerad.
  • Om den aktuella tabellen är partitionerad skapas historiktabellen i standardfilgruppen eftersom partitioneringskonfigurationen inte replikeras automatiskt från den aktuella tabellen till historiktabellen.
  • Tabeller för tids- och historik kan inte vara en FILTABELL och kan innehålla kolumner av någon annan datatyp som stöds än FILESTREAM. FILETABLE och FILESTREAM tillåter datamanipulering utanför SQL Server, och därför kan systemversioner inte garanteras.
  • En nod- eller kanttabell kan inte skapas som eller ändras till en temporal tabell. Graph stöds inte med transaktionsregister.
  • Tidstabeller stöder blobdatatyper, till exempel (n)varchar(max), varbinary(max)(n)text, och image, men de medför betydande lagringskostnader och får prestandakonsekvenser på grund av deras storlek. När du utformar systemet bör du därför vara försiktig när du använder dessa datatyper.
  • Historiktabellen måste skapas i samma databas som den aktuella tabellen. Temporal frågekörning över länkad server stöds inte.
  • Historiktabellen kan inte ha begränsningar (primärnyckel, sekundärnyckel, tabell eller kolumnbegränsningar).
  • Onlinealternativet (WITH (ONLINE = ON) har ingen effekt på ALTER TABLE ALTER COLUMN vid systemversionsbaserad temporaltabell. ALTER COLUMN utförs inte som online oavsett vilket värde som har angetts för ONLINE alternativet.
  • INSERT och UPDATE -instruktioner kan inte referera till kolumnerna GENERATED ALWAYS . Försök att infoga värden direkt i dessa kolumner blockeras.
  • UPDATETEXT och WRITETEXT stöds inte.
  • Utlösare i historiktabellen tillåts inte.
  • Användningen av replikeringstekniker är begränsad:
    • AlwaysOn: Stöds fullt ut
    • Ögonblicksbild, sammanslagning och transaktionsreplikering: Stöds inte för temporala tabeller
  • Det går inte att konfigurera en historiktabell som aktuell tabell i en kedja med historiktabeller.
  • Följande objekt eller egenskaper replikeras inte från den aktuella tabellen till historiktabellen när historiktabellen skapas:
    • Perioddefinition
    • Identitetsdefinition
    • Indexen
    • Statistik
    • Kontrollera begränsningar
    • Utlösare
    • Partitioneringskonfiguration
    • Behörigheter
    • Säkerhetspredikat på radnivå

Överväganden för schemaändringar

Lägga till kolumner

Det finns stöd för att lägga till nullbara kolumner. Det går inte att lägga till icke-nullbara kolumner. Transaktionsregistret är utformat för att ignorera NULL-värden vid databehandling av hashen för en radversion. När en nullbar kolumn läggs till ändrar transaktionsregistret schemat för transaktionsregistret och historiktabellerna så att det inkluderar den nya kolumnen, men detta påverkar inte hashvärden för befintliga rader. Du kan lägga till kolumner i transaktionsregistertabeller i sys.ledger_column_history.

Ta bort kolumner och tabeller

Normalt raderar en kolumn eller tabell helt underliggande data från databasen och är i grunden inkompatibel med transaktionsregistrets funktioner som kräver att data är oföränderliga. I stället för att ta bort data byter transaktionsregistret bara namn på objekten som tas bort så att de tas bort logiskt från användarschemat, men fysiskt finns kvar i databasen. Eventuella borttagna kolumner är också dolda från tabellschemat för transaktionsregistret, så att de är osynliga för användarprogrammet. Data för sådana borttagna objekt är dock fortfarande tillgängliga för transaktionsregistrets verifieringsprocess och gör det möjligt för användare att inspektera historiska data via motsvarande transaktionsregistervyer. Du kan ta bort kolumner i transaktionsregistertabeller i sys.ledger_column_history. Att ta bort en transaktionsregistertabell registreras i sys.ledger_table_history. Radering av transaktionsregistertabeller och deras beroende objekt markeras som borttagna i systemkatalogvyerna och får nya namn.

  • Borttagna transaktionsregistertabeller markeras som borttagna genom att ställa in is_dropped_ledger_table i sys.tables och byts namn med följande format: MSSQL_DroppedLedgerTable_<dropped_ledger_table_name>_<GUID>.
  • Borttagna historiktabeller för aktualiserbara kontotabeller byts namn enligt följande format: MSSQL_DroppedLedgerHistory_<dropped_history_table_name>_<GUID>.
  • Borttagna huvudboksvyer markeras som borttagna genom att ställa in is_dropped_ledger_view i sys.views och byts namn med följande format: MSSQL_DroppedLedgerView_<dropped_ledger_view_name>_<GUID>.

Anmärkning

Namnet på borttagna transaktionsregistertabeller, historiktabeller och transaktionsregistervyer kan trunkeras om längden på den omdöpta tabellen eller vyn överskrider 128 tecken.

Ändra kolumner

Ändringar som inte påverkar underliggande data i en transaktionsregistertabell stöds utan någon särskild hantering eftersom de inte påverkar hashvärden som samlas in i transaktionsregistret. Dessa ändringar omfattar:

  • Ändra nullability
  • Sortering för Unicode-strängar
  • Längden på kolumner med variabel längd

Alla åtgärder som kan påverka formatet på befintliga data, till exempel att ändra datatypen, stöds dock inte.