Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Den här artikeln beskriver funktionen för ändringsspårning för SQL Server, som är en enkel lösning som tillhandahåller en effektiv mekanism för ändringsspårning för program.
Kom igång genom att läsa Konfigurera ändringsspårning.
Överblick
För att göra det möjligt för program att fråga efter ändringar av data i en databas och få åtkomst till information som är relaterad till ändringarna var programutvecklare tvungna att implementera anpassade mekanismer för ändringsspårning. Dessa mekanismer involverade vanligtvis mycket arbete, till exempel en kombination av utlösare, tidsstämpel kolumner, nya tabeller för att lagra spårningsinformation och anpassade rensningsprocesser. Funktionen för ändringsspårning i SQL Server förenklar den här processen, vilket gör det enkelt att identifiera information som rör ändringar utan att behöva en anpassad lösning.
Olika typer av program har olika krav på hur mycket information de behöver om ändringarna. Program kan använda ändringsspårning för att besvara följande frågor om de ändringar som har gjorts i en användartabell:
Vilka rader har ändrats för en användartabell?
Endast det faktum att en rad har ändrats krävs, inte hur många gånger raden har ändrats eller värdena för mellanliggande ändringar.
De senaste data kan hämtas direkt från tabellen som spåras.
Har en rad ändrats?
- Det faktum att en rad har ändrats och information om ändringen måste vara tillgänglig och registreras när ändringen gjordes i samma transaktion.
Not
Om ett program kräver information om alla ändringar som har gjorts och mellanliggande värden för ändrade data kan det vara lämpligt att använda insamling av ändringsdata i stället för ändringsspårning. För mer information, se Om Change Data Capture (SQL Server).
One-Way och Two-Way synkroniseringsprogram
Program som måste synkronisera data med en instans av SQL Server Database Engine måste kunna fråga efter ändringar. Ändringsspårning kan användas som grund för både enkelriktade och dubbelriktade synkroniseringsprogram.
One-Way synkroniseringsapplikationer
Envägssynkroniseringsprogram, till exempel en klient eller ett cachelagringsprogram på mellannivå, kan skapas som använder ändringsspårning. Som du ser i följande bild kräver ett cachelagringsprogram att data lagras i databasmotorn och cachelagras i andra datalager. Programmet måste kunna behålla cachen up-to-date med alla ändringar som har gjorts i databastabellerna. Det finns inga ändringar att skicka tillbaka till databasmotorn.
Two-Way synkroniseringsapplikationer
Tvåvägssynkroniseringsprogram kan också skapas som använder ändringsspårning. I det här scenariot synkroniseras data i en instans av databasmotorn med ett eller flera datalager. Data i dessa lager kan uppdateras och ändringarna måste synkroniseras tillbaka till databasmotorn.
Ett bra exempel på tvåvägssynkroniseringsprogram är ett ibland anslutet program. I den här typen av applikation gör en klientapplikation förfrågningar till och uppdaterar en lokal lagring. När en anslutning är tillgänglig mellan en klient och server, synkroniseras applikationen med en server, och ändrade data flödar i båda riktningarna.
Tvåvägssynkroniseringsprogrammen måste kunna identifiera konflikter. En konflikt skulle uppstå om samma data ändrades i båda datalager under tiden mellan synkroniseringarna. Med möjligheten att identifiera konflikter kan ett program se till att ändringarna inte går förlorade.
Så här fungerar ändringsspårning
Om du vill konfigurera ändringsspårning kan du använda DDL-instruktioner eller SQL Server Management Studio. Mer information finns i Aktivera och inaktivera ändringsspårning. För att spåra ändringar måste ändringsspårning först aktiveras för databasen och sedan aktiveras för de tabeller som du vill spåra i databasen. Tabelldefinitionen behöver inte ändras på något sätt och inga utlösare skapas.
När ändringsspårning har konfigurerats för en tabell kommer alla DML-instruktioner som påverkar rader i tabellen att orsaka ändringsspårningsinformation för varje ändrad rad som ska registreras. Om du vill fråga efter de rader som har ändrats och hämta information om ändringarna kan du använda ändringsspårningsfunktioner.
Värdena för primärnyckelkolumnen är den enda informationen från den spårade tabellen som registreras med ändringsinformationen. Dessa värden identifierar de rader som har ändrats. För att hämta de senaste data för dessa rader kan ett program använda primärnyckelkolumnvärdena för att ansluta källtabellen till den spårade tabellen.
Information om den ändring som gjordes i varje rad kan också hämtas med hjälp av ändringsspårning. Till exempel den typ av DML-åtgärd som orsakade ändringen (infoga, uppdatera eller ta bort) eller kolumnerna som ändrades som en del av en uppdateringsåtgärd.
Alla DML-åtgärder spåras, även om värdet för en kolumn inte ändras. Om en uppdateringsuttryck till exempel anger en kolumn till samma värde som den redan har, anses kolumnen fortfarande ha ändrats.
Rensning av ändringsloggning
Ändringsspårningsinformation för alla tabeller (aktiverad för ändringsspårning) lagras i ett minnesinternt radarkiv. Ändringsspårningsdata associerade med varje tabell som har ändringsspårning aktiverad töms vid varje kontrollpunkt från den minnesinterna radsökningen till motsvarande interna tabell på disk. Under kontrollpunkten rensas även det minnesinterna radarkivet när raderna har flyttats till disktabellerna.
Varje tabell som är aktiverad för ändringsspårning har en intern on-disk-tabell som används av funktionerna För ändringsspårning för att fastställa ändringsversionen och de rader som har ändrats sedan en viss version. Varje gång automatisk rensning tråden aktiveras genomsöker den alla användardatabaser på SQL Server-instansen för att identifiera de ändringsspårningsaktiverade databaserna. Baserat på inställningen för lagringsperiod för databasen rensas varje intern tabell på skivan från sina utgångna poster.
En lagrad procedur lades till i Service Packs för SQL Server 2014 (12.x) och SQL Server 2016 (13.x) för att utföra manuell rensning för interna interna tabeller för ändringsspårning. Mer information om den lagrade proceduren finns i KB173157.