Batch-script om SQL Server-databaseonderhoud eenvoudig te maken
Naast het maken van back-ups zijn er verschillende taken en functies die SQL Server beschikbaar stelt en die zowel de prestaties als de betrouwbaarheid van uw databases kunnen verbeteren. We hebben u eerder laten zien hoe u SQL Server-databases kunt back-uppen met een eenvoudig script voor de opdrachtregel, zodat we op dezelfde manier een script bieden waarmee u eenvoudig algemene onderhoudstaken kunt uitvoeren.
Een database comprimeren / verkleinen [/ Compact]
Er zijn verschillende factoren die bijdragen aan de fysieke schijfruimte die een SQL Server-database gebruikt. Om er een paar te noemen:
- In de loop van de tijd wanneer records worden toegevoegd, verwijderd en bijgewerkt, groeit en groeit SQL voortdurend, evenals het genereren van tijdelijke gegevensstructuren om querymanipulaties uit te voeren. Om aan de schijfopslagbehoeften tegemoet te komen, zal SQL Server de grootte van de database (gewoonlijk met 10%) vergroten, zodat de bestandsgrootte van de database niet constant verandert. Hoewel dit ideaal is voor prestaties, kan het leiden tot een verbinding met de gebruikte opslagruimte, omdat als u bijvoorbeeld een zeer groot aantal records toevoegt waardoor de database groeit en vervolgens deze records verwijdert, SQL Server dit niet automatisch terugvordert schijfruimte.
- Als u de volledige herstelmodus in uw databases gebruikt, kan het transactielogbestand (LDF) behoorlijk groot worden, vooral in databases met veel updates.
Als u de database comprimeert (of verkleint), wordt ongebruikte schijfruimte opnieuw opgeëist. Voor kleine databases (200 MB of minder) zal dit meestal niet veel zijn, maar voor grote databases (1 GB of meer) kan de teruggewonnen ruimte aanzienlijk zijn.
Een database opnieuw indexeren [/ indexeren]
Net als het constant maken, bewerken en verwijderen van bestanden kan dit leiden tot schijffragmentatie, invoegen, bijwerken en verwijderen van records in een database kan leiden tot tabelfragmentatie. De praktische resultaten zijn hetzelfde in die zin dat lees- en schrijfbewerkingen leiden tot een prestatieklap. Hoewel het geen perfecte analogie is, defragmenteert het de tabellen in een database opnieuw. In sommige gevallen kan dit de snelheid van het ophalen van gegevens aanzienlijk verhogen.
Vanwege de manier waarop SQL Server werkt, moeten tabellen individueel opnieuw worden geïndexeerd. Voor databases met een groot aantal tabellen kan dit erg lastig zijn om handmatig te doen, maar ons script slaat elke tabel in de respectieve database op en herbouwt alle indexen.
Verificatie van integriteit [/ Verify]
Om ervoor te zorgen dat een database zowel functioneel blijft als nauwkeurige resultaten oplevert, zijn er tal van integriteitsitems die aanwezig moeten zijn. Gelukkig zijn fysieke en / of logische integriteitsproblemen niet erg gebruikelijk, maar het is een goede gewoonte om af en toe het integriteitsverificatieproces in uw databases uit te voeren en de resultaten te bekijken.
Wanneer het verificatieproces door ons script wordt uitgevoerd, worden alleen fouten gerapporteerd, dus geen nieuws is goed nieuws.
Het gebruik van het script
Het batchscript van SQLMaint is compatibel met SQL 2005 en hoger en moet worden uitgevoerd op een computer waarop de SQLCMD-tool is geïnstalleerd (geïnstalleerd als onderdeel van de SQL Server-installatie). Het wordt aanbevolen om dit script naar een locatie te verplaatsen die is ingesteld in uw Windows PATH-variabele (zoals C: Windows), zodat het gemakkelijk kan worden aangeroepen zoals elke andere toepassing vanaf de opdrachtregel.
Om de help-informatie te bekijken, voert u eenvoudigweg het volgende in:
SQLMaint /?
Voorbeelden
Om een compact uit te voeren en vervolgens een verificatie in de database "MyDB" met behulp van een vertrouwde verbinding:
SQLMaint MyDB / Compact / Verifiëren
Ga als volgt te werk om een reindex uit te voeren en druk vervolgens op "MyDB" in het benoemde exemplaar "Special" met behulp van de "sa" -gebruiker met het wachtwoord "123456":
SQLMaint MyDB /S:.Special / U: sa / P: 123456 / Reindex / Compact
Gebruiken van binnen uit een batch-script
Hoewel het batchscript van SQLMaint kan worden gebruikt als een toepassing van de opdrachtregel, moet het worden voorafgegaan door het CALL-trefwoord wanneer u het in een ander batchtype gebruikt.
Dit script voert bijvoorbeeld alle onderhoudstaken uit op elke niet-systeemdatabase op een standaard SQL Server-installatie met behulp van vertrouwde verificatie:
@ECHO OFF
SETLOCAL EnableExtensions
SET DBList = "% TEMP% DBList.txt"
SqlCmd -E -h-1 -w 300 -Q "SET NoCount AAN; SELECT-naam FROM master.dbo.sysDatabases WHERE Naam niet IN ('master', 'model', 'msdb', 'tempdb') ">% DBList%
FOR / F "usebackq tokens = 1" %% i IN (% DBList%) DO (
CALL SQLMaint "%% i" / Compact / Reindex / Verify
ECHO +++++++++++
)
IF EXIST% DBList% DEL / F / Q% DBList%
ENDLOCAL
Download het SQLMaint Batch Script van SysadminGeek.com