Ngân hàng đề — Microsoft Azure Database Administrator

Tìm thấy 217 câu.

Câu 141
You have an Azure subscription that contains an Azure SQL database named SQL1.

SQL1 is in an Azure region that does not support availability zones.

You need to ensure that you have a secondary replica of SQL1 in the same region.

What should you use?
  1. A log shipping
  2. B active geo-replication
  3. C Microsoft SQL Server failover clusters
  4. D auto-failover groups
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi gốc:
You have an Azure subscription that contains an Azure SQL database named SQL1.
SQL1 is in an Azure region that does not support availability zones.
You need to ensure that you have a secondary replica of SQL1 in the same region.
What should you use?

Giải thích rõ ràng:
🛠️ Câu hỏi tập trung vào Azure SQL Database (một dịch vụ PaaS của Azure), nơi bạn có một cơ sở dữ liệu tên SQL1 nằm trong một Azure region không hỗ trợ Availability Zones (AZ). Nhiệm vụ là đảm bảo có một secondary replica (bản sao phụ có thể đọc được) của SQL1 trong cùng region đó.

✅ Yêu cầu chính: Tạo secondary replica thủ công hoặc có kiểm soát trong cùng region để hỗ trợ high availability (HA), readability (đọc dữ liệu từ replica) hoặc failover thủ công, vì region không hỗ trợ AZ (AZ dùng cho zone-redundant HA tự động). Azure SQL Database có HA built-in nội bộ (sử dụng Always On Availability Groups), nhưng để expose và quản lý secondary replica rõ ràng trong cùng region, cần tính năng phù hợp.

🧩 Bối cảnh cập nhật 2026: Theo tài liệu Azure mới nhất (tính đến 2026), Azure SQL hỗ trợ nhiều tùy chọn replication, nhưng chỉ một số phù hợp cho same-region secondary replica khi không có AZ.

✅ Đáp án đúng: active geo-replication

Lý do lựa chọn:
🛡️ Active geo-replication là tính năng của Azure SQL Database cho phép tạo tối đa 4 readable secondary replicas trên cùng server hoặc server khác, trong cùng region hoặc region khác. Đặc biệt, nó hỗ trợ same-region replication ngay cả khi region không hỗ trợ AZ, giúp đảm bảo secondary replica có thể đọc dữ liệu (read-only) và hỗ trợ failover thủ công. Đây là giải pháp lý tưởng vì:

  • Không yêu cầu AZ.
  • Dễ cấu hình qua Azure Portal, CLI hoặc PowerShell.
  • Asynchronously replicate transactions từ primary sang secondary.
  • Phù hợp cho workload cần readable secondary trong cùng region mà không dùng geo-redundancy (cross-region).

📋 Giải thích tất cả các phương án (đúng và sai)

  • log shipping ❌
    Phân tích sai: Log shipping là tính năng legacy của on-premises SQL Server, dùng để vận chuyển transaction log thủ công giữa primary và secondary. Azure SQL Database (PaaS) không hỗ trợ log shipping vì dịch vụ managed tự động hóa HA. Sử dụng sẽ không khả dụng và không phù hợp cho Azure environment.

  • active geo-replication ✅
    Phân tích đúng: Như đã giải thích ở trên, đây là lựa chọn chính xác. Nó chính thức hỗ trợ same-region secondaries (theo docs Azure 2026), asynchronous replication, readable endpoints, và không phụ thuộc AZ. Ví dụ: New-AzSqlDatabaseGeoReplicationLink cho phép chỉ định cùng region.

  • Microsoft SQL Server failover clusters ❌
    Phân tích sai: Failover clusters (Always On FCI) dành cho SQL Server on Azure VMs (IaaS), yêu cầu Windows Failover Cluster và shared storage (như Azure Disk). Azure SQL Database không hỗ trợ vì là PaaS managed, không expose cluster configuration cho user.

  • auto-failover groups ❌
    Phân tích sai: Auto-failover groups dùng để tự động failover cross-region dựa trên active geo-replication, yêu cầu secondary ở region khác (geo-redundant). Không hỗ trợ hoặc khuyến nghị cho same-region, và thường kết hợp với AZ cho local HA.

📘 Tài liệu tham khảo (cập nhật mới nhất đến 2026)

🛠️ Lời khuyên từ Azure DBA: Nếu triển khai, hãy kiểm tra tier (General Purpose hoặc Business Critical) và monitor qua Azure Monitor để đảm bảo lag replication thấp (<5s). Nếu cần AZ, migrate sang region hỗ trợ!

Câu 142
You have an Azure subscription that contains an instance of SQL Server on an Azure virtual machine named SQLVM1 and a user named User1. SQLVM1 hosts a database named DB1.

You need to ensure that User1 can create a scheduled task to perform a full backup of DB1. The solution must use the principle of least privilege.

Which built-in database role should you assign to User1?
  1. A db_owner
  2. B SQLAgentReaderRole
  3. C SQLAgentUserRole
  4. D SQLAgentOperatorRole
Xem giải thích

🧩 Phân tích chi tiết câu hỏi trắc nghiệm

📖 Nội dung câu hỏi:
Câu hỏi mô tả một tình huống trong Azure subscription, nơi có một máy ảo Azure (VM) tên SQLVM1 chạy instance SQL Server, và trên đó lưu trữ cơ sở dữ liệu DB1. Người dùng User1 cần được cấp quyền để tạo một scheduled task (nhiệm vụ lập lịch) nhằm thực hiện full backup cho DB1. Giải pháp phải tuân thủ nguyên tắc least privilege (quyền hạn tối thiểu, chỉ cấp quyền cần thiết nhất mà không dư thừa). Câu hỏi yêu cầu xác định built-in database role (vai trò cơ sở dữ liệu tích hợp sẵn) nên assign cho User1 trong SQL Server.

🔍 Bối cảnh kỹ thuật:

  • Đây là SQL Server chạy trên Azure VM (không phải Azure SQL Database managed), nên sử dụng SQL Server Agent để tạo scheduled jobs (nhiệm vụ lập lịch như backup).
  • Các jobs này được lưu trữ trong database msdb (system database).
  • Để tạo job backup DB1, User1 cần quyền tạo, sở hữu và chạy job của chính mình trong msdb, đồng thời có quyền backup trên DB1.
  • Nguyên tắc least privilege ưu tiên role có quyền hẹp nhất: chỉ cho phép tạo job cá nhân, không quản lý job người khác hay server-level quyền cao.
    (Kiến thức cập nhật đến 2026: SQL Server 2022 trở lên trên Azure VM vẫn giữ nguyên các fixed database roles cho SQL Agent như trong docs Microsoft SQL Server 2022. Không thay đổi lớn so với phiên bản trước.)

✅ Đáp án đúng: SQLAgentUserRole
Lý do lựa chọn:
Role SQLAgentUserRole (trong msdb database) cấp quyền tối thiểu cho User1 để tạo, chỉnh sửa, chạy và xóa các SQL Agent jobs thuộc sở hữu của chính mình, bao gồm job backup DB1. Điều này phù hợp least privilege vì:

  • Không cấp quyền quản lý job của người khác.
  • Không cần quyền server-level cao (như sysadmin).
  • User1 vẫn cần thêm quyền db_backupoperator trên DB1 để thực hiện backup, nhưng role này tập trung vào SQL Agent job creation.
    🛠️ Cách assign: USE msdb; ALTER ROLE SQLAgentUserRole ADD MEMBER [User1];
    📘 Nguồn tham khảo:
  • Microsoft Docs: SQL Server Agent Fixed Database Roles (cập nhật 2024-2026).
  • Azure SQL VM Best Practices for SQL Agent.

🛡️ Giải thích tất cả các phương án (theo thứ tự liệt kê)

  • db_owner ❌ SAI
    Role db_owner thuộc database cụ thể (như DB1), cấp quyền sở hữu toàn bộ database đó (tạo/alter/drop objects, backup/restore). Tuy nhiên, nó không cấp quyền tạo SQL Agent jobs vì jobs lưu trong msdb, không phải DB1. Sử dụng role này vi phạm least privilege (quá rộng) và không giải quyết yêu cầu scheduled task.

  • SQLAgentReaderRole ❌ SAI
    Role SQLAgentReaderRole (msdb) chỉ cho phép xem thông tin jobs, lịch chạy và lịch sử (read-only). User1 không thể tạo job mới để backup DB1. Đây là quyền quá hạn chế, không đáp ứng yêu cầu.

  • SQLAgentUserRole ✅ ĐÚNG
    Như đã giải thích ở trên: Cấp quyền tạo/run jobs cá nhân tối thiểu, lý tưởng cho least privilege khi chỉ cần scheduled backup DB1.

  • SQLAgentOperatorRole ❌ SAI
    Role SQLAgentOperatorRole (msdb) cấp quyền cao hơn: quản lý tất cả jobs (kể cả của người khác), start/stop SQL Agent, delete jobs. Vi phạm least privilege vì dư thừa quyền (User1 không cần quản lý job người khác), dù có thể tạo job nhưng không phải lựa chọn tối ưu.

💡 Lưu ý bổ sung:

  • Sau khi assign SQLAgentUserRole, kiểm tra bằng EXEC sp_helprolemember 'SQLAgentUserRole';.
  • Test job: Tạo script backup đơn giản như BACKUP DATABASE DB1 TO DISK = 'C:\Backup\DB1.bak'; trong job step.
  • Nếu cần quyền backup DB1, thêm ALTER ROLE db_backupoperator ADD MEMBER [User1]; trên DB1.
    Hy vọng phân tích này giúp bạn nắm vững! 🚀
Câu 143
You have SQL Server 2019 on an Azure virtual machine that runs Windows Server 2019. The virtual machine has 4 vCPUs and 28 GB of memory.
You scale up the virtual machine to 8 vCPUs and 64 GB of memory.
You need to reduce tempdb contention without negatively affecting server performance.
What is the number of secondary data files that you should configure for tempdb?
  1. A 2
  2. B 4
  3. C 8
  4. D 64
Xem giải thích

🧩 Giải thích nội dung câu hỏi

Câu hỏi mô tả tình huống bạn đang quản lý một máy ảo (VM) Azure chạy SQL Server 2019 trên Windows Server 2019, ban đầu có cấu hình 4 vCPUs và 28 GB bộ nhớ. Sau đó, bạn scale up (mở rộng theo chiều dọc) VM lên 8 vCPUs và 64 GB bộ nhớ.
Mục tiêu là giảm tình trạng tranh chấp (contention) trên tempdb – một database hệ thống tạm thời của SQL Server thường gặp vấn đề về allocation pages (như SGAM, GAM, IAM) khi có nhiều thread truy cập đồng thời – mà không làm ảnh hưởng tiêu cực đến hiệu suất tổng thể của server.
Câu hỏi yêu cầu xác định số lượng secondary data files cần cấu hình cho tempdb. Đây là best practice quan trọng trong SQL Server để phân bổ workload đều trên các file, tránh bottleneck trên file primary (tempdb.mdf). Với kiến thức cập nhật đến 2026 (SQL Server 2022 và Azure SQL VM best practices không thay đổi nguyên tắc này), số lượng file nên khớp với số logical processors (vCPUs trên Azure VM thường tương đương logical cores nếu không bật Hyper-Threading đặc biệt).

✅ Đáp án đúng: 8

Lý do lựa chọn:
Theo best practice mới nhất từ Microsoft (áp dụng cho SQL Server 2019/2022 trên Azure VM), để giảm tempdb contention hiệu quả, cần cấu hình tổng số data files cho tempdb bằng số logical processors (8 vCPUs ở đây), tối đa 8 files. Điều này phân bổ đều các thread SQL Server (mỗi core xử lý một file riêng), giảm tranh chấp trên allocation pages mà không tăng overhead đáng kể.
Cụ thể, 1 primary data file (tempdb.mdf) + 7-8 secondary data files (tempdbX.ndf) tùy theo convention, nhưng với 8 cores, khuyến nghị chính xác là 8 secondary data files để đạt tổng 8-9 files tối ưu (trong các exam cert như DP-300/AZ-305 và docs, 8 là con số chuẩn cho trường hợp này). Scale up từ 4 lên 8 vCPUs yêu cầu điều chỉnh tương ứng để tránh under-provisioning. Không ảnh hưởng performance vì files được đặt trên SSD Azure premium với kích thước bằng nhau (khoảng 128MB/file ban đầu).

📋 Phân tích tất cả các phương án

  • [SAI] 2 ❌
    Sai vì: Số lượng quá ít, chỉ phù hợp với hệ thống 1-2 cores (hoặc legacy config). Với 8 vCPUs, chỉ 2 secondary files sẽ gây contention cao trên allocation pages khi nhiều thread tranh chấp, làm chậm query tempdb-intensive (như sort/spills). Đây có thể là config mặc định cũ, không tối ưu sau scale up.

  • [SAI] 4 ❌
    Sai vì: Phù hợp với cấu hình ban đầu (4 vCPUs), nhưng sau scale up lên 8 vCPUs, 4 secondary files không đủ để phân bổ workload cho tất cả cores. Dẫn đến NUMA imbalance và contention tăng, ảnh hưởng performance tổng thể – vi phạm yêu cầu câu hỏi.

  • [ĐÚNG] 8 ✅
    Đúng vì: Khớp chính xác với 8 logical processors (vCPUs), theo quy tắc "1 file per core, max 8". Giảm contention tối ưu bằng cách stripe I/O đều, không overhead thêm (files kích thước bằng, growth uniform). Best practice từ Microsoft, áp dụng trực tiếp sau scale up.

  • [SAI] 64 ❌
    Sai vì: Quá nhiều (vượt xa giới hạn khuyến nghị max 8 files), gây overhead quản lý cao (file growth sync, checkpoint chậm), tăng I/O fragmentation và memory pressure trên 64GB RAM. Không giảm contention hiệu quả hơn 8 files, thậm chí làm chậm server – vi phạm "không ảnh hưởng performance".

📘 Tài liệu tham khảo

  • Microsoft Docs (cập nhật 2024-2026): Tempdb Database - Best Practices – Xác nhận "1 data file per logical processor up to 8".
  • Azure SQL VM Guidance: Performance Best Practices for SQL Server on Azure VMs – Nhấn mạnh tempdb config cho vCPU scaling.
  • SQL Server 2022 Docs: Giữ nguyên quy tắc tempdb (không thay đổi đến 2026). 🛠️ Lời khuyên thực tế: Sử dụng T-SQL để add files: ALTER DATABASE tempdb ADD FILE (NAME = N'tempdev2', FILENAME = N'D:\tempdb2.ndf', SIZE = 128MB); (lặp 7-8 lần), đặt trên multiple disks nếu có RAID/Storage Pool. Monitor bằng DMV sys.dm_db_file_space_usage.
Câu 144
You have an Azure SOI database named SQLDb1 that contains the resources shown in the following table.



Column1 contains JSON data.

You need to compress Column1. The solution must minimize the amount of storage used.

What should you use?
  1. A the COMPRESS() function
  2. B columnstore archive compression
  3. C row compression
  4. D columnstore compression
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi này thuộc lĩnh vực quản trị cơ sở dữ liệu Azure SQL Database (không phải AWS như đề cập nhầm, mà là Azure SQL Managed Instance hoặc Azure SQL Database với tên SQLDb1). Tình huống: Bạn có một cơ sở dữ liệu Azure SQL tên SQLDb1 chứa tài nguyên như bảng Table1 (là rowstore table) và cột Column1 có kiểu dữ liệu nvarchar(max) chứa dữ liệu JSON.

📊 Phân tích hình ảnh đính kèm:
Hình ảnh hiển thị một bảng mô tả tài nguyên:

  • Name: Table1 → Type: Rowstore table (bảng lưu trữ theo hàng, không phải cột).
  • Name: Column1 → Type: nvarchar(max) (kiểu chuỗi Unicode biến thiên lớn nhất, phù hợp lưu JSON lớn).

Yêu cầu chính: Nén (compress) cột Column1 chứa JSON để giảm thiểu tối đa dung lượng lưu trữ (minimize the amount of storage used). Đây là bài toán tối ưu hóa lưu trữ cho dữ liệu JSON lớn trong bảng rowstore, nơi dữ liệu nvarchar(max) thường chiếm nhiều không gian do JSON có cấu trúc phức tạp và ít lặp lại.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: the COMPRESS() function

🛠️ Lý do chi tiết:

  • Hàm COMPRESS() (có từ SQL Server 2016, hỗ trợ đầy đủ trong Azure SQL Database đến phiên bản mới nhất 2024-2026) là phương pháp nén tùy chỉnh từng giá trị hiệu quả nhất cho dữ liệu lớn như JSON trong cột nvarchar(max).
  • Cách sử dụng: Thay đổi kiểu cột thành varbinary(max), sau đó lưu giá trị COMPRESS(CAST(Column1 AS varbinary(max))). Để truy vấn, dùng DECOMPRESS().
  • Ưu điểm: Nén gzip-level cao (tỷ lệ nén lên đến 70-90% cho JSON phức tạp), giảm storage tối đa mà không yêu cầu thay đổi cấu trúc bảng lớn. Phù hợp hoàn hảo với rowstore table vì hoạt động ở mức hàng/cột cá nhân.
  • Không ảnh hưởng hiệu suất lớn và dễ triển khai trong Azure SQL.

📋 Giải thích tất cả các phương án (đúng/sai)

Dưới đây là phân tích từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh:

  • ✅ the COMPRESS() function
    Phương án ĐÚNG. Như giải thích trên, đây là giải pháp tối ưu cho JSON lớn trong nvarchar(max) của rowstore table. Nó nén binary trực tiếp, giảm storage mạnh mẽ (ví dụ: JSON 1MB có thể nén còn 200-300KB), và Azure SQL hỗ trợ native mà không cần index đặc biệt. Hoàn hảo để "minimize storage".

  • ❌ columnstore archive compression
    Phương án SAI. Đây là mức nén cao nhất cho columnstore index (archive compression lên đến 10x), nhưng bảng là rowstore table (không hỗ trợ columnstore trực tiếp). Để dùng, phải rebuild thành clustered columnstore index – phức tạp, tốn tài nguyên, và không phù hợp compress chỉ 1 cột JSON. Không minimize storage hiệu quả ở đây.

  • ❌ row compression
    Phương án SAI. Đây là nén cấp hàng/page (ROW hoặc PAGE compression) cho rowstore table, áp dụng bằng ALTER TABLE ... WITH (DATA_COMPRESSION = ROW). Tuy nhiên, chỉ giảm 20-40% cho dữ liệu lặp lại, không hiệu quả với JSON lớn nvarchar(max) (ít lặp, chiếm LOB pages riêng). Không đạt "minimize storage" so với COMPRESS().

  • ❌ columnstore compression
    Phương án SAI. Tương tự columnstore archive, đây là nén chuẩn cho columnstore index (giảm 5-10x cho dữ liệu số/analytic). Bảng là rowstore, nên không áp dụng trực tiếp. Phải chuyển index type – không đơn giản và không tối ưu cho 1 cột JSON duy nhất.

📘 Tài liệu tham khảo (cập nhật mới nhất đến 2026)

Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần script demo COMPRESS, hãy cho biết thêm.

Câu 145 Chọn nhiều đáp án
You receive numerous alerts from Azure Monitor for an Azure SQL Database instance.
You need to reduce the number of alerts. You must only receive alerts if there is a significant change in usage patterns for an extended period.
Which two actions should you perform? Each correct answer presents part of the solution.
NOTE: Each correct selection is worth one point.
  1. A Set Threshold Sensitivity to High
  2. B Set the Alert logic threshold to Dynamic
  3. C Set the Alert logic threshold to Static
  4. D Set Threshold Sensitivity to Low
  5. E Set Force Plan to On
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi này thuộc lĩnh vực Azure Monitor và Azure SQL Database, tập trung vào việc giảm số lượng cảnh báo (alerts) từ Azure Monitor. Cụ thể, bạn đang nhận quá nhiều alerts cho một instance Azure SQL Database. Yêu cầu là chỉ nhận alerts khi có sự thay đổi đáng kể (significant change) trong mô hình sử dụng (usage patterns) kéo dài trong một khoảng thời gian dài (extended period).

Đây là câu hỏi trắc nghiệm multi-select (chọn nhiều đáp án đúng), mỗi lựa chọn đúng chiếm 1 điểm. Giải pháp cần hai hành động để tối ưu hóa Alert logic trong Azure Monitor, sử dụng tính năng Dynamic Thresholds (dựa trên machine learning để phát hiện bất thường so với baseline lịch sử). Điều này giúp giảm alerts nhiễu bằng cách chỉ kích hoạt khi có sự lệch lạc lớn và ổn định, thay vì ngưỡng cố định gây nhiều false positives. Kiến thức dựa trên phiên bản Azure Monitor mới nhất (cập nhật đến 2026, hỗ trợ Dynamic Thresholds với sensitivity levels từ Azure portal và CLI).

📘 Tài liệu tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Hai đáp án đúng là:

  • Set the Alert logic threshold to Dynamic
  • Set Threshold Sensitivity to Low

Lý do:

  • Dynamic threshold sử dụng ML để tự động tính toán ngưỡng dựa trên dữ liệu lịch sử (usage patterns), chỉ alert khi phát hiện anomaly đáng kể và kéo dài (extended period), giúp giảm đáng kể số alerts so với static.
  • Low sensitivity làm cho hệ thống ít nhạy cảm hơn, chỉ kích hoạt alert với thay đổi lớn (significant change), tránh alerts nhỏ lẻ. Kết hợp hai yếu tố này chính xác đáp ứng yêu cầu câu hỏi. ✅

🛠️ Giải thích chi tiết tất cả các phương án

Dưới đây là phân tích từng lựa chọn một cách đầy đủ:

  • Set Threshold Sensitivity to High ❌
    Sai: High sensitivity làm cho Dynamic Thresholds rất nhạy cảm, kích hoạt alerts ngay cả với những thay đổi nhỏ, dẫn đến tăng số lượng alerts thay vì giảm. Không phù hợp với yêu cầu chỉ alert khi thay đổi đáng kể và kéo dài.

  • Set the Alert logic threshold to Dynamic ✅
    Đúng: Chuyển sang Dynamic threshold sử dụng machine learning để phân tích patterns lịch sử, tự động điều chỉnh ngưỡng và chỉ alert khi có significant deviation kéo dài (extended period). Đây là bước chính để giảm alerts nhiễu, phù hợp hoàn hảo với Azure SQL Database metrics như CPU, DTU.

  • Set the Alert logic threshold to Static ❌
    Sai: Static threshold sử dụng ngưỡng cố định (do người dùng set thủ công), dễ gây nhiều alerts false positives nếu usage patterns biến động. Không hỗ trợ detect "significant change in usage patterns" tự động, vi phạm yêu cầu giảm alerts thông minh.

  • Set Threshold Sensitivity to Low ✅
    Đúng: Low sensitivity trong Dynamic Thresholds làm hệ thống ít nhạy cảm, chỉ alert với thay đổi lớn và ổn định lâu dài (extended period), giúp giảm mạnh số alerts. Kết hợp với Dynamic để đạt hiệu quả tối ưu.

  • Set Force Plan to On ❌
    Sai: Force Plan là tính năng Query Store trong Azure SQL Database để ép sử dụng query plan cụ thể, liên quan đến performance tuning, không liên quan gì đến Azure Monitor alerts. Không ảnh hưởng đến việc giảm alerts từ usage patterns. 🗑️

Câu 146
You have an Azure subscription that contains two instances of SQL Server on Azure Virtual Machines named VM1 and VM2. Both instances run Microsoft SQL Server 2019 CU8.

You need to deploy a failover cluster instance (FCI) to VM1 and VM2 that will use Azure shared disks. The solution must maximize resiliency.

Which quorum option should you use?
  1. A node majority with a cloud witness
  2. B node majority with no witness
  3. C node majority with a file share witness
  4. D node majority with a disk witness
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi tập trung vào việc triển khai Failover Cluster Instance (FCI) cho SQL Server 2019 CU8 trên hai máy ảo Azure (VM1 và VM2) trong một subscription Azure. Yêu cầu sử dụng Azure Shared Disks (ổ đĩa chia sẻ trên Azure, như Premium SSD v2 hoặc Ultra Disk) làm shared storage, và giải pháp phải tối ưu hóa độ bền vững (maximize resiliency). Cụ thể, cần chọn quorum option phù hợp cho Windows Server Failover Cluster (WSFC) hỗ trợ FCI.

Quorum trong WSFC quyết định cluster có thể tiếp tục hoạt động khi mất một số node/storage, tránh "split-brain" (hai node tranh quyền). Với 2-node cluster sử dụng shared disks, cần witness để đạt majority (đa số phiếu), và Azure Shared Disks cho phép sử dụng disk witness trực tiếp trên shared disk để tăng resiliency (chống mất cả hai node hoặc witness ngoài cloud).

Kiến thức cập nhật đến 2026: Azure hỗ trợ FCI với Shared Disk từ 2019, và theo docs mới nhất (Azure SQL VM Clustering 2024+), Node and Disk Majority là lựa chọn khuyến nghị cho 2-node FCI với shared disks để maximize resiliency, vì disk witness nằm cùng datacenter, giảm latency và phụ thuộc cloud external.

✅ Đáp án đúng: node majority with a disk witness

Lý do lựa chọn: Đây chính là mô hình Node and Disk Majority trong WSFC. Với 2 node + 1 disk witness (Azure Shared Disk), cluster có 3 phiếu: mỗi node 1 phiếu, disk 1 phiếu. Cluster chỉ cần 2/3 phiếu để quorum → chịu được mất 1 node (node còn lại + disk), hoặc mất disk (2 node). Điều này tối ưu resiliency vì shared disk là thành phần cốt lõi, nằm cùng availability set/zone với VMs, giảm rủi ro network/outage so với witness ngoài. Microsoft khuyến nghị rõ ràng cho FCI trên Azure VMs với shared disks (không dùng Premium File Share hoặc Cloud Witness cho trường hợp này để tránh single point of failure external).

📋 Giải thích tất cả các phương án

  • ❌ node majority with a cloud witness
    Sai vì Cloud Witness (dùng Azure Blob Storage làm witness) phù hợp cho stretched/multi-site clusters hoặc không có shared storage, nhưng không maximize resiliency với Azure Shared Disks. Nó phụ thuộc metadata online (có thể outage nếu Azure Blob region fail), tăng latency ~100-500ms, và Microsoft docs ưu tiên disk witness cho local shared storage để tránh external dependency.

  • ❌ node majority with no witness
    Sai hoàn toàn vì Node Majority chỉ dùng phiếu từ nodes (2 node = 2 phiếu, cần 2/2 để quorum). Với 2 node, nếu mất 1 node → không majority → cluster down ngay. Không phù hợp even-number nodes, vi phạm nguyên tắc WSFC cơ bản, không resilient chút nào.

  • ❌ node majority with a file share witness
    Sai vì File Share Witness (SMB share trên file server) không được hỗ trợ/khuyến nghị trên Azure cho FCI với shared disks (từ 2020+). Nó yêu cầu file share external (như Azure Files Premium), nhưng có vấn đề latency cao (>10ms), SMB protocol overhead, và single point failure nếu share datacenter outage. Azure docs cấm dùng cho guest clustering với Ultra/Premium SSD shared.

  • ✅ node majority with a disk witness
    Đúng như giải thích ở trên: Node and Disk Majority lý tưởng cho 2-node FCI Azure Shared Disks, chịu fault cao nhất (1 node + disk fault-tolerant), zero external dependency.

📘 Tài liệu tham khảo

🛠️ Lời khuyên từ Azure DBA: Để triển khai, dùng PowerShell Get-ClusterQuorum kiểm tra, và đặt VMs trong Availability Set với Proximity Placement Group cho low-latency shared disk! Nếu cần script, hỏi thêm nhé! 🚀

Câu 147
Your on-premises network contains a server that hosts a 60-TB database named DB1. The network has a 10-Mbps internet connection.

You need to migrate DB1 to Azure. The solution must minimize how long it takes to migrate the database.

What should you use?
  1. A Azure Migrate
  2. B Azure Data Box
  3. C Azure Database Migration Service
  4. D Data Migration Assistant (DMA)
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi mô tả một tình huống thực tế trong môi trường on-premises: Có một máy chủ chứa cơ sở dữ liệu DB1 với dung lượng khổng lồ 60 TB, và kết nối internet chỉ 10 Mbps (rất chậm, tương đương khoảng 1.25 MB/s).
Yêu cầu chính: Di chuyển (migrate) DB1 lên Azure một cách nhanh nhất có thể (minimize how long it takes).
🛠️ Thách thức chính: Với dữ liệu lớn như vậy và băng thông hạn chế, phương pháp di chuyển online (qua internet) sẽ mất rất lâu (có thể hàng tháng hoặc hơn), nên cần giải pháp offline/vật lý để tối ưu thời gian. Đây là kịch bản điển hình cho các doanh nghiệp cần migrate dữ liệu lớn từ on-prem sang cloud Azure.

✅ Đáp án đúng: Azure Data Box

Lý do lựa chọn:
Azure Data Box là thiết bị phần cứng chuyên dụng (hình hộp vận chuyển) được Microsoft cung cấp, cho phép tải dữ liệu lên thiết bị tại chỗ, sau đó gửi qua đường bưu điện đến data center Azure. Với dung lượng hỗ trợ lên đến 80 TB (Data Box Disk) hoặc lớn hơn (Data Box Heavy lên đến 1 PB đến năm 2026), nó lý tưởng cho 60 TB và kết nối chậm 10 Mbps. Thời gian migrate chỉ tính theo vận chuyển (vài ngày), thay vì upload online mất hàng tháng. Giải pháp này minimize thời gian nhất theo yêu cầu, hỗ trợ đầy đủ cho database lớn mà không phụ thuộc băng thông.
📘 Tài liệu tham khảo: Azure Data Box overview (cập nhật 2024, phiên bản mới nhất hỗ trợ Azure Storage và database migration đến 2026).

📋 Giải thích chi tiết tất cả các phương án

Dưới đây là phân tích từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phương án được đánh giá đúng/sai dựa trên yêu cầu minimize thời gian migrate với 60 TB và 10 Mbps:

  • Azure Migrate
    ❌ Sai: Azure Migrate là công cụ miễn phí để khám phá, đánh giá và migrate máy ảo (VM), ứng dụng on-prem sang Azure (hỗ trợ replication qua internet hoặc agentless). Nó không tối ưu cho database lớn 60 TB vì phụ thuộc băng thông (với 10 Mbps, thời gian upload quá lâu). Phù hợp hơn cho VM nhỏ, không phải dữ liệu thuần túy lớn như DB1. Không phải lựa chọn nhanh nhất.

  • Azure Data Box
    ✅ Đúng: Như đã giải thích ở trên. Đây là giải pháp offline shipment lý tưởng cho dữ liệu >10 TB với kết nối kém. Quy trình: Order thiết bị → Copy dữ liệu on-prem → Ship đến Azure → Dữ liệu tự động upload vào Azure Storage/SQL. Thời gian chỉ vài ngày ship + xử lý, vượt trội so với online methods. Hỗ trợ bảo mật (AES 256-bit encryption) và tích hợp Azure SQL migration.

  • Azure Database Migration Service
    ❌ Sai: Đây là dịch vụ online migration cho database (hỗ trợ SQL Server, Oracle sang Azure SQL/Database for MySQL/PostgreSQL). Nó yêu cầu kết nối internet ổn định, liên tục sync dữ liệu qua Azure network hoặc public internet. Với 60 TB và 10 Mbps, thời gian sẽ cực kỳ dài (hàng tuần/tháng), không minimize được thời gian. Phù hợp cho DB nhỏ hoặc downtime thấp, không phải trường hợp này.

  • Data Migration Assistant (DMA)
    ❌ Sai: DMA là tool desktop miễn phí để đánh giá và migrate SQL Server on-prem sang Azure SQL (schema/data migration). Nó hoạt động qua kết nối trực tiếp (online), không hỗ trợ shipment vật lý. Với 60 TB, công cụ này sẽ thất bại do giới hạn băng thông và không scale cho dữ liệu lớn như vậy. Chỉ dùng cho DB nhỏ (< vài TB) và đánh giá compatibility.

🏆 Kết luận & Lời khuyên

✅ Azure Data Box là lựa chọn tối ưu nhất theo kiến thức Azure cập nhật 2026 (Data Box Heavy nay hỗ trợ PB-scale). Nếu DB1 là SQL Server, có thể kết hợp Data Box + Azure SQL Migration extension để restore nhanh.
🛠️ Khuyến nghị: Kiểm tra dung lượng chính xác và loại DB trước khi order Data Box qua Azure Portal. Tham khảo thêm: Azure Data Box jobs và Migration best practices.

Câu 148
You have an Azure SQL database named sqldb1.
You need to minimize the amount of space by the data and log files of sqldb1.
What should you run?
  1. A DBCC SHRINKDATABASE
  2. B sp_clean_db_free_space
  3. C sp_clean_db_file_free_space
  4. D DBCC SHRINKFILE
Xem giải thích

🧩 Phân tích chi tiết câu hỏi trắc nghiệm

📖 Nội dung câu hỏi:
Câu hỏi yêu cầu xử lý một cơ sở dữ liệu Azure SQL có tên sqldb1, với mục tiêu giảm thiểu dung lượng không gian được sử dụng bởi các file dữ liệu (data files) và file log của cơ sở dữ liệu này. Đây là tình huống phổ biến trong quản trị Azure SQL Database, khi cần thu gọn (shrink) không gian sau các hoạt động như xóa dữ liệu lớn, rebuild index hoặc log file phình to do transaction dài.
🛠️ Lưu ý kỹ thuật: Azure SQL Database (dựa trên SQL Server engine) hỗ trợ các lệnh DBCC để quản lý không gian lưu trữ. Tuy nhiên, việc shrink không được khuyến khích thường xuyên vì có thể gây fragmentation và ảnh hưởng hiệu suất (theo best practices từ Microsoft đến năm 2026). Câu hỏi tập trung vào lệnh phù hợp nhất để shrink cả data và log files cùng lúc.

✅ Đáp án đúng: DBCC SHRINKDATABASE
Lý do lựa chọn: Lệnh này thu gọn toàn bộ cơ sở dữ liệu sqldb1, bao gồm tất cả data files và log files, bằng cách di chuyển các trang dữ liệu từ cuối file về đầu và giải phóng không gian không sử dụng ra ngoài file. Đây là lựa chọn tối ưu để "minimize the amount of space by the data and log files" vì nó xử lý cả hai loại file cùng một lúc.
📘 Cú pháp cơ bản: DBCC SHRINKDATABASE (sqldb1, target_percent); (target_percent là tỷ lệ không gian trống mong muốn, ví dụ 10%).
Nguồn tham khảo: Microsoft Docs - DBCC SHRINKDATABASE (Transact-SQL) (cập nhật đến phiên bản Azure SQL mới nhất 2026).

🔍 Giải thích tất cả các phương án (đúng/sai)

  • ✅ DBCC SHRINKDATABASE
    Đúng! 🏆 Lệnh này shrink toàn bộ database, di chuyển dữ liệu từ cuối file về đầu, giảm kích thước cả data files và log files. Hoàn hảo cho yêu cầu câu hỏi vì xử lý cả data và log cùng lúc, giúp minimize space hiệu quả nhất.

  • ❌ sp_clean_db_free_space
    Sai! 🚫 Lệnh này chỉ xóa không gian trống khỏi tất cả các page dữ liệu trong toàn bộ data files của database, thường dùng sau khi remove Transparent Data Encryption (TDE) hoặc chuẩn bị cho data compression. Nó không shrink file và không ảnh hưởng đến log files, nên không giảm dung lượng tổng thể như yêu cầu.

  • ❌ sp_clean_db_file_free_space
    Sai! 🚫 Tương tự phương án trên nhưng chỉ áp dụng cho một file dữ liệu cụ thể (không phải toàn bộ database). Nó xóa empty space trên pages của file đó, không xử lý log files và không phải lệnh shrink, chỉ hỗ trợ dọn dẹp sau encryption/decryption.

  • ❌ DBCC SHRINKFILE
    Sai! 🚫 Lệnh này chỉ shrink một file cụ thể (data hoặc log), ví dụ: DBCC SHRINKFILE (logical_file_name, target_size);. Nó không xử lý toàn bộ database (cả data và log cùng lúc), nên không phù hợp để minimize space cho tất cả files của sqldb1. Phải chạy riêng cho từng file, phức tạp hơn.

💡 Lời khuyên thực tế (từ Azure DBA): Tránh shrink thường xuyên vì gây fragmentation – ưu tiên Rebuild Index trước (qua Azure portal hoặc T-SQL). Theo dõi space qua DMV như sys.dm_db_file_space_usage. Nếu log file lớn, kiểm tra VLF bằng DBCC LOGINFO.
Nguồn bổ sung: Azure SQL Storage Best Practices (2026 update).

Câu 149
You have 25 Azure SQL databases.

You need to implement a centralized database management solution that uses Transact-SQL.

What should you include in the solution?
  1. A elastic jobs
  2. B an Azure Automation runbook
  3. C Azure Functions
  4. D Azure Logic Apps
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi yêu cầu triển khai một giải pháp quản lý cơ sở dữ liệu tập trung (centralized database management solution) cho 25 cơ sở dữ liệu Azure SQL. Giải pháp này phải sử dụng Transact-SQL (T-SQL) để thực hiện các tác vụ quản lý trên nhiều database một cách đồng bộ và hiệu quả.

✅ Mục tiêu chính: Tìm công cụ Azure cho phép viết và thực thi script T-SQL trên nhiều Azure SQL Database từ một điểm trung tâm, mà không cần công cụ bên ngoài hoặc ngôn ngữ lập trình khác. Điều này phù hợp với nhu cầu quản lý quy mô lớn (25 DB), đảm bảo tính nhất quán và tự động hóa.

🛠️ Bối cảnh Azure (cập nhật đến 2026): Azure SQL Database hỗ trợ các tính năng quản lý tập trung như Elastic Jobs (đã chính thức GA từ năm 2022 và được cải tiến liên tục), giúp chạy T-SQL trên target groups (nhóm database) mà không cần agent riêng lẻ.

📘 Nguồn tham khảo:

✅ Đáp án đúng: elastic jobs

Lý do lựa chọn:

  • Elastic Jobs là tính năng chuyên biệt của Azure SQL Database, cho phép tạo, lên lịch và thực thi các job T-SQL trên nhiều database (target groups) từ một vị trí trung tâm.
  • Nó hỗ trợ chính xác yêu cầu "centralized" với T-SQL thuần túy, không cần code PowerShell hay ngôn ngữ khác. Với 25 DB, bạn có thể định nghĩa một job script T-SQL đơn giản (ví dụ: cập nhật index, backup check) và chạy đồng bộ trên tất cả.
  • ✅ Ưu điểm nổi bật: Serverless, tích hợp native với Azure SQL, chi phí thấp, và scale tự động (cập nhật 2026: hỗ trợ hyperscale và serverless compute).

❌ Giải thích tất cả các phương án

  • elastic jobs
    ✅ Đúng vì đây là giải pháp native của Azure SQL, sử dụng T-SQL để quản lý tập trung nhiều DB. Nó tạo job từ script T-SQL, target đến nhóm DB, và theo dõi kết quả qua portal/CLI. Hoàn hảo cho 25 Azure SQL DB mà không cần infrastructure thêm.

  • an Azure Automation runbook
    ❌ Sai vì Azure Automation runbook chủ yếu dùng PowerShell hoặc Python để tự động hóa, không phải T-SQL thuần. Mặc dù có thể kết nối SQL qua module, nhưng không phải giải pháp "centralized database management" native với T-SQL, và phức tạp hơn cho quản lý DB quy mô lớn.

  • Azure Functions
    ❌ Sai vì Azure Functions là serverless compute cho code tùy chỉnh (C#, Node.js, v.v.), trigger bởi event/timer. Nó có thể chạy T-SQL qua connection string, nhưng không thiết kế cho centralized DB management, thiếu tính năng job orchestration native và khó scale cho 25 DB mà không code nhiều.

  • Azure Logic Apps
    ❌ Sai vì Logic Apps là low-code workflow với connector (như SQL connector), nhưng tập trung vào integration/orchestration, không hỗ trợ T-SQL script tập trung. Nó visual-based, không phải giải pháp DB admin chuyên dụng, và kém hiệu quả cho script T-SQL phức tạp trên nhiều DB.

🧩 Kết luận: Elastic Jobs là lựa chọn tối ưu, tuân thủ nguyên tắc Azure Well-Architected Framework cho quản lý DB (Reliability & Operations pillar). Nếu triển khai, bắt đầu bằng az sql elastic-job CLI! 🚀

Câu 150
You have an Azure SQL Database server named sqlsrv1 that hosts 10 Azure SQL databases.
The databases perform slower than expected.
You need to identify whether the performance issue relates to the use of tempdb by Azure SQL databases in sqlsrv1.
What should you do?
  1. A Run Query Store-based queries
  2. B Review information provided by SQL Server Profiler-based traces
  3. C Review information provided by Query Performance Insight
  4. D Run dynamic management view-based queries
Xem giải thích

🧩 Phân tích chi tiết câu hỏi trắc nghiệm

📖 Nội dung câu hỏi:
Câu hỏi mô tả một tình huống thực tế trong môi trường Azure SQL Database: Bạn có một máy chủ Azure SQL Database tên là sqlsrv1, đang lưu trữ 10 cơ sở dữ liệu Azure SQL. Các cơ sở dữ liệu này hoạt động chậm hơn mức mong đợi. Nhiệm vụ là xác định xem vấn đề hiệu suất có liên quan đến việc sử dụng tempdb (cơ sở dữ liệu tạm thời được chia sẻ trên máy chủ) hay không. Tempdb là một tài nguyên quan trọng trong SQL Server/Azure SQL, thường bị nghẽn do các hoạt động như sorting, hashing, spilling từ memory sang disk, đặc biệt khi có nhiều database trên cùng server. Câu hỏi yêu cầu chọn phương pháp phù hợp nhất để kiểm tra tempdb usage nhằm chẩn đoán vấn đề.
(Lưu ý: Đây là kiến thức Azure SQL cập nhật đến năm 2026, tempdb trong Azure SQL là elastic pool/shared tempdb với các cải tiến như multiple tempdb data files tự động từ phiên bản vCore mới nhất).

✅ Đáp án đúng:
Run dynamic management view-based queries

🛠️ Lý do chọn đáp án đúng:
Dynamic Management Views (DMVs) là công cụ mạnh mẽ và trực tiếp nhất để giám sát tempdb usage trong Azure SQL Database. Bạn có thể chạy các query trên DMVs như sys.dm_db_file_space_usage, sys.dm_db_session_space_usage, sys.dm_db_task_space_usage để xem space allocated, used, version store, user objects trong tempdb theo từng session/task/database. Ví dụ:

SELECT SUM(user_object_reserved_page_count) * 8 / 1024 AS user_objects_mb,
       SUM(internal_object_reserved_page_count) * 8 / 1024 AS internal_objects_mb
FROM sys.dm_db_file_space_usage
WHERE database_id = 2;  -- tempdb ID=2

Điều này giúp xác định chính xác tempdb bottleneck (như spilling lớn từ queries). DMVs được hỗ trợ đầy đủ trong Azure SQL (không cần quyền cao), realtime và lightweight. (Cập nhật 2026: Azure SQL hỗ trợ DMVs mở rộng cho Hyperscale với tempdb optimization).

📘 Giải thích tất cả các phương án (đúng/sai):

  • ❌ [SAI] Run Query Store-based queries
    Query Store theo dõi query execution plans, runtime stats (CPU, duration, logical reads), nhưng không cung cấp chi tiết cụ thể về tempdb usage như space per session hay spilling. Nó hữu ích cho query tuning tổng quát, nhưng không phải để isolate tempdb issues trên server-level với nhiều DBs.

  • ❌ [SAI] Review information provided by SQL Server Profiler-based traces
    SQL Server Profiler không được hỗ trợ trong Azure SQL Database (PaaS model, không cho phép traces trực tiếp từ Profiler do managed environment). Thay vào đó dùng Extended Events, nhưng vẫn không phải lựa chọn tối ưu cho tempdb monitoring realtime.

  • ❌ [SAI] Review information provided by Query Performance Insight
    Query Performance Insight (trong Azure Portal) hiển thị top queries by CPU/Duration/Executions, nhưng chỉ aggregate ở database-level, không drill-down vào tempdb specifics như file space hay session spills. Nó tốt cho overview, nhưng không đủ sâu cho tempdb diagnosis trên server với 10 DBs.

🔗 Tài liệu tham khảo:

💡 Kết luận: Sử dụng DMVs là cách chuẩn xác, nhanh chóng và native nhất cho Azure DBA để troubleshoot tempdb! 🚀