sqlshack verwijderen

dit artikel onderzoekt het gebruik van meerdere SQL Server-transactielogboekbestanden en het proces van het verwijderen van het secundaire transactielogboekbestand.

Inleiding

standaard bevat een SQL Server-database een primair gegevensbestand en een transactielogboekbestand. Het is een goede praktijk voor het configureren van meerdere gegevensbestanden en het splitsen van gegevens over meerdere gegevensbestanden. We kunnen deze gegevensbestanden in afzonderlijke opslagstations hebben om meerdere IO te hebben. Het helpt gegevensbeheer, verbetert de prestaties, plannen back-up benaderingen volgens filegroups.

Databasearchitectuur

Databasearchitectuur

we kunnen ook meerdere transactielogbestanden voor een database hebben.

SQL Server gebruikt de meerdere transactielogbestanden in opeenvolgende volgorde. Stel dat we twee transactielogbestanden hebben. SQL Server gebruikt één logbestand per keer en zodra het vol is, gebruikt SQL Server een ander logbestand. Aangezien SQL Server het niet parallel gebruikt, krijgen we er geen prestatievoordeel van. Idealiter zouden we slechts één transactielogboekbestand per database moeten hebben.

laten we aannemen dat we een productiedatabase hebben, en we een kritische waarschuwing ontvangen dat de schijf ruimte tekort komt. Na onderzoek hebben we ontdekt dat deze schijf een transactielogboek bevat. Door actieve transacties is dit transactielogboekbestand van SQL Server vol. We hebben geprobeerd het logbestand te verkleinen, maar het werkte niet. We maken ook een back-up van het transactielogboek, maar door actieve transacties kon het de benodigde ruimte niet vrijgeven. Het toevoegen van een ander transactielogboekbestand op een aparte schijf met vrije ruimte lost dit probleem op.

aangezien SQL Server de seriële modus gebruikt voor het schrijven van gegevens in een transactielogboekbestand, moeten we het extra logbestand later verwijderen. Laten we het proces van het verwijderen van een extra logbestand verkennen.

Maak een database met meerdere transactielogboekbestanden van SQL Server

maak verbinding met een SQL-instantie in SQL Server Management Studio. Klik met de rechtermuisknop op het knooppunt Databases in het deelvenster Object Explorer en klik op het nieuwe Databasecommando:

Maak een nieuwe database aan

Maak een nieuwe database

het opent het nieuwe database venster. Geef een databasenaam op en voeg een ander transactielogboekbestand toe. Voor testdoeleinden hebben we de automatische groei van transactielogboekbestanden uitgeschakeld. De initiële grootte van het transactielogboekbestand is 8MB:

meerdere logbestanden opgeven

Specificeer meerdere logbestanden

nadat alles is ingesteld, klikt u op de OK knop om een database te maken in een standaard data/log bestand directory. Maak een tabel en voeg gegevens in:

1
2
3
4
5
6
7

GEBRUIK MultipleLogFiles;
NAAR
CREATE TABLE Werknemer
(EmpID INT IDENTITEIT(1, 1),
EmpName VARCHAR(50)
);
invoegen in waarden voor werknemers (EmpName) (‘Raj’)

bekijk de status van het virtuele logbestand in transactielogboekbestanden van SQL Server

In het artikel, SQL Server Transactielogarchitectuur, hebben we de interne van het transactielogbestand onderzocht. Elk transactielogboekbestand bestaat uit meerdere virtuele logbestanden. Een transactielogboekbestand is een combinatie van meerdere virtuele logbestanden (VLF). De volgende screenshot toont de fysieke en logische architectuur van het logbestand:

fysieke en logische architectuur van SQL Server transactionn log

fysieke en logische architectuur van SQL Server transactionn log

SQL Server stats een database met minimale VLF op basis van de initiële loggrootte en auto grow bestand (gebaseerd op de auto-Grow configuratie). In de volgende afbeelding krijgen we een glimp van het SQL Server transactielogboekbestand:

circulair logbestand

circulair logbestand

in het geval van een enkel transactielogboekbestand gebruikt SQL Server een circulair virtueel logbestandspad. We kunnen het aantal virtuele logbestanden en hun status controleren met behulp van de volgende:

  1. DBCC LOGINFO – ‘Database’) – het is een oud statement en werkt met alle SQL Server-versies
  2. Dynamic management view sys.dm_db_log_info (DBID). Het is beschikbaar vanaf SQL Server 2016 SP2 of hoger

elk van de opdrachten kan worden gebruikt voor de VLF-controle. Voor dit artikel zullen we gebruik maken van het beheer van dynamische weergave (DMV):

1
2

SELECTEER *
VAN sys.dm_db_log_info(DB_ID(‘MultileLogFiles’));

Monitor VLF status

In het bovenstaande screenshot, we hebben geverifieerd dat onze steekproef de database bevat twee transactie log boek bestanden (file_id 2 en file_id 3).

  • File_id 2 actieve VLF (vlf_active=1 en vlf_status=2)
  • File_id 3 heeft geen actieve VLF (vlf_active=0 en vlf_status=2)

Laten we het invoegen van een paar meer records in de tabel, zodat de werkzame VLF zal veranderen:

1
2

Insert into Werknemers (EmpName) Values (‘Jan’)
Ga 3000

De transactie log ruimte monitoring van het gebruik en VLF-status zal worden gedaan met de DMV (sys.dm_db_log_space_usage):

  • VLF-status

    1
    2

    SELECTEER DB_name() als Databasenaam,File_ID als transaction_log_file_ID, vlf_active , vlf_status
    VAN sys.dm_db_log_info(DB_ID(‘MultileLogFiles’));

  • het gebruik van transactielogboeken (gebruikte en vrije ruimte)

    1
    2
    3
    4
    5

    SELECTEER total_log_size_in_bytes*1.0/1024/1024 total_log_size_in_MB,
    used_log_space_in_bytes*1.0/1024/1024 used_log_space_in_MB,
    (total_log_size_in_bytes – used_log_space_in_bytes)*1.0/1024/1024
    ALS free_log_space_in_MB
    VAN sys.dm_db_log_space_usage;

dan krijgen We de volgende output van de bovenstaande query ‘ s:

  • Op de linkerzijde zien we dat zodra de primaire log bestand (file_id 2) vol is, wordt het verplaatst naar de volgende log-bestand (file_id 3). Op dit punt hebben we actieve VLF in zowel primaire als secundaire logbestanden. In een database met een volledig herstelmodel hebben we een back-up van het transactielogboek nodig, zodat het VLF markeert als inactief
  • de uitvoer aan de rechterkant (met DMV) toont het gebruikte transactielogboekbestand met ruimte 8,51 MB. Zoals u zich herinnert, hebben we een grootte van 8 MB ingesteld voor elk transactielogboekbestand en hebben we automatische loggroei uitgeschakeld. Als het primaire logbestand vol is (bij 8 MB), zal SQL Server overschakelen naar het secundaire transactielogboekbestand

verwijder het secundaire transactielogboekbestand van SQL Server

om het secundaire transactielogboekbestand (file id 3) te verwijderen, zullen we de edited Alter database statement gebruiken.

we zullen de clausule bestand verwijderen toevoegen en het bestand opgeven dat we willen verwijderen:

1
2

ALTER DATABASE VERWIJDEREN BESTAND
GA

Uitvoering van deze verklaring zal resulteren in het volgende fout bericht:

Fout bericht

Fout boodschap

Opmerking: De actieve transactie log boek bestand kan niet worden verwijderd.

eerder zagen we dat als het primaire logbestand vol is, SQL Server het secundaire logbestand gebruikt. We moeten een tweede transactielogboek leeg maken, zodat we het kunnen verwijderen.

in de SQL-database met een volledig herstelmodel gebruiken we back-ups van transactielogbestanden zodat SQL Server de logs kan afkappen. We hebben hiervoor mogelijk meerdere log-back-ups nodig, afhankelijk van de grootte van het transactielogboek, de actieve VLF en de actieve transactie.

laten we een volledige database-en transactielogboekback-up maken:

  • volledige databaseback-up

    1
    backup Database MultipleLogFiles naar disk=’C:\Temp\MultipleLogFiles.bak’
  • reservekopie van transactielogboek

    1
    backup Log MultipleLogFiles naar disk=’C:\Temp\MultipleLogFiles_log.trn’

zodra de back-up is voltooid, controleert u de VLF-status. De actieve VLF moet in het eerste logbestand(primair) staan, zodat we het secundaire logbestand kunnen verwijderen. We hebben geverifieerd dat alleen het primaire logbestand (file_id 2) actief is (VLF Status 2):

VLF-status

VLF-status

nu moet het secundaire transactielogboekbestand probleemloos worden verwijderd. Laten we het bewerkte ALTER database statement opnieuw uitvoeren. Het secundaire transactielogboekbestand wordt verwijderd:

secundair logbestand verwijderen

verwijder secundair logbestand

zodra het secundaire transactielogbestand is verwijderd, controleert u dit met zowel de GUI als T-SQL met systeemweergave-sys.databasebestand:

1
2
3
4
5

SELECTEER file_id,
naam
type_desc,
physical_name
VAN sys.database_bestanden;

het verwijderde secundaire transactielogboekbestand is nog steeds aanwezig volgens de volgende schermafbeelding:

verwijder logbestand controleren

Controleer verwijderd logbestand

klik nu met de rechtermuisknop op de database en bekijk bestaande bestanden. We zien het verwijderde transactielogboekbestand ook in de GUI. Maar waarom?

Ssm ' s van logbestanden verifiëren

Verify log file SSMS

laten we het bewerkte ALTER database statement opnieuw uitvoeren en kijken of SQL Server opnieuw het transactielogboekbestand verwijdert.

we kregen het bericht dat SQL Server het opgegeven logbestand niet kon vinden:

fout-bericht

foutbericht

SQL Server verwijdert het transactielogboekbestand na een volgende logback-up. Laten we een andere log back-up nemen en controleren of het transactielogboekbestand nog bestaat:

1
backup Log MultipleLogFiles naar disk=’C:\Temp\MultipleLogFiles_log_1.trn’

reservekopie van transactielogboek

transactielogboekback-up

controleer het transactielogboekbestand in zowel GUI-als T-SQL-methoden. We zien dat het verwijderde transactielogboekbestand nu niet verschijnt.

conclusie

In dit artikel hebben we het gebruik van het secundaire SQL Server transactielogboek en het proces van het verwijderen ervan onderzocht. Vermijd het gebruik van meerdere transactielogbestanden, vooral in de productiedatabase. U moet een database back-up nemen voordat u een activiteit plant en doe het in niet-productiviteit uren.

  • auteur
  • recente berichten
Rajendra Gupta
als MCSA certified en Microsoft Certified Trainer in Gurgaon, India, met 13 jaar ervaring, Rajendra werkt voor een verscheidenheid van grote bedrijven gericht op prestatie-optimalisatie, monitoring, hoge beschikbaarheid, en disaster recovery strategieën en implementatie. Hij is de auteur van honderden gezaghebbende artikelen over SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS/Amazon RDS, Git, en aanverwante technologieën die zijn bekeken door meer dan 10m lezers tot nu toe.
hij is de maker van een van de grootste gratis online collecties van artikelen over een enkel onderwerp, met zijn 50-delige serie op SQL Server Always On Availability Groups. Op basis van zijn bijdrage aan de SQL Server community, werd hij in 2020 en 2021 bij SQLShack onderscheiden met verschillende prijzen, waaronder de prestigieuze “beste auteur van het jaar”.Raj is altijd geïnteresseerd in nieuwe uitdagingen, dus als je advies nodig hebt over een onderwerp dat in zijn geschriften wordt behandeld, kan hij worden bereikt in [email protected]
Bekijk alle berichten van Rajendra Gupta

Rajendra Gupta
Laatste bericht door Rajendra Gupta (zie alle)
  • Gebruik de ARM templates te implementeren Azure container exemplaren met SQL Server Linux images – December 21, 2021
  • bureaublad op Afstand toegang voor AWS RDS SQL Server met Amazon RDS-Aangepaste – December 14, 2021
  • het Opslaan van SQL Server bestanden in Permanente Opslag voor Azure Container Gevallen – December 10, 2021

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.