Dela via


Hantera ändringsspårning (SQL Server)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Förhandsversion av Microsoft Fabric

Den här artikeln beskriver hur du hanterar ändringsspårning. Den beskriver också hur du konfigurerar säkerhet och fastställer effekterna på lagring och prestanda när ändringsspårning används.

Hantera ändringsspårning

I följande avsnitt visas katalogvyer, behörigheter och inställningar som är relevanta för hantering av ändringsspårning.

Katalogvyer

Om du vill ta reda på vilka tabeller och databaser som har ändringsspårning aktiverat kan du använda följande katalogvyer:

Dessutom visar sys.internal_tables katalogvyn de interna tabeller som skapas när ändringsspårning är aktiverat för en användartabell.

Security

För att få åtkomst till information om ändringsspårning med hjälp av funktionerna för ändringsspårning måste huvudkontot ha följande behörigheter:

  • SELECT behörighet för minst primärnyckelkolumnerna i den ändringsspårade tabellen till den tabell som efterfrågas.

  • VIEW CHANGE TRACKING behörighet i tabellen för vilken ändringar hämtas. Behörigheten VIEW CHANGE TRACKING krävs av följande skäl:

    • Ändringsspårningsposter innehåller information om rader som har tagits bort. Posterna använder primärnyckelvärdena för de rader som har tagits bort. Ett huvudnamn kunde ha beviljats SELECT behörighet för en ändringsspårad tabell efter att vissa känsliga data hade tagits bort. I det här fallet vill du inte att huvudkontot ska kunna komma åt den borttagna informationen med hjälp av ändringsspårning.

    • Information om ändringsspårning kan lagra information om vilka kolumner som har ändrats av uppdateringsåtgärder. Ett huvudnamn kan nekas behörighet till en kolumn som innehåller känslig information. Men eftersom information om ändringsspårning är tillgänglig kan ett huvudnamn fastställa att ett kolumnvärde har uppdaterats, men huvudnamnet kan inte fastställa värdet för kolumnen.

Förstå omkostnader för ändringsspårning

När ändringsspårning är aktiverat för en tabell påverkas vissa administrationsåtgärder. I följande tabell visas de åtgärder och de effekter som du bör tänka på.

Verksamhet När ändringsspårning är aktiverat
DROP TABLE All ändringsspårningsinformation för den borttagna tabellen tas bort.
ALTER TABLE DROP CONSTRAINT Ett försök att släppa villkoret PRIMARY KEY misslyckas. Ändringsspårning måste inaktiveras innan en PRIMARY KEY begränsning kan tas bort.
ALTER TABLE DROP COLUMN Om en kolumn som tas bort är en del av den primära nyckeln är det inte tillåtet att ta bort kolumnen, oavsett ändringsspårning.

Om kolumnen som tas bort inte är en del av den primära nyckeln lyckas du ta bort kolumnen. Men effekten på alla program som synkroniserar dessa data bör förstås först. Om spårning av kolumnändringar är aktiverat för tabellen kan den borttagna kolumnen fortfarande returneras som en del av informationen om ändringsspårning. Det är programmets ansvar att hantera den borttagna kolumnen.
ALTER TABLE ADD COLUMN Om en ny kolumn läggs till i den ändringsspårade tabellen spåras inte tillägget av kolumnen. Endast uppdateringar och ändringar som görs i den nya kolumnen spåras.
ALTER TABLE ALTER COLUMN Datatypändringar för en icke-primär nyckelkolumn spåras inte.
ALTER TABLE SWITCH Det går inte att växla en partition om en eller båda tabellerna har aktiverat ändringsspårning.
DROP INDEX, or ALTER INDEX DISABLE Det index som framtvingar primärnyckeln kan inte tas bort eller inaktiveras.
TRUNCATE TABLE Trunkering av en tabell kan utföras i en tabell som har aktiverat ändringsspårning. De rader som tas bort av åtgärden spåras dock inte och den lägsta giltiga versionen uppdateras. När ett program kontrollerar sin version anger kontrollen att versionen är för gammal och att en återinitiering krävs. Detta är samma sak som ändringsspårning inaktiveras och kan sedan återanvändas för tabellen.

Om du använder ändringsspårning läggs vissa omkostnader till DML-åtgärder på grund av den ändringsspårningsinformation som lagras som en del av åtgärden.

Effekter på DML

Ändringsspårning har optimerats för att minimera prestandakostnaderna för DML-åtgärder. De inkrementella prestandakostnader som är associerade med ändringsspårning i en tabell liknar de omkostnader som uppstår när ett index skapas för en tabell och måste underhållas.

För varje rad som ändras av en DML-åtgärd läggs en rad till i den interna ändringsspårningstabellen. Effekten av detta i förhållande till DML-åtgärden beror på olika faktorer, till exempel:

  • Antalet primärnyckelkolumner

  • Mängden data som ändras på användartabellraden

  • Antalet åtgärder som utförs i en transaktion

Ögonblicksbildisolering, om den används, påverkar även prestanda för alla DML-åtgärder, oavsett om ändringsspårning är aktiverat eller inte.

Effekter på lagring

Ändringsspårningsdata lagras i följande typer av interna tabeller:

  • Intern ändringstabell

    Det finns en intern ändringstabell för varje användartabell som har ändringsspårning aktiverat.

  • Intern transaktionstabell

    Det finns en intern transaktionstabell för databasen.

Dessa interna tabeller påverkar lagringskraven på följande sätt:

  • För varje ändring av varje rad i användartabellen läggs en rad till i den interna ändringstabellen. Den här raden har en liten fast omkostnad plus en variabel som motsvarar storleken på primärnyckelkolumnerna. Raden kan innehålla valfri kontextinformation som angetts av ett program. Och om kolumnspårning är aktiverat kräver varje ändrad kolumn 4 byte i spårningstabellen.

  • För varje bekräftad transaktion läggs en rad till i en intern transaktionstabell.

Precis som med andra interna tabeller kan du bestämma vilket utrymme som används för tabellerna för ändringsspårning med hjälp av den sp_spaceused lagrade proceduren. Namnen på de interna tabellerna kan hämtas med hjälp av sys.internal_tables katalogvyn, som du ser i följande exempel.

sp_spaceused 'sys.change_tracking_309576141'  
sp_spaceused 'sys.syscommittab'