Quali passi sono necessari per riavviare in sicurezza un computer che ospita Microsoft SQL Server?


24

Sono necessari passaggi speciali per prevenire il danneggiamento dei dati quando si riavvia un server che ospita un'istanza di MS SQL Server?

Ad esempio, di recente ho riscontrato la raccomandazione di interrompere manualmente il servizio SQL. La mia comprensione è che questo è gestito dal shutdownprocesso di Windows .

Sono sicuro che ci sono miliardi di passi che le singole persone possono raccomandare, come quello che ho appena menzionato, ma vorrei evitare di ripetere pratiche obsolete o superstiziose . Ci sono raccomandazioni da Microsoft o standard di settore diffusi?


Questa domanda riguarda la procedura a breve termine di riavvio di una macchina. C'è un'altra domanda per quanto riguarda la procedura a lungo termine per garantire che una macchina sia inutilizzata, prima di smontarla definitivamente.


Non ho senso chiedere "standard di settore diffusi" e non voler un "miliardi di passi che le singole persone possono raccomandare". Questo è presumibilmente il loro resoconto degli standard del settore. Entrambe sembrano domande valide, ma la fonte autorevole sarà un collegamento all'articolo Microsoft.
Evan Carroll,

Risposte:


14

Non è necessario essere fantasiosi / preoccupati o spaventati quando si riavvia il server SQL.

Assicurati solo di non avere transazioni a lungo termine. La cosa migliore è riavviare il server SQL utilizzando la console o il comando di arresto durante un periodo di attività basso / minimo chiamato anche finestra di manutenzione per ridurre al minimo l'impatto sulla propria attività.

Se si dispone di una configurazione DR e non si desidera essere inattivi, è consigliabile eseguire il failover e riavviare il nodo passivo o secondario.

Clean Shutdown SQL Server si verifica negli scenari seguenti:

  • Interrompere il server sql utilizzando la console dei servizi.
  • Arresto del server
  • esecuzione del comando SHUTDOWN in SSMS

In tutte le situazioni, il server sql arresta in modo pulito tutti i suoi database e quindi termina il servizio che comporta il commit o il rollback di tutte le transazioni, la scrittura di tutte le pagine sporche sul disco e la scrittura di una voce nel registro delle transazioni.

Arresto improprio del server sql:

  • spegnimento con nowait
  • estrarre il cavo di alimentazione dal server (se si dispone dell'accesso).
  • uccidere sqlserver.exe dal task manager
  • Dirige l'errore su cui risiedono i file binari del server sql, exe, i database di sistema o l'errore dell'unità di sistema di Windows .. di solito C: \ drive.
  • surriscaldamento del server che causa l'arresto (dovrebbe accadere raramente !!)

SQL Server proverà sempre a eseguire un arresto pulito ... a meno che tu non faccia qualcosa di improprio come indicato sopra.

Alcuni link di lettura davvero validi su ciò che accade dietro le quinte durante la fase di recupero:


Grande dettaglio, grazie. Cosa intendi con "Setup DR"?
Jon of All Trades,

@JonofAllTrades Disaster Recovery .. ad es. Spedizione log, mirroring del database o puoi anche pensare ad alta disponibilità come il clustering
Kin Shah,

1
Anche se sono totalmente d'accordo con questo elenco di scenari di arresto "impropri", la corruzione dei dati non dovrebbe avvenire nemmeno allora, grazie a Write-Ahead Logging.
John Alan,

5

Tutto questo è esaurientemente dettagliato in questa pagina.

Essendo che la tua domanda ponga specificamente "ci sono raccomandazioni di Microsoft ", sono propenso a pensare che questo sia controproducente avere questa discussione qui. L'articolo spiega i dettagli del processo

  • Utilizzando entrambi
    • riga di comando
    • PowerShell
    • SQL Server Management Studio (GUI)
  • Per il 2008, 2012, 2014, 2016.
  • Per entrambi
    • Motore di database
    • o, agente

Se tali passaggi siano soddisfacenti sarebbe la mia opinione, che non si desidera. Quindi la risposta giusta sarà sempre la più aggiornata lì.

Interruzione del servizio, prima di spegnersi

è necessario o consigliato farlo prima di spegnere un server che esegue servizi SQL.

No, non è necessario. Quando il kernel di Windows invia il segnale di arresto a SQL Server, lo farà in modo sicuro e il sistema attenderà il completamento. Parlando in generale, tutto ciò che è stato creato con la possibilità di arrestare in modo sicuro non deve essere arrestato manualmente, ed è logico che tutte le applicazioni Microsoft seguano la propria API e le procedure che si collegano alle fasi PRESHUTDOWNo SHUTDOWN. Dai documenti in poi PRESHUTDOWN, che presumo stiano usando,

Notifica a un servizio che il sistema verrà chiuso. I servizi che necessitano di ulteriore tempo per eseguire attività di pulizia oltre la rigorosa limitazione di tempo all'arresto del sistema possono utilizzare questa notifica. Il responsabile del controllo dei servizi invia questa notifica alle applicazioni che si sono registrate per essa prima di inviare una SERVICE_CONTROL_SHUTDOWNnotifica alle applicazioni che si sono registrate per tale notifica.

Un servizio che gestisce questa notifica blocca l'arresto del sistema fino alla fine del servizio o alla scadenza dell'intervallo di timeout di preshutdown specificato tramite SERVICE_PRESHUTDOWN_INFO. Poiché ciò influisce sull'esperienza dell'utente, i servizi dovrebbero utilizzare questa funzione solo se è assolutamente necessario per evitare la perdita di dati o tempi di recupero significativi al successivo avvio del sistema.

Se necessario, suppongo che sia così che funziona SQL Server.


È quasi quello che stavo chiedendo. Tale documento descrive come arrestare il motore di SQL Server, ma non risponde se è necessario o consigliato farlo prima di arrestare un server che esegue i servizi SQL.
Jon of All Trades,

@JonofAllTrades aggiornato di nuovo.
Evan Carroll,

3

Non esattamente quando si tratta di arrestare e prevenire la corruzione del DB. MS SQL Server è un prodotto molto maturo e le probabilità di causare un problema di corruzione con un semplice "arresto" sarebbero uno scenario limite. È molto più probabile che tu causi corruzione non eseguendo CHECK DB o impostando la convalida del checksum sul tuo DB.

Forse avere strumenti esterni che toccano direttamente i file MDF / NDF / LDF potrebbe causare problemi, come il tentativo di "spostare" i file tra gli arresti o il tentativo di alcuni software di bloccare i file durante l'arresto. Ho visto Windows Clustering rovinare quando un disco che ospita i file DB è pieno, ma non causa in modo specifico "corruzione db".

Se si desidera contribuire a garantire un arresto regolare o un failover, è possibile eseguire un checkpoint, assicurarsi di eseguire DBCC CHECKDB spesso (almeno abbastanza volte per poter recuperare i dati corrotti da un backup) e verificare che eventuali dipendenze esterne siano curato come il mirroring.

Se qualche esperto avesse altre "migliori pratiche", mi piacerebbe ascoltarle, ma perlustrando i blog e le risorse online negli ultimi anni, non ho visto molto nella corruzione dei dati e un semplice "arresto / riavvio".


-1

Il modo in cui lo faccio: 1) Disabilita tutti i lavori. 2) Assicurarsi che nessun lavoro sia attualmente in esecuzione. 3) Esegui SP_Who3 frequentemente per controllare l'attività, esegui anche sp_whoisactive per ulteriori informazioni. 4) Se non c'è attività e l'unica cosa che vedi è la tua attuale query sp_who3 5) Porta offline i DB 6) Fai clic con il tasto destro nella parte superiore del database e fai clic su Stop 7) Verifica se i servizi sono in stato di arresto in services.msc 8 ) Fatto

PS. Se si dispone di un PAGEIOLATCH / IOCOMPLETION o di qualsiasi altra attività in SP_Who3, non eseguire quanto sopra in quanto potrebbe mettere i database in modalità di ripristino.


Molto raramente è fattibile o ne vale la pena fermare tutto il traffico al database per la maggior parte delle persone. Sono anche sicuro di sapere quali vantaggi ci sono nel portare offline tutti i database - ciò aggiungerà solo più tempo al processo.
LowlyDBA,

Questo non è affatto un buon consiglio. perché suggeriresti di mettere offline dbs - se dbs è in HADR, ad esempio mirroring o AG, non sarai in grado di farlo.
Kin Shah,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.