Eräskripti SQL Server -tietokannan ylläpidon yksinkertaistamiseksi
Varmuuskopioiden luomisen lisäksi SQL Server tekee erilaisia tehtäviä ja toimintoja, jotka voivat parantaa tietokantojen suorituskykyä ja luotettavuutta. Olemme aiemmin osoittaneet, miten varmuuskopioidaan SQL Server -tietokannat yksinkertaisen komentorivikomentosarjan avulla, joten samalla tavalla tarjoamme komentosarjan, jonka avulla voit helposti suorittaa yleisiä huoltotehtäviä.
Tietokannan tiivistäminen / pienentäminen [/ Compact]
On olemassa useita tekijöitä, jotka edistävät fyysistä levytilaa SQL Server -tietokannassa. Mainitakseni muutaman:
- Ajan mittaan, kun tietueita lisätään, poistetaan ja päivitetään, SQL kasvaa jatkuvasti ja kutistuu taulukoihin sekä tuottaa väliaikaisia tietorakenteita kyselyn manipuloinnin suorittamiseksi. Jotta levyn tallennustarpeet voitaisiin ottaa huomioon, SQL Server kasvattaa tietokannan kokoa (yleensä 10%) tarpeen mukaan, joten tietokantatiedoston koko ei muutu jatkuvasti. Vaikka tämä on ihanteellinen suorituskykyyn, se voi aiheuttaa katkoksen käytetystä tallennustilasta, koska jos esimerkiksi lisäät suuren määrän tietueita, jotka aiheuttavat tietokannan kasvun ja poistavat nämä tietueet, SQL Server ei palauta tätä automaattisesti levytila.
- Jos käytät tietokantojen koko palautustilaa, tapahtumalokitiedosto (LDF) voi kasvaa varsin suureksi erityisesti tietokannoissa, joissa on suuri määrä päivityksiä.
Tietokannan tiivistäminen (tai kutistuminen) palauttaa käyttämättömän levytilan. Pienissä tietokannoissa (200 MB tai vähemmän) tämä ei yleensä ole kovin suuri, mutta suurille tietokannoille (1 Gt tai enemmän) palautettu tila voi olla merkittävä.
Tietokannan uusiminen [/ Reindex]
Paljon kuin jatkuvasti tiedostojen luominen, muokkaaminen ja poistaminen voi johtaa levyn pirstoutumiseen, tietokannassa olevien tietueiden lisääminen, päivittäminen ja poistaminen voi johtaa taulukon pirstoutumiseen. Käytännön tulokset ovat samat, kun luku- ja kirjoitusoperaatiot kärsivät suorituskyvyn osuuksista. Vaikka se ei ole täydellinen analogia, taulukoiden uudelleenkartoitus tietokannassa eheyttää ne olennaisesti. Joissakin tapauksissa tämä voi lisätä merkittävästi tiedonhankinnan nopeutta.
Koska SQL Server toimii, taulukot on palautettava yksilöllisesti. Tietokantoihin, joissa on suuri määrä taulukkoja, tämä voi olla todellista kipua tehdä manuaalisesti, mutta skripti osuu jokaisen taulukon tietokantaan ja rakentaa kaikki indeksit uudelleen.
Eheyden tarkistaminen [/ Vahvista]
Jotta tietokanta pysyisi toiminnallisena ja tuottaa tarkkoja tuloksia, on olemassa lukuisia eheyden kohteita, joiden on oltava paikallaan. Onneksi fyysiset ja / tai loogiset eheysongelmat eivät ole kovin yleisiä, mutta on hyvä käytäntö, että ajoittain ajoitetaan eheyden varmistusprosessi tietokannoissa ja tarkista tulokset.
Kun tarkistusprosessi suoritetaan komentosarjamme kautta, vain virheitä raportoidaan, joten mitään uutisia ei ole hyvä uutinen.
Scriptin käyttäminen
SQLMaint-eräskripti on yhteensopiva SQL 2005: n ja sitä korkeamman kanssa, ja se on suoritettava koneella, johon on asennettu SQLCMD-työkalu (asennettu osana SQL Serverin asennusta). On suositeltavaa pudottaa tämä komentosarja Windows PATH -muuttujaan (ts. C: Windows) asetettuun paikkaan, jotta se voidaan helposti kutsua kuten mitä tahansa muuta sovellusta komentoriviltä.
Voit tarkastella ohjetietoja seuraavasti:
SQLMaint /?
esimerkit
Kompaktin ja sitten tarkistuksen suorittaminen tietokannassa "MyDB" luotettua yhteyttä käyttäen:
SQLMaint MyDB / Compact / Verify
Reindexin suorittaminen ja sen jälkeen kompakti "MyDB" -nimellä mainitulla esimerkillä "Special" käyttämällä "sa" -käyttäjää salasanalla "123456":
SQLMaint MyDB /S:.Special / U: sa / P: 123456 / Reindex / Compact
Käytetään eräskriptin sisäpuolelta
Vaikka SQLMaint-eräskriptiä voidaan käyttää komentoriviltä sovelluksena, kun käytät sitä toisen eräsarjan sisällä, sitä on edeltävä CALL-avainsanalla.
Esimerkiksi tämä komentosarja suorittaa kaikki huoltotehtävät jokaisessa ei-tietokannassa oletusarvoisen SQL Server -asennuksen avulla, jossa käytetään luotettavaa todennusta:
@ECHO OFF
SETLOCAL EnableExtensions
SET DBList = ”% TEMP% DBList.txt”
SqlCmd -E -h-1 -w 300 -Q “SET NoCount ON; SELECT Name from master.dbo.sysDatabases WHERE Name Not IN ('master', 'malli', 'msdb', 'tempdb') ">% DBList%
FOR / F “usebackq-merkit = 1” %% i IN (% DBList%) DO (
CALL SQLMaint “%% i” / Compact / Reindex / Vahvista
ECHO +++++++++++
)
JOS EXIST% DBList% DEL / F / Q% DBList%
ENDLOCAL
Lataa SQLMaint Batch Script SysadminGeek.comista