Domovská » jak » Dávkový skript, aby databáze SQL Server údržby jednoduché

    Dávkový skript, aby databáze SQL Server údržby jednoduché

    Kromě vytváření záloh existují různé úkoly a funkce, které SQL Server poskytuje, což může zlepšit výkonnost a spolehlivost vašich databází. Předtím jsme vám ukázali, jak zálohovat databázi SQL Server pomocí jednoduchého skriptu příkazového řádku, takže stejným způsobem poskytujeme skript, který vám umožní snadno provádět běžné úkony údržby.

    Kompaktní / zmenšování databáze [/ Compact]

    Existuje několik faktorů, které přispívají k fyzickému diskovému prostoru serveru SQL Server. Jen pár jmen:

    • Během doby, kdy jsou záznamy přidávány, smazány a aktualizovány, SQL stále roste a zmenšuje tabulky a vytváří dočasné datové struktury pro provádění manipulací s dotazem. Aby bylo možné vyhovět požadavkům na ukládání disků, SQL Server zvýší velikost databáze (obvykle o 10%) podle potřeby, takže velikost souboru databáze se neustále mění. Přestože je to ideální pro výkon, může to způsobit odpojení od použitého úložného prostoru, protože například pokud přidáte velký počet záznamů, které způsobí růst databáze a následně odstraní tyto záznamy, SQL Server tuto funkci automaticky nevyžaduje místo na disku.
    • Používáte-li v databázích celý režim obnovení, soubor transakčního protokolu (LDF) může růst poměrně velký, zejména v databázích s velkým množstvím aktualizací.

    Kompaktní (nebo zmenšující) databáze získá zpět nevyužité místo na disku. U malých databází (200 MB nebo méně) to obvykle nebude příliš mnoho, ale u velkých databází (1 GB nebo více) může být regenerovaný prostor významný.

    Reindexování databáze [/ Reindex]

    Stejně jako neustále vytváření, úpravy a mazání souborů může vést k fragmentaci disku, vkládání, aktualizace a mazání záznamů v databázi může vést k fragmentaci tabulky. Praktické výsledky jsou stejné v tom, že operace čtení a zápisu trpí výkonem. I když to není dokonalá analogie, reindexování tabulek v databázi je v podstatě odděluje. V některých případech to může výrazně zvýšit rychlost načítání dat.

    Vzhledem k tomu, jak funguje SQL Server, musí být tabule znovu redexovány jednotlivě. Pro databáze s velkým počtem tabulek může být skutečná bolest dělat ručně, ale náš skript udeří každou tabulku v příslušné databázi a znovu sestaví všechny indexy.

    Ověření bezúhonnosti [/ Verify]

    Aby databáze mohla zůstat funkční a produkovala přesné výsledky, existuje mnoho integritních položek, které musí být na místě. Naštěstí problémy s fyzickou a / nebo logickou integritou nejsou příliš běžné, ale je dobrou praxí občas provozovat proces ověřování integrity ve vašich databázích a přezkoumat výsledky.

    Když je ověřovací proces spuštěn skriptem, hlásí se pouze chyby, takže žádná zpráva není dobrá zpráva.

    Použití skriptu

    Dávkový skript SQLMaint je kompatibilní s SQL 2005 a vyšší a musí být spuštěn na počítači, který má nainstalovaný nástroj SQLCMD (nainstalovaný jako součást instalace serveru SQL Server). Doporučuje se, abyste tento skript přemístili do umístění nastaveného v proměnné Windows PATH (tj. C: Windows), aby bylo možné snadno volat z libovolné jiné aplikace z příkazového řádku.

    Chcete-li zobrazit informace o nápovědě, jednoduše zadejte:

    SQLMaint /?

    Příklady

    Spustit kompaktní a ověřit v databázi "MyDB" pomocí důvěryhodného připojení:

    SQLMaint MyDB / Compact / ověřit

    Spuštění reindexu a kompaktování na "MyDB" v pojmenované instanci "Special" pomocí uživatele "sa" s heslem "123456":

    SQLMaint MyDB /S:.Speciální / U: sa / P: 123456 / Reindex / Compact

    Použití zevnitř dávkového skriptu

    Zatímco dávkový skript SQLMaint lze použít jako aplikaci z příkazového řádku, když ji používáte uvnitř jiného dávkového skriptu, musí být předcházen klíčovým slovem CALL.

    Tento skript například spustí všechny úkoly údržby v každé nesystémové databázi na výchozí instalaci serveru SQL pomocí důvěryhodné autentizace:

    @ OFF OFF
    SETLOCAL EnableExtensions
    SET DBList = "% TEMP% DBList.txt"
    SqlCmd -E -h-1 -w 300-Q "SET NoCount ON; SELECT název FROM master.dbo.sysDatabáze WHERE název není IN ('master', 'model', 'msdb', 'tempdb') ">% DBList%
    FOR / F "usebackq tokeny = 1" %% IN IN (% DBList%) DO (
    CALL SQLMaint "%% i" / Kompaktní / Reindex / Ověřit
    ECHO +++++++++++
    ).
    Pokud existují% DBList% DEL / F / Q% DBList%
    ENDLOCAL

    Stáhnout dávkový skript SQLMaint ze serveru SysadminGeek.com