Connessione di diagnostica per gli amministratori di databaseDiagnostic Connection for Database Administrators

SQL ServerSQL Server offre una speciale connessione di diagnostica a cui possono ricorrere gli amministratori quando non è possibile usare connessioni standard al server. provides a special diagnostic connection for administrators when standard connections to the server are not possible. 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.This diagnostic connection allows an administrator to access SQL ServerSQL Server to execute diagnostic queries and troubleshoot problems even when SQL ServerSQL Server is not responding to standard connection requests.

Questa connessione amministrativa dedicata (DAC, Dedicated Administrator Connection) supporta la crittografia e altre caratteristiche di sicurezza di SQL ServerSQL Server.This dedicated administrator connection (DAC) supports encryption and other security features of SQL ServerSQL Server. La connessione DAC consente solo il cambiamento del contesto utente in un altro utente con privilegi amministrativi.The DAC only allows changing the user context to another admin user.

SQL ServerSQL Server viene eseguito ogni possibile tentativo per garantire la connessione DAC, tuttavia in alcune situazioni particolari potrebbe verificarsi un errore. makes every attempt to make DAC connect successfully, but under extreme situations it may not be successful.

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

Connessione DACConnecting with DAC

Per impostazione predefinita, la connessione è consentita solo da un client in esecuzione sul server.By default, the connection is only allowed from a client running on the 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.Network connections are not permitted unless they are configured by using the sp_configure stored procedure with the remote admin connections option.

Solo i membri del ruolo SQL ServerSQL Server sysadmin possono stabilire la connessione DAC.Only members of the SQL ServerSQL Server sysadmin role can connect using the DAC.

L'applicazione livello dati è disponibile e supportata con l'utilità del prompt dei comandi sqlcmd usando un'opzione di amministrazione speciale (-A).The DAC is available and supported through the sqlcmd command-prompt utility using a special administrator switch (-A). Per altre informazioni sull'uso di sqlcmd, vedere Utilizzo di sqlcmd con variabili di scripting.For more information about using sqlcmd, see Use sqlcmd with Scripting Variables. È anche possibile stabilire la connessione apponendo il prefisso admin: al nome dell'istanza nel formato sqlcmd -Sadmin:<nome_istanza>.You can also connect prefixing admin:to the instance name in the format sqlcmd -Sadmin:<instance_name>. 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>.You can also initiate a DAC from a SQL Server Management StudioSQL Server Management Studio Query Editor by connecting to admin:<instance_name>.

RestrizioniRestrictions

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:Because the DAC exists solely for diagnosing server problems in rare circumstances, there are some restrictions on the connection:

  • Per garantire che vi siano risorse disponibili per la connessione, per ogni istanza di SQL ServerSQL Serverè consentita un'unica connessione DAC.To guarantee that there are resources available for the connection, only one DAC is allowed per instance of SQL ServerSQL Server. Se è già attiva una connessione DAC, qualsiasi nuova richiesta di connessione attraverso la connessione DAC viene negata e restituisce l'errore 17810.If a DAC connection is already active, any new request to connect through the DAC is denied with error 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.To conserve resources, SQL Server ExpressSQL Server Express does not listen on the DAC port unless started with a trace flag 7806.

  • La connessione DAC tenta inizialmente di connettersi al database predefinito associato all'account di accesso.The DAC initially attempts to connect to the default database associated with the login. Quando la connessione è stata stabilita con esito positivo, è possibile connettersi al database master.After it is successfully connected, you can connect to the master database. Se il database predefinito è offline o altrimenti non disponibile, la connessione restituisce l'errore 4060.If the default database is offline or otherwise not available, the connection will return error 4060. Essa avrà comunque esito positivo se si stabilisce la connessione al database master invece che al database predefinito utilizzando il comando seguente:However, it will succeed if you override the default database to connect to the master database instead using the following command:

    sqlcmd –A –d mastersqlcmd –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.We recommend that you connect to the master database with the DAC because master is guaranteed to be available if the instance of the Motore di databaseDatabase Engine is started.

  • SQL ServerSQL Server non consente l'esecuzione di query parallele o comandi con la connessione DAC. prohibits running parallel queries or commands with the DAC. Se, ad esempio, una delle istruzioni seguenti viene eseguita con la connessione DAC, viene generato l'errore 3637:For example, error 3637 is generated if you execute either of the following statements with the DAC:

    • RESTORERESTORE

    • BACKUPBACKUP

  • Con la connessione DAC è garantita la disponibilità di risorse limitate.Only limited resources are guaranteed to be available with the DAC. Non utilizzare l'applicazione livello dati per eseguire query che utilizzano un'elevata quantità di risorse (ad esempioDo not use the DAC to run resource-intensive queries (for example. un join complesso in una grande tabella) o per eseguire query che possono bloccarsi.a complex join on large table) or queries that may block. Questa misura consente di evitare che la connessione DAC aggravi gli eventuali problemi già esistenti sul server.This helps prevent the DAC from compounding any existing server problems. 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.To avoid potential blocking scenarios, if you have to run queries that may block, run the query under snapshot-based isolation levels if possible; otherwise, set the transaction isolation level to READ UNCOMMITTED and set the LOCK_TIMEOUT value to a short value such as 2000 milliseconds, or both. In questo modo si eviterà il blocco della sessione della connessione DAC.This will prevent the DAC session from getting blocked. A seconda dello stato corrente in cui si trova SQL ServerSQL Server , tuttavia, la sessione della connessione DAC potrebbe bloccarsi su un latch.However, depending on the state that the SQL ServerSQL Server is in, the DAC session might get blocked on a latch. Potrebbe essere possibile terminare la sessione della connessione DAC utilizzando la combinazione di tasti CTRL-C, ma l'esito dell'operazione non è sicuro.You might be able to terminate the DAC session using CNTRL-C but it is not guaranteed. Se l'esito non è positivo, l'unica possibilità potrebbe consistere nel riavviare SQL ServerSQL Server.In that case, your only option may be to restart 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.To guarantee connectivity and troubleshooting with the DAC, SQL ServerSQL Server reserves limited resources to process commands run on the DAC. Generalmente queste risorse sono sufficienti solo per semplici funzioni di diagnostica e risoluzione dei problemi, quali ad esempio quelle elencate di seguito.These resources are typically only enough for simple diagnostic and troubleshooting functions, such as those listed below.

    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:Although you can theoretically run any Transact-SQLTransact-SQL statement that does not have to execute in parallel on the DAC, we strongly recommend that you restrict usage to the following diagnostic and troubleshooting commands:

  • 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.Querying dynamic management views for basic diagnostics such as sys.dm_tran_locks for the locking status, sys.dm_os_memory_cache_counters to check the health of caches, and sys.dm_exec_requests and sys.dm_exec_sessions for active sessions and requests. 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.Avoid dynamic management views that are resource intensive (for example, sys.dm_tran_version_store scans the full version store and can cause extensive I/O) or that use complex joins. Per informazioni sulle implicazioni a livello di prestazioni, vedere la documentazione relativa alla vista a gestione dinamica specifica.For information about performance implications, see the documentation for the specific dynamic management view.

  • Query di viste del catalogo.Querying catalog views.

  • Comandi DBCC di base quali DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, e DBCC SQLPERF.Basic DBCC commands such as DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, and DBCC SQLPERF. Non eseguire comandi che usano una grande quantità di risorse, ad esempio DBCC CHECKDB, DBCC DBREINDEX o DBCC SHRINKDATABASE.Do not run resource-intensive commands such as DBCC CHECKDB, DBCC DBREINDEX, or DBCC SHRINKDATABASE.

  • Transact-SQLTransact-SQL comando KILL<spid>. KILL<spid> command. 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.Depending on the state of SQL ServerSQL Server, the KILL command might not always succeed; then the only option may be to restart SQL ServerSQL Server. Di seguito vengono riportate alcune linee guida generali:The following are some general guidelines:

    • Verificare che lo SPID sia stato effettivamente terminato eseguendo la query SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>.Verify that the SPID was actually killed by querying SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>. Se non viene restituita alcuna riga, la sessione è stata terminata.If it returns no rows, it means the session was killed.

    • 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>.If the session is still there, verify whether there are tasks assigned to this session by running the 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.If you see the task there, most likely your session is currently being killed. Si noti che l'operazione potrebbe richiedere una notevole quantità di tempo e non riuscire.Note that this may take considerable amount of time and may not succeed at all.

    • 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.If there are no tasks in the sys.dm_os_tasks associated with this session, but the session remains in sys.dm_exec_sessions after executing the KILL command, it means that you do not have a worker available. 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.Select one of the currently running tasks (a task listed in the sys.dm_os_tasks view with a sessions_id <> NULL), and kill the session associated with it to free up the worker. Si noti che la terminazione di una singola sessione potrebbe non essere sufficiente e che potrebbe essere necessario terminare più sessioni.Note that it may not be enough to kill a single session: you may have to kill multiple ones.

Porta della connessione DACDAC Port

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 . listens for the DAC on TCP port 1434 if available or a TCP port dynamically assigned upon Motore di databaseDatabase Engine startup. Il log degli errori contiene il numero di porta su cui è in attesa la connessione DAC.The error log contains the port number the DAC is listening on. Per impostazione predefinita, il listener della connessione DAC accetta connessioni solo sulla porta locale.By default the DAC listener accepts connection on only the local port. Per un esempio di codice che attiva le connessioni amministrative remote, vedere Opzione di configurazione del server remote admin connections.For a code sample that activates remote administration connections, see remote admin connections Server Configuration Option.

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.After the remote administration connection is configured, the DAC listener is enabled without requiring a restart of SQL ServerSQL Server and a client can now connect to the DAC remotely. È 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.You can enable the DAC listener to accept connections remotely even if SQL ServerSQL Server is unresponsive by first connecting to SQL ServerSQL Server using the DAC locally, and then executing the sp_configure stored procedure to accept connection from remote connections.

Nelle configurazioni cluster la connessione DAC è disattivata per impostazione predefinita.On cluster configurations, the DAC will be off by default. 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.Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. 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.If SQL ServerSQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL ServerSQL Server to connect with the DAC. È pertanto consigliabile abilitare l'opzione di configurazione remote admin connections in sistemi cluster.Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems.

La porta della connessione DAC viene assegnata dinamicamente da SQL ServerSQL Server durante l'avvio.The DAC port is assigned dynamically by SQL ServerSQL Server during startup. 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.When connecting to the default instance, the DAC avoids using a SQL ServerSQL Server Resolution Protocol (SSRP) request to the SQL Server Browser Service when connecting. Essa si connette prima sulla porta TCP 1434.It first connects over TCP port 1434. Se questo tentativo di connessione termina con esito negativo, la connessione DAC esegue una chiamata SSRP per ottenere la porta.If that fails, it makes an SSRP call to get the port. Se SQL ServerSQL Server Browser non è in attesa di richieste SSRP, la richiesta di connessione restituisce un errore.If SQL ServerSQL Server Browser is not listening for SSRP requests, the connection request returns an error. Vedere il log degli errori per ottenere il numero di porta su cui è in attesa la connessione DAC.Refer to the error log to find the port number DAC is listening on. Se SQL ServerSQL Server è configurato per accettare connessioni amministrative remote, è necessario inizializzare l'applicazione livello dati con un numero di porta esplicito:If SQL ServerSQL Server is configured to accept remote administration connections, the DAC must be initiated with an explicit port number:

sqlcmd–Stcp: <server>,<port>sqlcmd–Stcp: <server>,<port>

Il log degli errori di SQL ServerSQL Server elenca il numero di porta relativo all'applicazione livello dati, che per impostazione predefinita è 1434.The SQL ServerSQL Server error log lists the port number for the DAC, which is 1434 by default. Se SQL ServerSQL Server è configurato per accettare solo applicazioni livello dati locali, eseguire la connessione utilizzando l'adattatore loopback con il comando seguente:If SQL ServerSQL Server is configured to accept local DAC connections only, connect using the loopback adapter using the following command:

sqlcmd–S127.0.0.1,1434sqlcmd–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.When connecting to the Database SQL di AzureAzure SQL Database with the DAC, you must also specify the database name in the connection string by using the -d option.

EsempioExample

In questo esempio un amministratore si accorge che il server URAN123 non risponde e desidera diagnosticare il problema.In this example, an administrator notices that server URAN123 is not responding and wants to diagnose the problem. 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.To do this, the user activates the sqlcmd command prompt utility and connects to server URAN123 using -A to indicate the 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.The administrator can now execute queries to diagnose the problem and possibly terminate the unresponsive sessions.

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:A similar example connecting to Database SQLSQL Database would use the following command including the -d parameter to specify the database:

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

Utilizzo di sqlcmd con variabili di scriptingUse sqlcmd with Scripting Variables

Utilità sqlcmdsqlcmd Utility

SELECT (Transact-SQL)SELECT (Transact-SQL)

sp_who (Transact-SQL)sp_who (Transact-SQL)

sp_lock (Transact-SQL)sp_lock (Transact-SQL)

KILL (Transact-SQL)KILL (Transact-SQL)

DBCC CHECKALLOC (Transact-SQL)DBCC CHECKALLOC (Transact-SQL)

DBCC CHECKDB (Transact-SQL)DBCC CHECKDB (Transact-SQL)

DBCC OPENTRAN (Transact-SQL)DBCC OPENTRAN (Transact-SQL)

DBCC INPUTBUFFER (Transact-SQL)DBCC INPUTBUFFER (Transact-SQL)

Opzioni di configurazione del server (SQL Server)Server Configuration Options (SQL Server)

Funzioni e viste a gestione dinamica relative alle transazioni (Transact-SQL)Transaction Related Dynamic Management Views and Functions (Transact-SQL)

Flag di traccia (Transact-SQL)Trace Flags (Transact-SQL)