Fundamentele sistemului de urmărire a datelor modificate

Sistemul de urmărire a datelor modificat înregistrează operațiile de inserare, actualizare și ștergere care se aplică tabelului SQL Server. Aceasta oferă acces la detaliile acestor modificări într-un format relațional ușor procesat. Informațiile despre coloanele și metadatele care sunt necesare pentru aplicarea modificărilor în mediul țintă sunt urmărite în rânduri modificate și stocate în tabelele de schimbare care reflectă structura coloanelor din tabelele sursă. Pentru a se asigura că utilizatorii de date pot accesa în mod sistematic informații despre modificări, funcțiile evaluate în tabel sunt returnate.

Un exemplu bun al unui consumator de date pentru care această tehnologie este destinată este o aplicație pentru extragerea, transformarea și încărcarea datelor (ETL). Aplicația ETL descarcă treptat informații despre modificările de la tabelele SQL Server originale la depozitul de date sau datele. Deși prezentarea tabelelor sursă din depozitul de date ar trebui să reflecte modificările din aceste tabele, utilizarea tehnologiei care ar actualiza replicile tabelului sursă nu este adecvată în acest caz. În schimb, este necesar un flux fiabil de date de schimbare, structurat astfel încât consumatorii să poată aplica datele reprezentative de date eterogene. În SQL Server, această tehnologie este furnizată de un sistem de urmărire a datelor modificat.

Sistemul de urmărire a modificărilor de date este disponibil numai în edițiile următoare: Enterprise, Developer and Evaluation SQL Server.

Figura următoare prezintă fluxul principal de date pentru un sistem de urmărire a datelor modificat.

Sursa informațiilor privind modificările pentru sistemul de urmărire a datelor modificat este jurnalul de tranzacții SQL Server. Întrucât inserțiile, actualizările și ștergerile sunt făcute în tabelele monitorizate inițial, înregistrările care descriu aceste modificări sunt adăugate în jurnal. Jurnalul este introdus în procesul de urmărire a datelor modificate. Citește datele jurnalului și adaugă informații despre modificările aduse tabelului de schimb asociat tabelului monitorizat. Funcțiile sunt furnizate pentru a enumera modificările care apar în tabelele de schimbare dintr-un interval dat și pentru a returna informațiile sub forma unui set de rezultate filtrate. Setul de rezultate filtrate este folosit în mod obișnuit de procesul de aplicare pentru a actualiza vizualizarea sursă în mediul extern.

Înainte de a putea urmări modificările tabelelor individuale de baze de date, trebuie să activați în mod explicit sistemul de urmărire pentru datele modificate din această bază de date. Puteți face acest lucru utilizând procedura stocată sys.sp_cdc_enable_db. Când activați baza de date, tabelele sursă pot fi identificate ca fiind urmărite utilizând procedura stocată sys.sp_cdc_enable_table. Dacă includeți un sistem de urmărire a modificărilor de date pentru o tabelă, este creată o instanță de urmărire a modificărilor asociate pentru a distribui datele schimbării în tabela sursă. O copie a sistemului de urmărire constă dintr-o tabelă de schimbare și una sau două funcții de interogare. Metadatele care detaliază detaliile configurației instanței de urmărire sunt stocate în tabelele de urmărire a modificării metadatelor cdc.change_tables. cdc.index_columns și cdc.captured_columns. Puteți obține această informație utilizând procedura stocată sys.sp_cdc_help_change_data_capture.

Toate obiectele asociate cu instanța sistemului de urmărire sunt create în schema sistemului de urmărire modificat a datelor pentru baza de date activată. Numele instanței instanței de urmărire trebuie să fie un nume de obiect valid care este unic pentru toate instanțele sistemului de urmărire pentru respectiva bază de date. Numele implicit este sursă de tabel. Tabelul de schimbare asociat este denumit prin adăugarea cuvântului cheie _CT la numele instanței sistemului de urmărire. Funcția care este utilizată pentru a solicita toate modificările este denumită prin adăugarea la începutul numelui instanței sistemului de urmărire a prefixului fn_cdc_get_all_changes_. Dacă instanța sistemului de urmărire este configurată să suporte modificările nete. Funcția interogare net_changes este, de asemenea, creată. care este denumit prin adăugarea la începutul numelui instanței de sistem de urmărire a prefixului fn_cdc_get_net_changes_.

Primele cinci coloane ale tabelului de modificări pentru sistemul de urmărire a datelor modificate sunt coloane de metadate. Ele oferă informații suplimentare relevante pentru înregistrarea schimbării. Coloanele rămase reflectă coloanele identificate identificate ale tabelului sursă după nume și tip. Aceste coloane stochează datele pentru coloanele monitorizate din tabela sursă.

Fiecare operație de inserare sau ștergere care a fost efectuată în tabela sursă este reflectată ca un rând din tabelul de schimbare. Coloanele de date din rândul care reflectă rezultatele operației de inserare conțin valorile postale ale coloanelor. Coloanele de date din rândul care reflectă rezultatele operației de ștergere conțin valorile coloanelor înainte de ștergere. Operația de actualizare necesită un singur rând pentru valorile coloanelor înainte de actualizare și al doilea rând pentru valorile coloanelor după actualizare.

Fiecare rând din tabelul de schimbare conține, de asemenea, metadate suplimentare care vă permit să interpretați operațiile de modificare. Coloana __ $ start_lsn identifică numărul jurnalului de tranzacții din jurnalul (numărul LSN) asociat cu schimbarea. LSN fix identifică atât operațiunile de modificare efectuate în cadrul aceleiași tranzacții cât și ordinea tranzacțiilor. Pentru a comanda alte modificări în aceeași tranzacție, puteți utiliza coloana __ $ seqval. În coloana de operare __ $, operația asociată cu schimbarea este scrisă: 1 = ștergere, 2 = inserare, 3 = actualizare (imagine sursă) și 4 = actualizare (imagine după operare). Coloana __ $ update_mask este o mască bit-variabilă, în care fiecare bit corespunde fiecărei coloane urmărite. Pentru introducerea operațiunilor de inserare și ștergere, toți biți din masca de actualizare vor fi întotdeauna setați. Linile de operare de actualizare vor avea doar biții corespunzători coloanelor modificate.

Perioada de valabilitate a sistemului modificat de urmărire a datelor pentru baza de date este momentul în care datele de schimbare sunt disponibile pentru instanțele de urmărire. Perioada de valabilitate începe cu crearea primei instanțe de urmărire pentru tabela de baze de date și continuă până în prezent.

Datele stocate în tabelele de schimbare vor crește necontrolat, cu excepția cazului în care datele sunt trunchiate periodic și sistematic. Procesul de curățare a sistemului de urmărire a datelor modificat este responsabil pentru politica de curățare obligatorie a datelor după expirarea perioadei lor de păstrare. În primul rând, acesta mișcă punctul de sfârșit inferior al perioadei de valabilitate în conformitate cu constrângerile de timp. Apoi, intrările din tabelul de schimbare care au expirat sunt șterse. Implicit, aceste date sunt stocate timp de trei zile.

La capătul final, deoarece procesul de urmărire captează fiecare pachet de informații despre schimbări noi, se adaugă intrări noi în cdc.lsn_time_mapping pentru fiecare tranzacție pentru care există intrări în tabelul de schimbare. În tabelul de mapare, numărul de înregistrare a tranzacției în jurnal și timpul de comitere a tranzacției (coloanele start_lsn și tran_end_time, respectiv) sunt stocate. Valoarea LSN maximă găsită în cdc.lsn_time_mapping. reprezintă punctul final al intervalului de valabilitate. Timpul de angajare corespunzător este folosit ca valoare de bază de la care curățarea datelor după perioada de reținere calculează noua valoare a punctului final inferior.

Deoarece procesul de urmărire extrage informații despre modificările din jurnalul de tranzacții, există o întârziere naturală între momentul în care modificarea este fixată în tabela sursă și momentul în care această modificare este înregistrată în tabelul de schimbări conectat. Deși această întârziere este de obicei mică, este important să rețineți că informațiile despre schimbare nu sunt disponibile până când procesul de urmărire procesează intrările relevante din jurnal.

Deși, de obicei, perioadele de valabilitate pentru baza de date și instanța individuală de urmărire sunt aceleași, uneori nu este cazul. Perioada de valabilitate a instanței de urmărire începe atunci când procesul de urmărire recunoaște instanța de urmărire și începe să scrie modificările asociate tabelului de schimbare. Ca rezultat, dacă instanțele de urmărire sunt create în momente diferite, fiecare va avea propriul punct final inferior. Coloana start_lsn a setului de rezultate, care este returnat de funcția sys.sp_cdc_help_change_data_capture. afișează punctul final inferior pentru fiecare instanță specifică de urmărire. Când procesul de curățare șterge intrările tabelului de schimbare, acesta ajustează valorile start_lsn pentru toate instanțele de urmărire pentru a reflecta noul punct final inferior pentru fiecare set disponibil de informații despre schimbare. Numai acele cazuri de urmărire ale căror valori actuale start_lsn sunt mai mici decât noul punct final inferior sunt ajustate. Cu timpul, dacă nu se creează noi instanțe de urmărire, perioadele de valabilitate pentru toate instanțele individuale vor coincide treptat cu perioada de valabilitate a bazei de date.

Perioada de valabilitate este importantă pentru consumatorii datelor de schimbare, deoarece intervalul de recuperare a solicitării trebuie acoperit integral de perioada de valabilitate a sistemului de urmărire a datelor modificat pentru instanța de urmărire. Dacă punctul de sfârșit inferior al intervalului de recuperare se suprapune peste punctul de sfârșit inferior al perioadei de valabilitate, este posibil să pierdeți informații despre modificările cauzate de curățarea prea agresivă. Dacă punctul de capăt superior al intervalului de extracție se suprapune peste punctul final al perioadei de valabilitate, procesul de urmărire nu va avea timp să proceseze datele în timpul reprezentat de intervalul de extracție, prin urmare, este posibilă și pierderea informațiilor despre modificări.

Funcția sys.fn_cdc_get_min_lsn este utilizată pentru a obține numărul minim de curent LSN, de exemplu, urmărirea și funcția sys.fn_cdc_get_max_lsn este utilizată pentru a obține numărul maxim de curent LSN. Funcțiile de interogare ale sistemului de urmărire a datelor modificate vor eșua cu o cerere de modificare a datelor dacă intervalul specificat de numere LSN depășește aceste două numere LSN.

Modificarea modificărilor coloanelor în tabelele sursă care stau la baza este o problemă destul de dificilă pentru utilizatorii de fluxuri de date. În timp ce includerea de captare a datelor schimbare în tabela sursă nu împiedică acest tip de sistem de urmărire a DDL-schimbare ajută la reducerea impactului lor asupra consumatorilor din cauza imutabilitatea seturile de rezultate care sunt returnate de către API-interfață, chiar la baza originale modificări structura de masă. O structură cu coloană fixă ​​se reflectă și în tabelele de schimbare de bază la care sunt accesate funcțiile de interogare.

Pentru a sprijini modificările de masă, având o structură fixă ​​a coloanei, procesul de urmărire, care este responsabil pentru finalizarea modificărilor de masă, nu ține cont de coloane de urmărire noi, non-specifice, în cazul în care tabela sursă este activată schimbare de captare de date. În cazul în care coloana monitorizată este ștearsă, intrările nule sunt specificate în înregistrările de modificare corespunzătoare. Dar, dacă se modifică coloana tipului de date existent, această modificare se reflectă în tabelul de schimbare pentru a preveni pierderea datelor în coloanele monitorizate. Procesul de urmărire trimite, de asemenea, toate modificările din structura coloanei tabelului monitorizat în tabela cdc.ddl_history. Consumatorii care doresc să primească un avertisment în legătură cu ajustările care ar putea avea nevoie pentru a face în cererea de legătură în jos utilizând o procedură stocată sys.sp_cdc_get_ddl_history.

În mod tipic, instanța de urmărire curentă continuă să își mențină formatul atunci când modificările DDL sunt aplicate tabelului sursă corespunzător. Cu toate acestea, pentru un tabel care reflectă noua structură a coloanei, puteți crea oa doua instanță a urmăririi. Acest lucru va permite procesului de urmărire să reproducă modificările la o tabelă sursă în două tabele de schimbare care au structuri diferite ale coloanelor. Astfel, în timp ce o tabelă de schimbare va furniza date aplicațiilor curente de lucru, cea de-a doua va servi drept sursă de date pentru mediul de dezvoltare care primește datele din noua coloană. Permițând instrumentului de urmărire să umple simultan ambele tabele de schimbare, puteți realiza o tranziție de la un format la altul fără a pierde informații. Acest lucru se poate întâmpla atunci când scala de timp a celor două sisteme de urmărire pentru schimbarea datelor se suprapun. Odată ce migrarea este completă, instanța de urmărire moștenită poate fi ștearsă.

Cu o singură sursă de tabel, puteți lega până la două instanțe ale urmăririi simultan.

Articole similare