Un piano di manutenziione per Server SQL 2008
Ottimizzazione dei database
Questa sezione è dedicata all'ottimizzazione dei database. In questo esempio, imposteremo il codice per eseguire le seguenti operazioni (vedere un diagramma approssimativo di come sono collegati i server):
- Backup del database dal server live a una cartella di backup condivisa
- Reindicizzare il database
- Interrompere tutte le connessioni e ripristinare il database sul server di report.
- I server collegati saranno presto in un articolo separato
- Log Shipping sarà presto in un articolo separato
Quando si esegue questa operazione su più server, sarà necessario consentire all'account in esecuzione di SQL Server di accedere ai file di sistema dei server di destinazione.
Tutto il codice SQL viene eseguito da un database di utilità e lo schema è impostato su "maint"
Ci sono una miriade di altri articoli che abbiamo scritto di seguito che potrebbero interessarti.
Piano di manutenzione completo
Ora possiamo gestire tutti questi segmenti di codice separati con un'altra procedura che li chiamerà nell'ordine corretto, questo verrà inserito nel server live. Il codice viene eseguito come segue:
- Calcola il tempo
- Se è sera, reindicizzare il database
- Esegui un backup del database (aggiungi dove ti serve)
- Se è sera esegui il backup degli altri database (aggiungi dove ti serve)
- Interrompi le connessioni e ripristina il database (aggiungi dove ti serve)
Questo codice è stato provato e testato ed è stato eseguito per periodi di mesi senza problemi.
Si noti che la riduzione dei file di registro e dei file di database dovrebbe essere ridotta al minimo, eseguendo un backup si svuota il registro (sebbene manterrà lo spazio utilizzato). Se è necessario quando dovrebbe essere eseguito al di fuori del normale orario di lavoro.
Codice SQL
Use [utilities]GOCREATE PROC [maint].MaintenancePlan AS BEGINDECLARE @BackupType VARCHAR(1)='E'IF DATEPART(HOUR,GETDATE()) BETWEEN 5 AND 21 BEGINSET @BackupType='D'END--EXEC ('USE TempDb; DBCC SHRINKFILE(templog, 0)');--This is only needed when space is at a premium!--Re-index LiveIF @BackupType='E' EXEC [maint].DatabaseReIndex 'dbname'--Create BackupBACKUP DATABASE TO DISK=N'{backuplocation}{dbname}.bak'WITH NOFORMAT, INIT, NAME =N'{dbname}', SKIP, NOREWIND, NOUNLOAD, STATS= 10;--EXEC ('USE ; DBCC SHRINKFILE(_log, 0)');--This is only needed when space is at a premium!--Backup Other Files at NightIF @BackupType='E' BEGIN EXEC [maint].DatabaseReIndex 'dbname' --Backup Others BACKUP DATABASE [databasename] TO DISK=N'{backuplocation}{dbname2}.bak' WITH FORMAT,INIT, NAME =N'{dbname2}',SKIP, NOREWIND, NOUNLOAD, STATS= 10END--Restore Backups on other serverEXEC [server].[utilities].[maint].KillConnections 'dbname';EXEC [server].[utilities].[maint].RestoreDatabase_{dbname};--Restore Backups on other server for db_2 etcIF @BackupType='E' BEGIN EXEC [server].[utilities].[maint].KillConnections 'dbname2'; EXEC [server].[utilities].[maint].RestoreDatabase_{dbname2};ENDENDGO
Database di backup
Per ottenere il codice per il backup del database, è più semplice eseguire lo script del codice da SSMS.
Segui la procedura che utilizzeresti normalmente, quindi seleziona "Azione script su nuova finestra di query".
Copia questo codice nel piano di manutenzione.
Reindicizzare il database
Successivamente possiamo aggiungere del codice per reindicizzare il nostro database, anche questa è una procedura memorizzata condivisa in cui devi solo selezionare il nome del sistema.
Per evitare la duplicazione del codice, puoi leggerlo sul link sottostante.
Uccidi connessioni
Quando si esegue un ripristino sul database, è possibile avere solo una connessione ad esso (il processo che esegue il ripristino), quindi è possibile creare una procedura memorizzata per chiudere tutte le connessioni a parte il processo corrente. Abbiamo nuovamente creato un articolo separato per questo.
Ripristina database
Questo codice può anche essere creato tramite script da SQL Server Management Studio. Se aggiungi questo codice a una stored procedure, puoi chiamarlo da altri processi e persino da altri server molto facilmente. Abbiamo spostato questo in un articolo separato per coprire più opzioni.