Koneksi diagnostik untuk administrator database
Berlaku untuk: SQL ServerAzure SQL Database
SQL Server menyediakan koneksi diagnostik khusus untuk administrator ketika koneksi standar ke server tidak dimungkinkan. Koneksi diagnostik ini memungkinkan administrator untuk mengakses SQL Server untuk menjalankan kueri diagnostik dan memecahkan masalah bahkan ketika SQL Server tidak merespons permintaan koneksi standar.
Koneksi administrator khusus (DAC) ini mendukung enkripsi dan fitur keamanan SQL Server lainnya. DAC hanya memungkinkan perubahan konteks pengguna ke pengguna admin lain.
SQL Server membuat setiap upaya untuk membuat DAC berhasil terhubung, tetapi dalam situasi ekstrem mungkin tidak berhasil.
Menyambungkan dengan DAC
Secara default, koneksi hanya diizinkan dari klien yang berjalan di server. Koneksi jaringan tidak diizinkan kecuali dikonfigurasi dengan menggunakan sp_configure
prosedur tersimpan dengan opsi koneksi admin jarak jauh.
Hanya anggota peran sysadmin SQL Server yang dapat terhubung menggunakan DAC.
DAC tersedia dan didukung melalui sqlcmd
utilitas prompt perintah menggunakan sakelar administrator khusus (-A
). Untuk informasi selengkapnya tentang menggunakan sqlcmd
, lihat Menggunakan sqlcmd dengan Variabel Pembuatan Skrip. Anda juga dapat menyambungkan awalan admin:
ke nama instans dalam format sqlcmd -S admin:<instance_name>
. Anda juga dapat memulai DAC dari SQL Server Management Studio Editor Kueri dengan menyambungkan ke admin:<instance_name>
.
Untuk membuat DAC dari SQL Server Management Studio:
Putuskan sambungan semua koneksi ke instans SQL Server terkait, termasuk Object Explorer dan semua jendela kueri yang terbuka.
Dari menu, pilih File > Baru > Kueri Mesin Database
Dari kotak dialog koneksi di bidang Nama Server, masukkan
admin:<server_name>
jika menggunakan instans default atauadmin:<server_name>\<instance_name>
jika menggunakan instans bernama.
Batasan
Karena DAC hanya ada untuk mendiagnosis masalah server dalam keadaan yang jarang terjadi, ada beberapa batasan pada koneksi:
Untuk menjamin bahwa ada sumber daya yang tersedia untuk koneksi, hanya satu DAC yang diizinkan per instans SQL Server. Jika koneksi DAC sudah aktif, setiap permintaan baru untuk terhubung melalui DAC ditolak dengan kesalahan 17810.
Untuk menghemat sumber daya, SQL Server Express tidak mendengarkan port DAC kecuali dimulai dengan bendera pelacakan 7806.
DAC awalnya mencoba menyambungkan ke database default yang terkait dengan login. Setelah berhasil tersambung, Anda bisa menyambungkan ke
master
database. Jika database default offline atau tidak tersedia, koneksi akan mengembalikan kesalahan 4060. Namun, ini akan berhasil jika Anda mengambil alih database default untuk menyambungkanmaster
ke database sebagai gantinya menggunakan perintah berikut:sqlcmd -A -d master
Sebaiknya Anda menyambungkan
master
ke database dengan DAC karenamaster
dijamin tersedia jika instans Mesin Database dimulai.SQL Server melarang menjalankan kueri atau perintah paralel dengan DAC. Misalnya, kesalahan 3637 dihasilkan jika Anda menjalankan salah satu pernyataan berikut dengan DAC:
RESTORE...
BACKUP...
Hanya sumber daya terbatas yang dijamin tersedia dengan DAC. Jangan gunakan DAC untuk menjalankan kueri intensif sumber daya (misalnya. gabungan kompleks pada tabel besar) atau kueri yang mungkin memblokir. Ini membantu mencegah DAC memperparah masalah server yang ada. Untuk menghindari skenario pemblokiran potensial, jika Anda harus menjalankan kueri yang dapat memblokir, jalankan kueri di bawah tingkat isolasi berbasis rekam jepret jika memungkinkan; jika tidak, atur tingkat isolasi transaksi ke READ UNCOMMITTED dan atur nilai LOCK_TIMEOUT ke nilai pendek seperti 2000 milidetik, atau keduanya. Ini akan mencegah sesi DAC diblokir. Namun, tergantung pada status SQL Server berada, sesi DAC mungkin diblokir pada kait. Anda mungkin dapat mengakhiri sesi DAC menggunakan CTRL-C tetapi tidak dijamin. Dalam hal ini, satu-satunya opsi Anda mungkin adalah memulai ulang SQL Server.
Untuk menjamin konektivitas dan pemecahan masalah dengan DAC, SQL Server mencadangkan sumber daya terbatas untuk memproses perintah yang dijalankan pada DAC. Sumber daya ini biasanya hanya cukup untuk fungsi diagnostik dan pemecahan masalah sederhana, seperti yang tercantum di bawah ini.
Meskipun Anda dapat menjalankan pernyataan Transact-SQL apa pun secara teoritis yang tidak harus dijalankan secara paralel pada DAC, kami sangat menyarankan Anda membatasi penggunaan ke perintah diagnostik dan pemecahan masalah berikut:
Mengkueri tampilan manajemen dinamis untuk diagnostik dasar seperti sys.dm_tran_locks untuk status penguncian, sys.dm_os_memory_cache_counters untuk memeriksa kesehatan cache, dan sys.dm_exec_requests dan sys.dm_exec_sessions untuk sesi dan permintaan aktif. Hindari tampilan manajemen dinamis yang intensif sumber daya (misalnya, sys.dm_tran_version_store memindai penyimpanan versi lengkap dan dapat menyebabkan I/O yang luas) atau yang menggunakan gabungan kompleks. Untuk informasi tentang implikasi performa, lihat dokumentasi untuk tampilan manajemen dinamis tertentu.
Mengkueri tampilan katalog.
Perintah DBCC dasar seperti DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, dan DBCC SQLPERF. Hindari perintah intensif sumber daya seperti DBCC CHECKDB, DBCC DBREINDEX, atau DBCC SHRINKDATABASE.
Perintah T-SQL
KILL <spid>
. Bergantung pada status SQL Server, perintah KILL mungkin tidak selalu berhasil; maka satu-satunya opsi mungkin adalah menghidupkan ulang SQL Server. Berikut ini adalah beberapa panduan umum:Verifikasi bahwa SPID dimatikan dengan mengkueri
SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>
. Jika tidak mengembalikan baris, itu berarti sesi telah dimatikan.Jika sesi masih ada, verifikasi apakah ada tugas yang ditetapkan ke sesi ini dengan menjalankan kueri
SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>
. Jika Anda melihat tugas di sana, kemungkinan besar sesi Anda saat ini sedang dimatikan. Ini mungkin memakan waktu yang cukup lama dan mungkin tidak berhasil sama sekali.Jika tidak ada tugas dalam sys.dm_os_tasks yang terkait dengan sesi ini, tetapi sesi tetap dalam sys.dm_exec_sessions setelah menjalankan perintah KILL, itu berarti Anda tidak memiliki pekerja yang tersedia. Pilih salah satu tugas yang sedang berjalan (tugas yang tercantum dalam tampilan sys.dm_os_tasks dengan
sessions_id <> NULL
), dan bunuh sesi yang terkait dengannya untuk membebaskan pekerja. Mungkin tidak cukup untuk membunuh satu sesi: Anda mungkin harus membunuh beberapa sesi.
Port DAC
SQL Server mendengarkan DAC pada port TCP 1434 jika tersedia atau port TCP ditetapkan secara dinamis saat startup Mesin Database. Log kesalahan berisi nomor port yang didengarkan DAC. Secara default pendengar DAC hanya menerima koneksi pada port lokal. Untuk sampel kode yang mengaktifkan koneksi administrasi jarak jauh, lihat Opsi Konfigurasi Server koneksi admin jarak jauh.
Setelah koneksi administrasi jarak jauh dikonfigurasi, pendengar DAC diaktifkan tanpa memulai ulang SQL Server dan klien sekarang dapat terhubung ke DAC dari jarak jauh. Anda dapat mengaktifkan pendengar DAC untuk menerima koneksi dari jarak jauh bahkan jika SQL Server tidak responsif dengan terlebih dahulu menyambungkan ke SQL Server menggunakan DAC secara lokal, lalu menjalankan prosedur tersimpan sp_configure
untuk menerima koneksi dari koneksi jarak jauh.
Pada konfigurasi kluster, DAC akan nonaktif secara default. Pengguna dapat menjalankan opsi sp_configure
koneksi admin jarak jauh untuk mengaktifkan pendengar DAC untuk mengakses koneksi jarak jauh. Jika SQL Server tidak responsif dan pendengar DAC tidak diaktifkan, Anda mungkin harus memulai ulang SQL Server untuk terhubung dengan DAC. Oleh karena itu, kami sarankan Anda mengaktifkan opsi konfigurasi koneksi admin jarak jauh pada sistem berkluster.
Port DAC ditetapkan secara dinamis oleh SQL Server selama startup. Saat menyambungkan ke instans default, DAC menghindari penggunaan permintaan SQL Server Resolution Protocol (SSRP) ke SQL Server Browser Service saat menyambungkan. Ini pertama-tama terhubung melalui port TCP 1434. Jika gagal, itu membuat panggilan SSRP untuk mendapatkan port. Jika Browser SQL Server tidak mendengarkan permintaan SSRP, permintaan koneksi mengembalikan kesalahan. Lihat log kesalahan untuk menemukan DAC nomor port yang didengarkan. Jika SQL Server dikonfigurasi untuk menerima koneksi administrasi jarak jauh, DAC harus dimulai dengan nomor port eksplisit:
sqlcmd -S tcp:<server>,<port>
Log kesalahan SQL Server mencantumkan nomor port untuk DAC, yaitu 1434 secara default. Jika SQL Server dikonfigurasi untuk menerima koneksi DAC lokal saja, sambungkan menggunakan adaptor loopback menggunakan perintah berikut:
sqlcmd -S 127.0.0.1,1434
Tip
Saat menyambungkan ke Azure SQL Database dengan DAC, Anda juga harus menentukan nama database di string koneksi dengan menggunakan -d
opsi .
Contoh
Dalam contoh ini, administrator melihat bahwa server URAN123
tidak merespons dan ingin mendiagnosis masalah. Untuk melakukan ini, pengguna mengaktifkan sqlcmd
utilitas prompt perintah dan terhubung ke server URAN123
menggunakan -A
untuk menunjukkan DAC.
sqlcmd -S URAN123 -U sa -P <StrongPassword> -A
Administrator sekarang dapat menjalankan kueri untuk mendiagnosis masalah dan mungkin mengakhiri sesi yang tidak responsif.
Contoh serupa yang menyambungkan ke SQL Database akan menggunakan perintah berikut termasuk parameter -d untuk menentukan database:
sqlcmd -S serverName.database.windows.net,1434 -U sa -P <StrongPassword> -d AdventureWorks
Lihat juga
- Menggunakan sqlcmd dengan Variabel Pembuatan Skrip
- Utilitas sqlcmd
- SELECT (Transact-SQL)
- sp_who (T-SQL)
- sp_lock (T-SQL)
- KILL (Transact-SQL)
- DBCC CHECKALLOC (Transact-SQL)
- DBCC CHECKDB (Transact-SQL)
- DBCC OPENTRAN (Transact-SQL)
- DBCC INPUTBUFFER (Transact-SQL)
- Opsi Konfigurasi Server (SQL Server)
- Tampilan dan Fungsi Manajemen Dinamis Terkait Transaksi (Transact-SQL)
- Bendera Pelacakan (Transact-SQL)