Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Applies to:SQL Server
Details
| Attribute | Value |
|---|---|
| Product Name | SQL Server |
| Event ID | 988 |
| Event Source | MSSQLSERVER |
| Component | SQLEngine |
| Symbolic Name | DB_HADRON_DATABASE_NO_QUORUM |
| Message Text | Tidak dapat mengakses database '%.*ls' karena tidak memiliki kuorum simpul untuk ketersediaan tinggi. Coba operasi ini lagi nanti. |
Symptoms
Saat Anda mencoba menambahkan database ke grup ketersediaan AlwaysOn atau melakukan operasi baca/tulis pada replika utama, Anda mungkin menerima kesalahan SQL Server 988 berikut:
Unable to access database '<DB Name>' because it lacks a quorum of nodes for high availability. (Microsoft SQL Server, Error: 988)
Kesalahan ini menunjukkan bahwa database tidak dapat diakses atau ditambahkan karena jumlah replika sekunder yang disinkronkan yang diperlukan tidak tersedia untuk melakukan transaksi.
Cause
The REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT setting enforces that the primary replica must wait for a specified number of synchronous secondary replicas to harden each transaction before committing. Jika jumlah replika yang diperlukan tidak online, terhubung, dan disinkronkan, Anda mungkin mengalami masalah berikut, yang menyebabkan skenario pemblokiran atau kegagalan yang memicu kesalahan 988.
- Replika utama tidak dapat menyelesaikan penerapan.
- Database yang ditambahkan tidak dapat menyelesaikan proses gabungan, karena sekunder belum berpartisipasi.
Scenarios
Anda mungkin mengalami kesalahan ini dalam skenario berikut:
Skenario 1: Menambahkan database baru
Saat database baru ditambahkan ke grup ketersediaan, sekunder belum menjadi bagian dari grup dan tidak dapat mengakui penerapan, menyebabkan kondisi pemblokiran.
Skenario 2: Kegagalan penerapan runtime
Ketika nilai REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT yang dikonfigurasi lebih besar dari jumlah sekunder sinkron sehat yang tersedia, primer tidak dapat melanjutkan penerapan.
Workaround
Untuk mengatasi masalah ini, gunakan salah satu opsi berikut:
Opsi 1: Sesuaikan pengaturan REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
Menurunkan nilai untuk 0 memungkinkan primer berkomitmen tanpa menunggu sekunder sinkron.
Warning
Opsi ini meningkatkan ketersediaan tetapi meningkatkan risiko kehilangan data dalam skenario failover.
Menggunakan SQL Server Management Studio (SSMS)
- Navigasikan ke nama grup ketersediaan di SSMS.
- Right-click the name and select Properties.
- Atur NILAI REQUIRED SYNCHRONIZED SECONDARIES TO COMMIT ke
0atau nilai yang sesuai.
Use T-SQL
Jalankan kueri berikut:
ALTER AVAILABILITY GROUP [AGNAME] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0);
Opsi 2: Pra-Benih Replika Sekunder (untuk Menambahkan Database)
Pastikan sekunder siap sebelum menambahkan database. Then, use automatic seeding, or manually restore the database on each secondary by using the Join only option.
Troubleshooting
Untuk mendiagnosis dan mengatasi masalah ini, ikuti langkah-langkah berikut:
Langkah 1: Konfirmasi pengaturan REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
Untuk memverifikasi apakah REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT pengaturan diaktifkan untuk grup ketersediaan (AG) Anda, gunakan SSMS, atau T-SQL. Jika nilainya 1 atau lebih tinggi, lanjutkan ke Langkah 2: Verifikasi status replika sekunder sinkron.
Use SSMS
- Navigasikan ke nama grup ketersediaan di SSMS.
- Right-click the name and select Properties.
- Periksa nilai SEKUNDER YANG DISINKRONKAN YANG DIPERLUKAN UNTUK MENERAPKAN .
Use T-SQL
Jalankan kueri berikut pada replika utama:
SELECT name AS Availability_group_name,
required_synchronized_secondaries_to_commit,
*
FROM sys.availability_groups;
Note
Kueri ini dapat dijalankan meskipun kesalahan 988 mulai terjadi.
Langkah 2: Verifikasi status replika sekunder sinkron
Untuk memeriksa apakah jumlah minimum replika sekunder sinkron terhubung, disinkronkan, dan sehat, gunakan SSMS, atau T-SQL.
Use SSMS
- Buka Dasbor Grup Ketersediaan pada replika utama.
- Tinjau status replika sekunder.
Use T-SQL
Jalankan kueri berikut:
SELECT ag.name AS Availability_group_name,
drcs.database_name,
ar.replica_server_name,
ars.role_desc,
ars.connected_state_desc,
ars.synchronization_health_desc,
ars.last_connect_error_description,
ars.last_connect_error_number,
ars.last_connect_error_timestamp,
ar.endpoint_url
FROM sys.dm_hadr_availability_replica_states AS ars
INNER JOIN sys.availability_replicas AS ar
ON ars.replica_id = ar.replica_id
INNER JOIN sys.availability_groups AS ag
ON ar.group_id = ag.group_id
INNER JOIN sys.dm_hadr_database_replica_cluster_states AS drcs
ON ar.replica_id = drcs.replica_id;
Pastikan bahwa jumlah CONNECTEDreplika , SYNCHRONIZED, dan HEALTHY cocok dengan REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT pengaturan .
Sesi peristiwa yang diperluas berikut menangkap penerapan pengaturan kebijakan dan perubahan status sinkronisasi untuk mendiagnosis mengapa sekunder yang disinkronkan yang diperlukan mencegah penerapan transaksi di grup ketersediaan AlwaysOn SQL Server.
CREATE EVENT SESSION [ag_state_change] ON SERVER
ADD EVENT sqlserver.alwayson_ddl_executed
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text)),
ADD EVENT sqlserver.hadr_db_commit_mgr_harden
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text)),
ADD EVENT sqlserver.hadr_db_commit_mgr_set_policy
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text)),
ADD EVENT sqlserver.hadr_db_commit_mgr_update_harden
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text)),
ADD EVENT sqlserver.hadr_db_partner_set_policy
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text)),
ADD EVENT sqlserver.hadr_db_partner_set_sync_state
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text))
ADD TARGET package0.event_file
(SET filename = N'ag_state_change')
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
GO
The hadr_db_commit_mgr_update_harden event could be used to identify the issue. When the issue occurs, the MinSyncCommitFailure status means there aren't enough synchronization secondaries to meet the configured minimum synchronization count.