Riktheni të dhënat e fshira SQL nga transaction log

Në artikullin Recover deleted SQL data from a backup or from online database files, ne kemi paraqitur dy skenare të rikthimit, njëra nga një kopje e plotë e databazës dhe tjetra nga fjallat e databazës aktive apo online, pra fajllat MDF. Përveç këtyre, ka edhe një burim tjetër që ju mund ta përdorni kur vie në shprehje rikthimi i të dhënave nga transaction log.

Cdo ndryshim i të dhënave dhe i skemave të një SQL Server databaze futet apo ruhet në një transaction log fajll aktiv, si një gjurmë. Nëse transakcionet e fshira që ju dëshironi t’i ktheni, janë në transaction log aktiv, transaction log të shkëputur (detached) ose kopje të një transaction log, ju mund t’i lexoni ato dhe t’i riktheni

Nëse databaza juaj është:

  • Në modelin Full Recovery, transakcionet DELETE janë ende në fajllin aktiv të transaction log ose në kopje të transaction log, duke përmbajtur info se cfarë është krijuar pas fshirjës së rekordeve apo rreshtave.
  • Në modelin Bulk_looged Recovery, ku transakcionet e fshira gjurmohen apo ruhen në transaction log fajll dhe futjet (insertimet) BLOB shënimeve nuk gjurmohen për shkak të modelit Bulk_logged Recovery, rikthimi i tyre do të jetë i pamundur. Për tipet tjera të të dhënave, transakcionet e fshirjës janë në një fajll transaction log aktiv (online) ose kopje të transaction log i krijuar pas fshirjës.
  • Modeli Simple Recovery edhe këtu janë ekzekutuar shumë transakcione në databazë pas fshirjës së rekordeve, ku transakcionet e fshira mund të mos jenë më në fajllin aktiv të transaction log. Në të tilla raste sa më shpejtë që të veproni në databazë me një SQL Server lexues të transaction log fajllit, më të mira do t’i keni gjasat për t’i rikthyer të dhënat në mënyrë të suksesshme.

Përdorimi i ApexSQL Log

Për të lexuar një fajll të transaction log të një databaze, apo transaction log të shkëputur(detached) dhe kopje të transactin log, edhe rastet kur janë të kompresuara, përdorni ApexSQL Log. Është lexues i SQL Server transaction log, i cili mund të kontrollon, rikthen dhe ribënë të dhënat dhe objektet që kan pësuar ndryshime duke përfshirë edhe ato ndryshime që kan ndohur para se të instalohet ApexSQL Log. Ajo gjithashtu kap informacionin se cili përdorues, aplikacion dhe kompjuter ka bërë ndryshimet

  1. Filloni me ApexSQL Log
  2. Lidhuni me databazën në të cilën janë bërë fshirjet e të dhënave apo rekordeve.

    Connecting to the database in ApexSQL Log

  3. Nëse ndonjë kopje e transaction log fajll është krijuar edhe pas fshirjës së rekordeve, shtoni të gjitha në hapin e ardhshëm. Me kujdes që transaction log fajllat duhet të kenë renditjën në varg të rregulltë nëse rekordet që ju po dëshironi t’i riktheni përmbajnë edhe BLOB të dhënë (shikoni më poshtë për më shumë detaje në këtë qështje).
  4. Në rastet kur të keni transaction log fajlla të shkëputura (detached) të cilat përmbajnë rekorde të fshira (për shembull nëse ju vendosni databazën e juaj offline dhe kopjoni LDF fjallat menjëherë pas fshirjës) ju gjithashtu mund t’i përdorni ato.

    Select log data source file

  5. Përdorni seksioni Time range tek opcioni i filtrave Filter setup për të caktuar brezin kohor të transakcioneve që kan ndodhur në atë kohë të caktuar.

    Filtering transactions by time range

  6. Përdorni filterin e operimeve Operations në mënyrë që të selektoni apo të caktoni vetëm rekordet e fshira. Për ta bërë këtë, mos i markoni me klik të gjitha operimet e skemave (DDL) gjithashtu Insert row dhe Update row opcionet në listën e DML operacioneve apo operations (DML).

    Choosing deleted SQL records only

  7. Nëse është e mundur, specifikoni apo caktoni tabelat prej të cilave është bërë fshirja. Nëse jo, lëreni të gjitha tabelat e caktuara apo të zgjedhura.

    Specifying the records from which the records have been deleted

  8. Klikoni Open
  9. Të gjitha DELETE transakcione janë paraqitur në pjesën kryesore të aplikacionit. E tëra cka duhet të bëni është që të zgjedhni të gjitha ose vetëm ato që ju nevojiten, dhe klikoni Create Undo Script për të krijuar skriptën e rikthimit.

    Create Undo Script in ApexSQL Log

  10. Që të krijoni një skriptë për rikthimin e të gjitha rekordeve që janë paraqitur në pjesën kryesore të aplikacionit, klikoni Create undo Script në menu. Që të krijoni skriptën për rikthim të vetëm disa rekordeve, zgjedhni ato nga aplikacioni dhe në menunë e kontekstit zgjedhni Create undo script.

    Skripta e cila do të futë të dhënat e fshira do të krijohet

    Generated Undo Script

  11. Për ta ekzekutuar skriptën, klikoni Run button në menu.

Përdorni ApexSQL Log për të krijuar skriptën e rikthimit (undo) në mënyrë të shpejtë

Metoda e përshkruar me rezultatet e paraqitura në aplikacion është e pranueshme vetëm në rastet e një numëri të vogël të të dhënave. Kur vie në shprehje rasti me miliona rekorde të fshira, ne rekomandojmë që ta krijoni skriptën e rikthimit (undo) në mënyrë të shpejtë, në vend se të paraqitën të gjitha rekordet paraprakisht në aplikacion. Hapet nga 1 deri në 7 janë të njëjta me ato më lartë.

  1. Në vend se të përdorni Open results in grid, klikoni Export results to a file

    Export results to a file

  2. Zgjedhni Generate rollback (undo) script dhe specifikoni apo caktoni vendin dhe emrin e fajllit .sql që do të ruhet në disk.

    Generate Rollback (UNDO) Script

  3. Klikoni OK

    Skripta e rikthimit (undo) e cila do të shtoj të gjitha rekordet e fshira në tabelat përkatëse do të krijohet

    Exporting finished

Përdorni ApexSQL Recover

Kjo është një vegël tjetër nga vegëlat e ApexSQL, e cila mund të lexon SQL Server transaction log fajllin – një transaction log fajll aktiv (online), transaction log të shkëputur (detached) dhe kopje të transaction log normal apo të kompresuar. ApexSQL Recover është një vegël për rikthim të SQL Server databazave e cila bënë kthimin e të dhënave të fshira (deleted), të fshira masovikisht (truncated), korruptuara ose të dhënave të dëmtuara. Ajo bënë rikthimin e objketeve dhe të dhënave të humbura si pasoj e operimeve të fshirjës me Drop komandë dhe rikthen që të dyja, fajllat e fshira dhe BLOG fajllat online. Procesi i rikthimit është mjaftë i thjeshtë siç është përshkruar njëri prej rasteve këtu: Recover deleted SQL data from a backup or from online database files – Use ApexSQL Recover

  1. Filloni me ApexSQL Recover
  2. Zgjedhni Recover lost data due to a DELETE operation
  3. Caktoni instancën e SQL Server, kredencialet e sigurisë për qasje dhe databazën ku jan fshirë rekordet apo rreshtat e caktuar.
  4. Zgjedhni Several sources are available for the recovery
  5. Transaction log fajlli online, të gjitha kopjet e transaction log dhe kopjet e krijuara të databazave për databazën e zgjedhur do të paraqitën në listë në mënyrë automatike. Për të shtuar transaction log fajlla shtesë ose transactin log të shkëputura të cilat përmbajnë rekorded e fshira, përdorni butonin Add. Do të duhej të keni kujdes që kopjet e transaction log duhe t’iu përgjigjen vargut të rregulltë dhe të plotë në mënyrë rendore.
  6. Caktoni brezin kohor kur shprehja Delete është ekzekutuar. Nëse ju nuk e dini se kur ka ndodhur kjo zgjedhni Date and time are unknown
  7. Përdorni filrin e tebelave për të zgjedhur vetëm tabelat e caktuara nëse është e aplikueshme.
  8. Klikoni Recover
  9. Një skriptë që shton vlerat e fshira do të krijohet. Kontrolloni atë dhe ekzekutoni.

Lajmi i mirë për rekordet e fshira është se ka një mundësi për rikthimin e suksesshëm të tyre edhe pa e pasur një kopje të databazës, ose një kopje të transaction log. Të keni kujdes se rikthimi i suksesshëm për të dhënat e fshira BLOB nuk do të jetë i mundur pa vargun e rregullt rendor të transaction log. Pasi që fshirja e BLOB transakcionit nuk regjistrohet si vlerë e fshirë, është e nevojshme që të shkohet në sekuencat e kopjeve të transaction log deri tek fillimi i vargut të kopjeve. Nëse ka thyerje të vargut, rikonstruktimi mund të jetë gabim. Për shembull, nëse mungon info për freskim (update) rreth një BLOB të dhëne, në mënyrë origjinale do të rikthehet BLOB i futur në vend të atij që është fshirë.

Madej edhe me rastin e një databaze e cila është modelin e Simple recovery, ka mundësi të rikthimi. Në modelin Simple Recovery transakcionet e reja regjistrohen në fajllin aktiv të transaction log duke i rishkruar ato të vjetrat. Nëse një transaction log fajll është 100 GB dhe ju keni 1GB regjistrime në transaction log fajll cdo ditë, transaction log fajlli aktiv (online) do të ripërshkruhet brenda 100 ditëve. Kjo tregon se ju mund të riktheni të dhënat e fshira deri pak para 100 ditëve.

Natyrisht se kjo nuk duhet të nënkuptohet se ju duhet të hiqni dorë dhe të harroni nga strategjitë e juaja për katastrofa dhe rikthim (disaster recovery).

ApexSQL ka dy vegëla të cilat ju ndihmojnë me transaction log fajlla. ApexSQL Log ju mundëson më shumë opcione për filtrim dhe detaje të rekordeve të rikthyera – përveç filtrit sipas kohës dhe emrit të tabelave e cila është një tipar i zakonshëm në të dy vegëlat, kjo ka mundësinë e filtrimit të tabelave sistemore, rekordet e bazuara në një vlerë të caktuar të kolonës, përshkrimin e transakcionit sipas përdoruesit që ka bërë fshirjën dhe rastin kur ApexSQL Log monitoron kohën e ndryshimit të rekordit sipas emrit të aplikacionit dhe emrit makinës apo kompjuterit prej të cilit ka ndodhur.

ApexSQL Recover ka me pak opcione për filtrim, por përmbanë më shumë opcione për rikthim. Përveç krijimit të T-SQL skriptës e cila futë të dhënat, ajo mund të krijon një databazë të re dhe të bëjë rikthimin e rekordeve të fshirë në mënyrë të drejpërdrejtë në të.

Përkthyes: Dukagjin Maloku

October 20, 2015