Batch Script for å gjøre SQL Server Database Maintenance Simple
I tillegg til å lage sikkerhetskopier, finnes det en rekke oppgaver og funksjoner som SQL Server gjør tilgjengelig, som både kan forbedre ytelsen og påliteligheten til databasene dine. Vi har tidligere vist deg hvordan du sikkerhetskopierer SQL Server-databaser med et enkelt kommandolinjeskript, slik at vi på samme måte gir et skript som lar deg enkelt utføre vanlige vedlikeholdsoppgaver.
Komprimere / krympe en database [/ kompakt]
Det er flere faktorer som bidrar til den fysiske diskplassen en SQL Server-database bruker. Bare for å nevne noen få:
- I takt med at poster legges til, slettes og oppdateres, vokser SQL stadig og krymper tabeller, samt genererer midlertidige datastrukturer for å utføre spørringsmanipulasjoner. For å imøtekomme behovene til disklagring, vil SQL Server øke størrelsen på databasen (vanligvis med 10%) etter behov, slik at databasestørrelsen ikke endres kontinuerlig. Selv om dette er ideelt for ytelse, kan det føre til at du kobler fra lagringsplassen som brukes, fordi hvis du for eksempel legger til et veldig stort antall poster som fører til at databasen vokser og deretter sletter disse postene, vil SQL Server ikke automatisk gjenopprette dette diskplass.
- Hvis du bruker Full Recovery Mode på databasene, kan Transaksjonsloggfilen (LDF) bli ganske stor, spesielt på databaser med høyt volum av oppdateringer.
Komprimering (eller krymping) databasen vil gjenvinne ubrukt diskplass. For små databaser (200 MB eller mindre) vil dette vanligvis ikke være veldig mye, men for store databaser (1 GB eller mer) kan det gjenvunnne rommet være betydelig.
Reindexing a Database [/ Reindex]
I likhet med å stadig lage, redigere og slette filer kan det føre til fragmentering av disker, innsetting, oppdatering og sletting av poster i en database kan føre til tabellfragmentering. De praktiske resultatene er de samme fordi lese- og skriveoperasjoner har en prestasjonsfeil. Selv om det ikke er en perfekt analogi, defragmenterer de de fleste tabeller i en database. I noen tilfeller kan dette øke hastigheten på datainnhenting betydelig.
På grunn av måten SQL Server fungerer, må tabellene bli reindexert individuelt. For databaser med et stort antall tabeller kan dette være ekte smerte å gjøre manuelt, men vårt skript treffer hvert bord i den respektive databasen og gjenoppbygger alle indeksene.
Verifiserer integritet [/ Verifiser]
For at en database skal forbli både funksjonell og produsere nøyaktige resultater, er det mange integritetstyper som må være på plass. Heldigvis er fysiske og / eller logiske integritetsproblemer ikke så vanlige, men det er en god praksis å av og til kjøre integritetsverifikasjonsprosessen på databasene og se resultatene.
Når verifiseringsprosessen kjøres gjennom vårt skript, blir det kun rapportert feil, så ingen nyheter er gode nyheter.
Bruke skriptet
SQLMaint-batch-skriptet er kompatibelt med SQL 2005 og høyere og må kjøres på en maskin som har installert SQLCMD-verktøyet (installert som en del av SQL Server-installasjonen). Det anbefales at du slipper dette skriptet til et sted som er angitt i Windows PATH-variabelen (dvs. C: Windows), slik at det lett kan kalles som et hvilket som helst annet program fra kommandolinjen.
For å se hjelpinformasjonen, skriv inn:
SQLMaint /?
eksempler
Å kjøre en kompakt og deretter en bekreftelse på databasen "MyDB" ved hjelp av en klarert tilkobling:
SQLMaint MyDB / Compact / Verify
For å kjøre en reindex og deretter komprimere på "MyDB" på den nevnte forekomsten "Special" ved hjelp av "sa" brukeren med passord "123456":
SQLMaint MyDB / S: Special / U: sa / P: 123456 / Reindex / Compact
Bruke fra innsiden av et batchskript
Mens SQLMaint-batch-skriptet kan brukes som et program fra kommandolinjen, når du bruker det inne i et annet batch-skript, må det foregå med CALL-søkeordet.
For eksempel kjører dette skriptet alle vedlikeholdsoppgaver på hver ikke-systemdatabase på en standard SQL Server-installasjon ved hjelp av pålitelig autentisering:
@ECHO OFF
SETLOCAL EnableExtensions
SET DBList = "% TEMP% DBList.txt"
SqlCmd -E -h-1 -w 300 -Q "SET NoCount ON; VELG Navn FRA master.dbo.sysDatabases WHERE Navn Ikke IN ('master', 'model', 'msdb', 'tempdb') ">% DBList%
FOR / F "usebackq tokens = 1" %% i IN (% DBList%) DO (
KALL SQLMaint "%% i" / Compact / Reindex / Verify
EKKO +++++++++++
)
IF EXIST% DBList% DEL / F / Q% DBList%
ENDLOCAL
Last ned SQLMaint Batch Script fra SysadminGeek.com