Homepage » come » Script batch per semplificare la manutenzione del database SQL Server

    Script batch per semplificare la manutenzione del database SQL Server

    Oltre alla creazione di backup, sono disponibili una serie di attività e funzioni che SQL Server rende disponibili e che possono migliorare sia le prestazioni che l'affidabilità dei database. In precedenza ti abbiamo mostrato come eseguire il backup dei database di SQL Server con un semplice script da riga di comando, quindi allo stesso modo forniamo uno script che ti consentirà di eseguire facilmente attività di manutenzione comuni.

    Compattare / ridurre un database [/ Compact]

    Esistono diversi fattori che contribuiscono allo spazio fisico su disco utilizzato da un database SQL Server. Solo per citarne alcuni:

    • Nel tempo, man mano che i record vengono aggiunti, cancellati e aggiornati, SQL è in costante crescita e riduzione delle tabelle oltre a generare strutture dati temporanee per eseguire manipolazioni di query. Per soddisfare le esigenze di archiviazione su disco, SQL Server aumenterà le dimensioni del database (in genere del 10%) in base alle esigenze, in modo che le dimensioni del file del database non cambino costantemente. Sebbene ciò sia ideale per le prestazioni, può causare una disconnessione con lo spazio di archiviazione utilizzato, perché se, ad esempio, si aggiunge un numero molto elevato di record che provoca la crescita del database e successivamente l'eliminazione di tali record, SQL Server non lo recupererà automaticamente. spazio sul disco.
    • Se si utilizza la modalità di recupero completo sui database, il file di registro transazionale (LDF) può aumentare notevolmente, in particolare nei database con un volume elevato di aggiornamenti.

    Compattando (o riducendo) il database recupererà spazio su disco inutilizzato. Per piccoli database (200 MB o meno) questo di solito non sarà molto, ma per database di grandi dimensioni (1 GB o più) lo spazio bonificato potrebbe essere significativo.

    Reindicizzare un database [/ Reindex]

    Analogamente alla costante creazione, modifica ed eliminazione di file può portare alla frammentazione del disco, l'inserimento, l'aggiornamento e l'eliminazione di record in un database possono portare alla frammentazione della tabella. I risultati pratici sono gli stessi in quanto le operazioni di lettura e scrittura subiscono un calo di prestazioni. Anche se non è un'analogia perfetta, la reindicizzazione delle tabelle in un database essenzialmente li deframmenta. In alcuni casi, ciò può aumentare significativamente la velocità di recupero dei dati.

    A causa del modo in cui funziona SQL Server, le tabelle devono essere reindicizzate individualmente. Per i database con un gran numero di tabelle questo può essere davvero doloroso da fare manualmente, ma il nostro script colpisce ogni tabella nel rispettivo database e ricostruisce tutti gli indici.

    Verifica dell'integrità [/ Verifica]

    Affinché un database rimanga funzionale e produca risultati accurati, esistono numerosi elementi di integrità che devono essere presenti. Per fortuna, i problemi di integrità fisica e / o logica non sono molto comuni, ma è buona norma eseguire occasionalmente il processo di verifica dell'integrità sui vostri database e rivedere i risultati.

    Quando il processo di verifica viene eseguito attraverso il nostro script, vengono riportati solo gli errori, quindi nessuna notizia è una buona notizia.

    Usando lo script

    Lo script batch di SQLMaint è compatibile con SQL 2005 e versioni successive e deve essere eseguito su una macchina su cui è installato lo strumento SQLCMD (installato come parte dell'installazione di SQL Server). Si consiglia di rilasciare questo script in una posizione impostata nella variabile PATH di Windows (ad es. C: Windows) in modo che possa essere facilmente chiamato come qualsiasi altra applicazione dalla riga di comando.

    Per visualizzare le informazioni della guida, inserisci semplicemente:

    SQLMaint /?

    Esempi

    Per eseguire un compact e quindi una verifica sul database "MyDB" utilizzando una connessione trusted:

    SQLMaint MyDB / Compatto / Verifica

    Per eseguire un reindex e quindi compattarlo su "MyDB" nell'istanza denominata "Special" utilizzando l'utente "sa" con password "123456":

    SQLMaint MyDB /S:.Special / U: sa / P: 123456 / Reindex / Compatto

    Utilizzo dall'interno di uno script batch

    Mentre lo script batch di SQLMaint può essere utilizzato come un'applicazione dalla riga di comando, quando lo si utilizza all'interno di un altro script batch, deve essere preceduto dalla parola chiave CALL.

    Ad esempio, questo script esegue tutte le attività di manutenzione su ogni database non di sistema su un'installazione predefinita di SQL Server utilizzando l'autenticazione trusted:

    @TO SPENTO
    SETLOCAL EnableExtensions
    SET DBList = "% TEMP% DBList.txt"
    SqlCmd -E -h-1 -w 300-Q "SET NoCount ON; SELECT Nome FROM master.dbo.sysDatabases WHERE Nome Non IN ('master', 'model', 'msdb', 'tempdb') ">% DBList%
    FOR / F "token usebackq = 1" %% i IN (% DBList%) DO (
    CALL SQLMaint "%% i" / Compatta / Reindicizza / Verifica
    ECO +++++++++++
    )
    SE ESIST.% DBList% DEL / F / Q% DBList%
    ENDLOCAL

    Scarica lo script batch di SQLMaint da SysadminGeek.com