Connessione di diagnostica per gli amministratori di database

SQL ServerSQL Server offre una speciale connessione di diagnostica a cui possono ricorrere gli amministratori quando non è possibile usare connessioni standard al server. Questa connessione di diagnostica consente a un amministratore di accedere a SQL ServerSQL Server per eseguire query di diagnostica e risolvere problemi anche quando SQL ServerSQL Server non risponde alle richieste di connessione standard.

Questa connessione amministrativa dedicata (DAC, Dedicated Administrator Connection) supporta la crittografia e altre caratteristiche di sicurezza di SQL ServerSQL Server. La connessione DAC consente solo il cambiamento del contesto utente in un altro utente con privilegi amministrativi.

SQL ServerSQL Server viene eseguito ogni possibile tentativo per garantire la connessione DAC, tuttavia in alcune situazioni particolari potrebbe verificarsi un errore.

||
|-|
|Si applica a: SQL ServerSQL Server (da SQL Server 2008SQL Server 2008 alla versione corrente), Database SQLSQL Database.|

Connessione DAC

Per impostazione predefinita, la connessione è consentita solo da un client in esecuzione sul server. Le connessioni di rete non sono consentite, a meno che non siano configurate con la stored procedure sp_configure con l'opzione remote admin connections.

Solo i membri del ruolo SQL ServerSQL Server sysadmin possono stabilire la connessione DAC.

L'applicazione livello dati è disponibile e supportata con l'utilità del prompt dei comandi sqlcmd usando un'opzione di amministrazione speciale (-A). Per altre informazioni sull'uso di sqlcmd, vedere Utilizzo di sqlcmd con variabili di scripting. È anche possibile stabilire la connessione apponendo il prefisso admin: al nome dell'istanza nel formato sqlcmd -Sadmin:. Una connessione DAC può essere stabilita anche da un editor di query di SQL Server Management StudioSQL Server Management Studio connettendosi a admin:<nome_istanza>.

Restrizioni

Dato che l'applicazione livello dati ha il solo scopo di consentire la diagnosi di problemi del server in rare circostanze, vi sono alcune restrizioni nella connessione:

  • Per garantire che vi siano risorse disponibili per la connessione, per ogni istanza di SQL ServerSQL Server è consentita un'unica connessione DAC. Se è già attiva una connessione DAC, qualsiasi nuova richiesta di connessione attraverso la connessione DAC viene negata e restituisce l'errore 17810.

  • Per risparmiare risorse, SQL Server ExpressSQL Server Express non rimane in attesa sulla porta DAC, a meno che non sia avviato con un flag di traccia 7806.

  • La connessione DAC tenta inizialmente di connettersi al database predefinito associato all'account di accesso. Quando la connessione è stata stabilita con esito positivo, è possibile connettersi al database master. Se il database predefinito è offline o altrimenti non disponibile, la connessione restituisce l'errore 4060. Essa avrà comunque esito positivo se si stabilisce la connessione al database master invece che al database predefinito utilizzando il comando seguente:

    sqlcmd –A –d master

    È consigliabile connettersi mediante connessione DAC al database master poiché se l'istanza di Motore di databaseDatabase Engine è avviata, master sarà certamente disponibile.

  • SQL ServerSQL Server non consente l'esecuzione di query parallele o comandi con la connessione DAC. Se, ad esempio, una delle istruzioni seguenti viene eseguita con la connessione DAC, viene generato l'errore 3637:

    • RESTORE

    • BACKUP

  • Con la connessione DAC è garantita la disponibilità di risorse limitate. Non utilizzare l'applicazione livello dati per eseguire query che utilizzano un'elevata quantità di risorse (ad esempio un join complesso in una grande tabella) o per eseguire query che possono bloccarsi. Questa misura consente di evitare che la connessione DAC aggravi gli eventuali problemi già esistenti sul server. Per evitare l'insorgere di potenziali scenari di blocco, quando è necessario eseguire query che potrebbero causare blocchi, eseguire la query in livelli di isolamento dello snapshot, se possibile, in caso contrario impostare il livello di isolamento della transazione su READ UNCOMMITTED, impostare il valore LOCK_TIMEOUT su un intervallo di tempo breve, ad esempio 2000 millisecondi, oppure adottare entrambe le misure. In questo modo si eviterà il blocco della sessione della connessione DAC. A seconda dello stato corrente in cui si trova SQL ServerSQL Server, tuttavia, la sessione della connessione DAC potrebbe bloccarsi su un latch. Potrebbe essere possibile terminare la sessione della connessione DAC utilizzando la combinazione di tasti CTRL-C, ma l'esito dell'operazione non è sicuro. Se l'esito non è positivo, l'unica possibilità potrebbe consistere nel riavviare SQL ServerSQL Server.

  • Per garantire la connettività e la risoluzione dei problemi con la connessione DAC, SQL ServerSQL Server riserva risorse limitate all'elaborazione dei comandi eseguiti sulla connessione DAC. Generalmente queste risorse sono sufficienti solo per semplici funzioni di diagnostica e risoluzione dei problemi, quali ad esempio quelle elencate di seguito.

    Sebbene sia teoricamente possibile eseguire qualsiasi istruzione Transact-SQLTransact-SQL che non richiede l'esecuzione in parallelo sulla connessione DAC, è consigliabile limitare l'utilizzo ai comandi di diagnostica e di risoluzione dei problemi seguenti:

  • Query di viste a gestione dinamica per diagnostica di base, quali sys.dm_tran_locks per lo stato di blocco, sys.dm_os_memory_cache_counters per verificare l'integrità delle cache e sys.dm_exec_requests e sys.dm_exec_sessions per richieste e sessioni attive. Evitare viste a gestione dinamica che utilizzano una grande quantità di risorse, ad esempio sys.dm_tran_version_store che analizza l'intero archivio delle versioni e può causare un numero elevato di operazioni I/O, oppure join complessi. Per informazioni sulle implicazioni a livello di prestazioni, vedere la documentazione relativa alla vista a gestione dinamica specifica.

  • Query di viste del catalogo.

  • Comandi DBCC di base quali DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, ** e DBCC SQLPERF. Non eseguire comandi che usano una grande quantità di risorse, ad esempio **DBCC CHECKDB, DBCC DBREINDEX o DBCC SHRINKDATABASE.

  • Transact-SQLTransact-SQL Comando KILL<spid>. In base allo stato di SQL ServerSQL Server, il comando KILL potrebbe non avere sempre esito positivo. In questo caso, l'unica possibilità potrebbe consistere nel riavviare SQL ServerSQL Server. Di seguito vengono riportate alcune linee guida generali:

    • Verificare che lo SPID sia stato effettivamente terminato eseguendo la query SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>. Se non viene restituita alcuna riga, la sessione è stata terminata.

    • Se la sessione è ancora attiva, verificare l'eventuale presenza di processi assegnati alla sessione eseguendo la query SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>. Se viene visualizzato il processo, è molto probabile che sia in corso la terminazione della sessione. Si noti che l'operazione potrebbe richiedere una notevole quantità di tempo e non riuscire.

    • Se nella vista sys.dm_os_tasks non vi sono processi associati alla sessione, ma questa è ancora presente nella vista sys.dm_exec_sessions dopo l'esecuzione di un comando KILL, allora non è disponibile un thread di lavoro. Selezionare uno dei processi attualmente in esecuzione (un processo elencato nella vista sys.dm_os_tasks con un sessions_id <> NULL) e terminare la sessione ad esso associata per liberare il thread di lavoro. Si noti che la terminazione di una singola sessione potrebbe non essere sufficiente e che potrebbe essere necessario terminare più sessioni.

Porta della connessione DAC

SQL ServerSQL Server è in attesa della connessione DAC sulla porta TCP 1434 se disponibile o una porta TCP assegnata dinamicamente all'avvio di Motore di databaseDatabase Engine. Il log degli errori contiene il numero di porta su cui è in attesa la connessione DAC. Per impostazione predefinita, il listener della connessione DAC accetta connessioni solo sulla porta locale. Per un esempio di codice che attiva le connessioni amministrative remote, vedere Opzione di configurazione del server remote admin connections.

Dopo aver configurato la connessione amministrativa remota, il listener della connessione DAC viene abilitato senza richiedere un riavvio di SQL ServerSQL Server, pertanto da tale istante un client può stabilire una connessione DAC in remoto. È possibile abilitare il listener della connessione DAC per accettare connessioni in remoto anche se SQL ServerSQL Server non risponde effettuando prima una connessione a SQL ServerSQL Server utilizzando la connessione DAC locale, quindi eseguendo la store procedure sp_configure per accettare la connessione da connessioni remote.

Nelle configurazioni cluster la connessione DAC è disattivata per impostazione predefinita. Gli utenti possono utilizzare l'opzione remote admin connection di sp_configure per abilitare il listener della connessione DAC per l'accesso a una connessione remota. Se SQL ServerSQL Server non risponde e il listener della connessione DAC non è abilitato, potrebbe essere necessario riavviare SQL ServerSQL Server per poter stabilire la connessione DAC. È pertanto consigliabile abilitare l'opzione di configurazione remote admin connections in sistemi cluster.

La porta della connessione DAC viene assegnata dinamicamente da SQL ServerSQL Server durante l'avvio. Durante la connessione all'istanza predefinita, l'applicazione livello dati evita di usare una richiesta SSRP (Resolution Protocol) di SQL ServerSQL Server al servizio SQL Server Browser. Essa si connette prima sulla porta TCP 1434. Se questo tentativo di connessione termina con esito negativo, la connessione DAC esegue una chiamata SSRP per ottenere la porta. Se SQL ServerSQL Server Browser non è in attesa di richieste SSRP, la richiesta di connessione restituisce un errore. Vedere il log degli errori per ottenere il numero di porta su cui è in attesa la connessione DAC. Se SQL ServerSQL Server è configurato per accettare connessioni amministrative remote, è necessario inizializzare l'applicazione livello dati con un numero di porta esplicito:

sqlcmd–Stcp: <server>,<porta>

Il log degli errori di SQL ServerSQL Server elenca il numero di porta relativo all'applicazione livello dati, che per impostazione predefinita è 1434. Se SQL ServerSQL Server è configurato per accettare solo applicazioni livello dati locali, eseguire la connessione utilizzando l'adattatore loopback con il comando seguente:

sqlcmd–S127.0.0.1,1434

Suggerimento

Quando ci si connette a Database SQL di AzureAzure SQL Database con l'applicazione livello dati, è necessario specificare anche il nome del database nella stringa di connessione usando l'opzione -d.

Esempio

In questo esempio un amministratore si accorge che il server URAN123 non risponde e desidera diagnosticare il problema. A tale scopo, l'utente attiva l'utilità della riga di comando sqlcmd e si connette al server URAN123 utilizzando -A per indicare la connessione DAC.

sqlcmd -S URAN123 -U sa -P <xxx> –A

L'amministratore può quindi eseguire query per diagnosticare il problema e, se necessario, terminare le sessioni che non rispondono.

In un esempio simile, per la connessione a Database SQLSQL Database viene usato il comando seguente che include il parametro -d per specificare il database:

sqlcmd -S serverName.database.windows.net,1434 -U sa -P <xxx> -d AdventureWorks

Attività correlate

Contenuto correlato

Utilizzo di sqlcmd con variabili di scripting

Utilità sqlcmd

SELECT (Transact-SQL)

sp_who (Transact-SQL)

sp_lock (Transact-SQL)

KILL (Transact-SQL)

DBCC CHECKALLOC (Transact-SQL)

DBCC CHECKDB (Transact-SQL)

DBCC OPENTRAN (Transact-SQL)

DBCC INPUTBUFFER (Transact-SQL)

Opzioni di configurazione del server (SQL Server)

Funzioni e viste a gestione dinamica relative alle transazioni (Transact-SQL)

Flag di traccia (Transact-SQL)