Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server,
Database SQL di Azure e
Istanza gestita di SQL di Azure.
SQL 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 Server per eseguire query di diagnostica e risolvere i problemi anche quando SQL Server non risponde alle richieste di connessione standard.
Questa connessione amministrativa dedicata supporta la crittografia e altre caratteristiche di sicurezza di SQL Server. La connessione DAC consente solo il cambiamento del contesto utente in un altro utente con privilegi amministrativi.
SQL Server esegue ogni tentativo di connettersi correttamente all'applicazione livello dati, ma in situazioni estreme potrebbe non riuscire.
Connettersi con la connessione amministrativa dedicata
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 usando la sp_configure stored procedure con l'opzione di configurazione del server connessioni di amministrazione remota .
Solo i membri del ruolo sysadmin di SQL Server possono connettersi tramite la connessione amministrativa dedicata.
La connessione DAC è disponibile e supportata tramite l'utilità della riga di comando sqlcmd usando un'opzione di amministrazione speciale (-A). Per altre informazioni sull'uso sqlcmddi , vedere sqlcmd - Usare con le variabili di scripting. È anche possibile stabilire la connessione aggiungendo il prefisso admin: al nome dell'istanza nel formato sqlcmd -S admin:<instance_name>. Una connessione amministrativa dedicata può essere stabilita anche da un editor di query di SQL Server Management Studio connettendosi a admin:<instance_name>.
Per stabilire una connessione amministrativa dedicata da SQL Server Management Studio:
Disconnettere tutte le connessioni all'istanza di SQL Server correlata, incluse le finestre di Esplora oggetti e tutte le finestre di query aperte.
Nel menu selezionare File> Nuovo > Query del motore di database
Dalla finestra di dialogo di connessione immettere
admin:<server_name>nel campo Nome server se si usa l'istanza predefinita oadmin:<server_name>\<instance_name>se si usa un'istanza denominata.
Porta della connessione amministrativa dedicata
SQL Server è in ascolto della connessione amministrativa dedicata sulla porta TCP 1434 se disponibile o su una porta TCP assegnata dinamicamente all'avvio del motore di database. Il log degli errori contiene il numero di porta su cui è in ascolto 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 di amministrazione remota, vedere Configurazione del server: connessioni di amministrazione remota.
Dopo aver configurato la connessione amministrativa remota, il relativo listener viene abilitato senza il riavvio di SQL Server, pertanto da tale istante un client può stabilire una connessione amministrativa dedicata in remoto. È possibile abilitare il listener della connessione amministrativa dedicata per accettare connessioni in remoto anche se SQL Server non risponde effettuando prima una connessione a SQL Server con la connessione amministrativa dedicata locale e poi eseguendo la stored procedure sp_configure per accettare la connessione da connessioni remote.
Nelle configurazioni cluster la connessione DAC è disattivata per impostazione predefinita. Gli utenti possono usare l'opzione Connessioni di amministrazione remote di sp_configure per abilitare il listener della connessione amministrativa dedicata per l'accesso a una connessione remota. Se SQL Server non risponde e il listener della connessione amministrativa dedicata non è abilitato, potrebbe essere necessario riavviare SQL Server per poter stabilire la connessione amministrativa dedicata. È pertanto consigliabile abilitare l'opzione di configurazione remote admin connections in sistemi cluster.
La porta della connessione amministrativa dedicata viene assegnata dinamicamente da SQL Server durante l'avvio. Durante la connessione all'istanza predefinita, la connessione amministrativa dedicata evita di usare una richiesta SSRP (SQL Server Resolution Protocol) 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 Server Browser non è in ascolto 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 Server è configurato per accettare connessioni amministrative remote, è necessario inizializzare la connessione amministrativa dedicata con un numero di porta esplicito:
sqlcmd -S tcp:<server>,<port>
Il log degli errori di SQL Server elenca il numero di porta relativo alla connessione amministrativa dedicata, che per impostazione predefinita è 1434. Se SQL Server è configurato per accettare solo connessioni amministrative dedicate locali, stabilire la connessione usando la scheda Loopback con il comando seguente:
sqlcmd -S 127.0.0.1,1434
Limitazioni
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 Server è consentita un'unica connessione amministrativa dedicata. 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 Express non è in ascolto sulla porta DAC, a meno che non sia stato avviato con il flag di traccia 7806.
La connessione DAC tenta inizialmente di connettersi al database predefinito associato all'account di accesso. Dopo la connessione, è possibile connettersi al
masterdatabase. Se il database predefinito è offline o altrimenti non disponibile, la connessione restituisce l'errore 4060. La connessione riesce, tuttavia, se si sostituisce la connessione al database predefinito con quella al databasemasterusando il comando seguente:sqlcmd -A -d masterÈ consigliabile connettersi al database
mastertramite la connessione amministrativa dedicata perché in questo modomastersarà certamente disponibile quando l'istanza del motore di database viene avviata.SQL Server non consente l'esecuzione di query parallele o di comandi con la connessione amministrativa dedicata. 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 usare l'applicazione livello dati per eseguire query o query a elevato utilizzo di risorse che possono bloccare altre query. Questa misura consente di evitare che la connessione DAC aggravi gli eventuali problemi già esistenti sul server. Per evitare potenziali scenari di blocco, se è necessario eseguire query che potrebbero bloccarsi, eseguire la query con livelli di isolamento basati su snapshot, se possibile; in caso contrario, impostare il livello
READ UNCOMMITTEDdi isolamento della transazione su e impostare ilLOCK_TIMEOUTvalore su un valore breve, ad esempio 2000 millisecondi o entrambi. In questo modo si eviterà il blocco della sessione della connessione DAC. A seconda dello stato in cui si trova SQL Server, tuttavia, la sessione della connessione amministrativa dedicata potrebbe bloccarsi su un latch. Potrebbe essere possibile terminare la sessione della connessione amministrativa dedicata usando la combinazione di tasti CTRL+C, ma l'esito dell'operazione non è garantito. In tal caso, l'unica opzione potrebbe essere riavviare SQL Server.Per garantire la connettività e la risoluzione dei problemi con la connessione amministrativa dedicata, SQL Server riserva risorse limitate all'elaborazione dei comandi eseguiti sulla connessione amministrativa dedicata. 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-SQL che non richiede l'esecuzione in parallelo sulla connessione amministrativa dedicata, è consigliabile limitare l'utilizzo ai comandi di diagnostica e 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 usano 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. Evitare di eseguire comandi che usano una grande quantità di risorse, ad esempio DBCC CHECKDB, DBCC DBREINDEX o DBCC SHRINKDATABASE.
Comando Transact-SQL
KILL <spid>. A seconda dello stato di SQL Server, ilKILLcomando potrebbe non riuscire. L'unica opzione potrebbe essere riavviare l'istanza, nel caso di SQL Server o Istanza gestita di SQL di Azure. 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. Questo può richiedere una notevole quantità di tempo e potrebbe non riuscire affatto.Se non sono presenti attività nell'oggetto
sys.dm_os_tasksassociato a questa sessione, ma la sessione rimane insys.dm_exec_sessionsdopo l'esecuzione delKILLcomando, significa che non è disponibile un ruolo di lavoro. Selezionare una delle attività attualmente in esecuzione (un'attività elencata nellasys.dm_os_tasksvisualizzazione con unsessions_id <> NULL) e terminare la sessione associata per liberare il ruolo di lavoro. Potrebbe non essere sufficiente terminare una singola sessione: potrebbe essere necessario uccidere più sessioni.
Limitazione nel database SQL di Azure
Quando ci si connette al database SQL di Azure con la connessione amministrativa dedicata, è necessario specificare anche il nome del database nella stringa di connessione usando l'opzione -d.
Limitazione in Istanza gestita di SQL di Azure
L'applicazione livello dati non funziona su un endpoint privato per Istanza gestita di SQL di Azure. Nelle istanze gestite di SQL, l'applicazione livello dati è in ascolto sulla porta 1434. Poiché gli endpoint privati alle istanze gestite di SQL consentono solo le connessioni sulla porta 1433, non è possibile usare un endpoint privato per stabilire una connessione da applicazione livello dati. Per connettersi con l'applicazione livello dati, è necessario trovarsi nella stessa rete virtuale dell'istanza gestita di SQL.
Esempi
In questo esempio un amministratore si accorge che il server contoso-server 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 contoso-server utilizzando -A per indicare la connessione DAC.
sqlcmd -S contoso-server -U sa -P <StrongPassword> -A
L'amministratore può quindi eseguire query per diagnosticare il problema e, se necessario, terminare le sessioni che non rispondono.
Un esempio simile di connessione al database SQL usa il comando seguente, incluso il -d parametro per specificare il database:
sqlcmd -S serverName.database.windows.net,1434 -U sa -P <StrongPassword> -d AdventureWorks
Contenuti correlati
- Usare 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
- Funzioni e viste DMV relative alle transazioni (Transact-SQL)
- Impostare i flag di traccia con DBCC TRACEON (Transact-SQL)