Ngân hàng đề — Microsoft Azure Database Administrator
Tìm thấy 217 câu.
You have a table name Table1 that has 20 columns of type CHAR(400). Row compression for Table1 is enabled.
During a database audit, you discover that none of the fields contain more than 150 characters.
You need to ensure that you can apply page compression to Table1.
What should you do?
- A Configure the columns as sparse.
- B Change the column type to NVARCHAR(MAX).
- C Change the column type to VARCHAR(MAX).
- D Change the column type to VARCHAR(200).
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
📖 Tóm tắt câu hỏi:
Câu hỏi mô tả một cơ sở dữ liệu Azure SQL có tên DB1, bên trong có bảng Table1 với 20 cột kiểu CHAR(400). Bảng này đã kích hoạt row compression (nén hàng). Kết quả kiểm toán cho thấy không có trường dữ liệu nào chứa hơn 150 ký tự. Yêu cầu là cần áp dụng page compression (nén trang) cho Table1 một cách hiệu quả.
🔍 Giải thích sâu hơn:
- CHAR(400) là kiểu dữ liệu có độ dài cố định (fixed-length), mỗi cột luôn chiếm đúng 400 bytes (vì CHAR dùng 1 byte/ký tự), bất kể dữ liệu thực tế ngắn hơn. Với 20 cột, kích thước hàng tối đa (max row size) là 20 × 400 = 8.000 bytes, cộng thêm overhead (null bitmap ~3 bytes, row header ~7 bytes, v.v.) có thể vượt quá giới hạn 8.060 bytes của Azure SQL/SQL Server cho dữ liệu in-row (không LOB).
- Row compression đã kích hoạt: Nó chuyển CHAR thành biến đổi tương tự VARCHAR (loại bỏ khoảng trắng thừa), nên kích thước thực tế của hàng nhỏ (~150 ký tự/cột × 20 = ~3.000 bytes). Tuy nhiên, page compression (nén trang) xây dựng trên row compression, bao gồm thêm prefix compression và dictionary compression, nhưng chỉ áp dụng đầy đủ nếu kích thước hàng tiềm năng (potential row size) sau row compression nằm trong giới hạn an toàn < 8.060 bytes, và không có LOB hoặc cấu trúc cột cản trở. Hiện tại, do khai báo CHAR(400) quá lớn, hệ thống không thể áp dụng page compression tối ưu (có thể bị skip hoặc không hiệu quả).
- Mục tiêu: Thay đổi để page compression có thể áp dụng, tận dụng dữ liệu thực tế ≤150 ký tự mà không mất dữ liệu.
🛠️ Kiến thức liên quan (cập nhật Azure SQL đến 2026):
Page compression yêu cầu row compression trước, và chỉ hoạt động tốt nếu không có cột LOB (như VARCHAR(MAX)) và max row size < 8.060 bytes sau nén hàng. Lệnh áp dụng: ALTER TABLE Table1 REBUILD WITH (DATA_COMPRESSION = PAGE);.
📘 Tài liệu tham khảo:
- Microsoft Docs: Data Compression (Azure SQL) (cập nhật SQL Server 2022/AzSQL 2024+).
- Row and Page Compression Details – Xác nhận giới hạn row size và LOB exclusions.
✅ Đáp án đúng: Change the column type to VARCHAR(200)
Lý do chọn đáp án này (chi tiết):
- VARCHAR(200) là kiểu biến đổi (variable-length), chỉ chiếm 200 bytes tối đa/cột + 2 bytes overhead cho length prefix. Với 20 cột: 20 × (200 + 2) = 4.040 bytes + metadata << 8.060 bytes.
- Dữ liệu thực tế ≤150 ký tự nên không mất dữ liệu, và sau row compression, hàng nhỏ gọn → page compression áp dụng đầy đủ (prefix + dictionary hiệu quả).
- Đây là cách tối ưu nhất, giảm lãng phí không gian mà vẫn giữ tính toàn vẹn dữ liệu. Sau thay đổi:
ALTER TABLE Table1 ALTER COLUMN [ColName] VARCHAR(200);rồi rebuild compression. - ✅ Hiệu quả cao nhất theo best practices Azure SQL!
❌ Phân tích tất cả các phương án
-
[SAI] Configure the columns as sparse.
❌ Sai vì: Sparse columns dành cho dữ liệu chủ yếu NULL hoặc empty (tiết kiệm ~20-40% nếu sparsity >50%), thêm overhead lọc (4-8 bytes/cột). Ở đây, dữ liệu ≤150 ký tự nhưng không NULL, sparse không giúp page compression (vẫn giữ max size lớn từ CHAR(400)) và làm phức tạp hóa table (giới hạn 30.000 cột sparse). Không giải quyết vấn đề row size limit. -
[SAI] Change the column type to NVARCHAR(MAX).
❌ Sai vì: NVARCHAR(MAX) là LOB (Large Object), lưu off-row nếu >8.000 bytes tổng, page compression KHÔNG áp dụng cho LOB pages (chỉ nén in-row data, LOB riêng biệt). Thậm chí làm page compression kém hiệu quả hơn, tăng I/O. Dữ liệu nhỏ ≤150 không cần MAX! -
[SAI] Change the column type to VARCHAR(MAX).
❌ Sai vì: Tương tự NVARCHAR(MAX), VARCHAR(MAX) là LOB, page compression bị hạn chế (docs xác nhận: tables/indexes với MAX types không hỗ trợ page compression đầy đủ). Tăng chi phí lưu trữ và không tận dụng dữ liệu nhỏ, vi phạm yêu cầu áp dụng page compression cho Table1. -
[ĐÚNG] Change the column type to VARCHAR(200).
✅ Đúng vì: Như giải thích ở trên, giảm max row size an toàn dưới 8.060 bytes, cho phép page compression đầy đủ mà không mất dữ liệu (150 < 200). Best practice cho dữ liệu có độ dài thực tế cố định nhỏ.
🎯 Kết luận: Thay đổi sang VARCHAR(200) là giải pháp chính xác, giúp tiết kiệm ~50% không gian và kích hoạt page compression tối ưu. Nếu áp dụng thực tế, test với sp_estimate_data_compression_savings trước! 🚀
You need to implement SQL insights for db1.
Which two resources should you create first? Each correct answer presents part of the solution.
NOTE: Each correct selection is worth one point.
- A a storage account
- B a virtual machine
- C an Azure logic app
- D an Azure function
- E a Log Analytics workspace
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ác định hai tài nguyên Azure cần tạo trước tiên để triển khai SQL insights cho một cơ sở dữ liệu Azure SQL tên là db1 trong một subscription Azure. Đây là câu hỏi dạng multi-select (chọn nhiều đáp án đúng), mỗi lựa chọn đúng chiếm 1 điểm.
🔍 Giải thích chi tiết về ngữ cảnh:
- Azure SQL database (db1): Đây là dịch vụ PaaS (Platform as a Service) quản lý hoàn toàn, không yêu cầu quản lý hạ tầng VM.
- SQL insights: Là tính năng trong Azure Monitor (cập nhật đến phiên bản 2026), cung cấp cái nhìn sâu về hiệu suất (performance), truy vấn chậm (slow queries), tài nguyên sử dụng, và các vấn đề availability của Azure SQL Database thông qua workbooks, dashboards, và logs. Nó dựa trên dữ liệu từ diagnostic settings và Azure Monitor logs. Để triển khai đầy đủ, cần thu thập metrics/logs vào nơi lưu trữ trung tâm và có thể cần agent trên VM để thu thập dữ liệu chi tiết nâng cao (như integration với Azure Monitor agent cho insights tùy chỉnh hoặc hybrid scenarios). Theo tài liệu Microsoft mới nhất (2024-2026), SQL insights workbook yêu cầu dữ liệu từ Log Analytics và có thể liên kết với VM để monitoring end-to-end nếu có workload hybrid hoặc custom collection.
✅ Đáp án đúng và lý do lựa chọn
Hai tài nguyên đúng cần tạo trước tiên:
- a virtual machine
- a Log Analytics workspace
🛠️ Lý do chi tiết (dựa trên tài liệu Azure mới nhất 2026):
- a virtual machine: ✅ Cần tạo VM để cài đặt Azure Monitor agent (hoặc legacy Log Analytics agent/MA), giúp thu thập dữ liệu performance chi tiết từ Azure SQL DB (qua kết nối network hoặc custom scripts). VM đóng vai trò host agent, hỗ trợ insights workbook hiển thị dữ liệu real-time/full-fidelity cho SQL insights. Không có VM, không thể enable agent-based monitoring cần thiết cho full SQL insights dashboard.
- a Log Analytics workspace: ✅ Đây là tài nguyên cốt lõi để lưu trữ, query và visualize logs/metrics từ diagnostic settings của db1. SQL insights workbook chỉ hoạt động khi có workspace này (với schema SQLInsights và InsightsMetrics). Bước đầu tiên luôn là tạo workspace trước khi config diagnostics export logs từ db1.
Tạo hai tài nguyên này first vì: Workspace lưu dữ liệu, VM cung cấp agent collector. Sau đó, config diagnostic settings trên db1 để stream data → workspace, và install agent trên VM.
📋 Giải thích 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 tiếng Anh. Phần giải thích hoàn toàn bằng tiếng Việt với đánh giá đúng/sai dựa trên quy trình triển khai SQL insights (Azure Monitor docs 2026):
- a storage account ❌ Sai: Storage account dùng cho backup, audit logs dài hạn hoặc export blobs từ diagnostics, nhưng không cần tạo first cho SQL insights. Insights dựa trên real-time logs trong Log Analytics, không phải storage. Tạo storage chỉ nếu cần archive sau.
- a virtual machine ✅ Đúng: Như giải thích trên, VM cần thiết để deploy Azure Monitor agent (AMA) hoặc Dependency agent, thu thập dữ liệu chi tiết (CPU, memory, queries) từ db1 cho insights workbook. Không có VM/agent, insights thiếu dữ liệu agent-side (đặc biệt cho multi-tier monitoring). Theo docs: VM + agent là prerequisite cho "Azure Monitor for SQL".
- an Azure logic app ❌ Sai: Logic Apps dùng cho automation workflow (như trigger alerts hoặc integrate services), nhưng không liên quan trực tiếp đến SQL insights. Insights dùng Kusto queries/Log Analytics, không cần logic app first.
- an Azure function ❌ Sai: Azure Functions là serverless compute cho custom code/logic, có thể dùng sau để process data từ insights (ví dụ: alert custom), nhưng không phải tài nguyên tạo first. Insights không phụ thuộc functions.
- a Log Analytics workspace ✅ Đúng: Workspace là bước đầu tiên bắt buộc, nơi lưu trữ tất cả logs/metrics từ db1 (qua diagnostics). SQL insights workbook chỉ pin và query được khi có workspace với solution "SQLInsights" enabled. Docs nhấn mạnh: "Create a workspace before enabling monitoring".
📘 Tài liệu tham khảo (cập nhật đến 2026)
- Microsoft Learn: Monitor Azure SQL Database and Elastic Pools with Azure SQL Insights – Chi tiết về workbook và Log Analytics requirement.
- Azure Monitor docs: Azure Monitor agent for SQL servers on VMs – Giải thích VM + agent cho insights.
- Diagnostic settings: Stream Azure SQL logs to Log Analytics – Prerequisite workspace.
- Exam context (AZ-305/DP-300): Các câu tương tự xác nhận VM + Workspace là pair đúng cho full implementation.
💡 Lưu ý: Luôn config diagnostic settings sau khi tạo hai tài nguyên này để db1 export data! Nếu cần hỗ trợ config cụ thể, hãy cung cấp thêm chi tiết subscription. 🛡️
User1 drops DB1.
You need to perform a point-in-time restore of DB1 to SQLMI2.
What should you use to perform the restore?
- A Azure CLI
- B Transact-SQL
- C the Azure portal
- D Azure PowerShell
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi mô tả một tình huống trong Azure: Bạn có một subscription Azure chứa hai Azure SQL Managed Instances tên là SQLMI1 và SQLMI2. Trong SQLMI1 có một database tên DB1 và một user tên User1. Sau đó, User1 đã xóa (drop) DB1. Nhiệm vụ là thực hiện point-in-time restore (khôi phục đến một thời điểm cụ thể) của DB1 từ SQLMI1 sang SQLMI2.
📌 Điểm then chốt: Đây là khôi phục cơ sở dữ liệu đã bị xóa (deleted database restore) giữa hai managed instances khác nhau (cross-instance restore). Azure SQL Managed Instance hỗ trợ tính năng này để khôi phục từ bản sao lưu tự động (automated backups), nhưng cách thức thực hiện bị giới hạn tùy theo công cụ. Kiến thức dựa trên tài liệu Azure cập nhật mới nhất (tính đến 2026, theo phiên bản Azure SQL Managed Instance hiện hành).
✅ Đáp án đúng: the Azure portal
Lý do lựa chọn:
- Azure Portal là công cụ duy nhất hỗ trợ point-in-time restore cho cơ sở dữ liệu đã bị xóa từ một Managed Instance sang một Managed Instance khác (cross-instance PITR cho deleted database).
- Quy trình: Truy cập Azure Portal > Chọn SQLMI1 > Deleted databases > Chọn DB1 > Restore > Chọn target là SQLMI2 và thời điểm khôi phục.
- Tính năng này được thiết kế dành riêng cho Portal để đảm bảo giao diện trực quan và xử lý cross-instance an toàn. Các công cụ khác không hỗ trợ trực tiếp cho trường hợp deleted DB cross-instance.
Nguồn tham khảo:
- Microsoft Docs: Point-in-time restore - Azure SQL Managed Instance (Cập nhật 2024-2026).
- Azure SQL Managed Instance backups and restores.
🛠️ Phân tích tất cả các phương án
-
❌ Azure CLI: Sai vì Azure CLI hỗ trợ một số lệnh restore cho Azure SQL Managed Instance (như
az sql mi restore), nhưng không hỗ trợ khôi phục deleted database cross-instance. CLI chỉ dùng cho same-instance PITR hoặc live DB restore, không xử lý được deleted DB giữa hai instances khác nhau. -
❌ Transact-SQL: Sai vì T-SQL (qua
RESTORE DATABASE) chỉ hỗ trợ khôi phục trong cùng một Managed Instance và chủ yếu cho live databases hoặc geo-restore, không áp dụng cho deleted database cross-instance. T-SQL không có lệnh trực tiếp để chỉ định target instance khác. -
✅ the Azure portal: Đúng như đã giải thích ở trên. Đây là phương pháp chính thức và duy nhất được Microsoft hỗ trợ cho kịch bản này, với giao diện dễ sử dụng và theo dõi tiến trình thời gian thực. 🏆
-
❌ Azure PowerShell: Sai vì PowerShell (cmdlet như
Restore-AzureSqlDatabase) hỗ trợ PITR cho Azure SQL Database thông thường, nhưng với Managed Instance, nó chỉ giới hạn ở same-instance restore hoặc continuous backup restore, không hỗ trợ deleted DB cross-instance. Microsoft khuyến nghị dùng Portal cho trường hợp này.
Lưu ý cuối: Trong thực tế quản trị Azure SQL Managed Instance, luôn kiểm tra quyền RBAC (như Contributor role) trước khi restore. Nếu cần tự động hóa, có thể dùng Azure Automation kết hợp Portal export/import, nhưng không thay thế trực tiếp! 🔄
You need to migrate the databases to an Azure SQL managed instance. The solution must minimize downtime and prevent data loss.
What should you use?
- A Always On availability groups
- B Backup and Restore
- C log shipping
- D Database Migration Assistant
Xem giải thích
🧩 Phân tích chi tiết câu hỏi
Câu hỏi tập trung vào việc di chuyển (migrate) 5 cơ sở dữ liệu từ máy chủ Microsoft SQL Server on-premises (tên SQL1) sang Azure SQL Managed Instance.
Yêu cầu chính: Giảm thiểu thời gian ngừng hoạt động (minimize downtime) và tránh mất dữ liệu (prevent data loss).
✅ Azure SQL Managed Instance là dịch vụ PaaS hỗ trợ gần như đầy đủ tính năng của SQL Server on-premises, bao gồm hỗ trợ native backup/restore, giúp dễ dàng migrate từ SQL Server phiên bản tương thích (từ SQL Server 2008 trở lên).
🛠️ Mục tiêu migrate: Sử dụng phương pháp cho phép sao lưu toàn bộ dữ liệu (full backup + differential + log backups) để đảm bảo tính nhất quán và đồng bộ liên tục, giảm downtime xuống mức thấp nhất có thể (thường chỉ vài phút đến giờ, tùy kích thước DB).
✅ Đáp án đúng: Backup and Restore
Lý do chọn đáp án này:
Đây là phương pháp chuẩn và được Microsoft khuyến nghị chính thức cho việc migrate từ SQL Server on-premises sang Azure SQL Managed Instance với downtime tối thiểu và không mất dữ liệu.
- Quy trình: Sao lưu full + differential + transaction log backups từ on-premises SQL1 lên Azure Blob Storage (sử dụng URL backup), sau đó RESTORE trực tiếp trên Managed Instance.
- Minimize downtime: Sử dụng log backups liên tục để catch-up đến thời điểm cắt over (switchover), chỉ downtime ngắn khi apply final logs.
- Prevent data loss: Transaction logs đảm bảo point-in-time recovery (PITR) chính xác.
- Ưu điểm mới nhất (2024-2026): Hỗ trợ compressed/encrypted backups, TDE, và tích hợp Azure Storage với tiering để tối ưu chi phí. Phù hợp cho DB lớn (>1TB).
📘 Tài liệu tham khảo: - Microsoft Docs: Migrate to Azure SQL Managed Instance using backup and restore (cập nhật 2025).
- Azure SQL Managed Instance migration guide (khuyến nghị backup/restore cho offline/online hybrid).
📋 Giải thích tất cả các phương án (đúng/sai)
-
❌ Always On availability groups
Phương án này sai vì Always On AG là tính năng high availability (HA) nội bộ trong SQL Server, dùng để replicate DB giữa các node on-premises hoặc hybrid. Không hỗ trợ trực tiếp migrate sang Azure SQL Managed Instance (Managed Instance không expose endpoints cho AG listener từ on-prem). Sử dụng AG chỉ phù hợp cho HA giữa các Managed Instances, không minimize downtime cho migration (cần manual failover phức tạp, dễ mất dữ liệu nếu sync lag). -
✅ Backup and Restore
Đúng như đã giải thích ở trên. Đây là phương pháp native, nhanh, đáng tin cậy nhất cho Managed Instance, hỗ trợ online migration qua log replay, đảm bảo zero data loss và downtime chỉ tính bằng phút. -
❌ log shipping
Phương án này sai vì log shipping chỉ ship transaction logs định kỳ giữa các SQL Server instances, gây downtime dài (phải dừng app on-prem, apply logs thủ công) và rủi ro data loss cao nếu lag xảy ra. Không được Microsoft khuyến nghị cho Managed Instance migration (chỉ dùng cho HA/disaster recovery nội bộ, không tối ưu chi phí/storage). -
❌ Database Migration Assistant
Phương án này sai vì DMA (Database Migration Assistant) chủ yếu dùng để đánh giá (assessment) schema/compatibility và migrate schema/data nhỏ sang Azure SQL Database (single DB), không hỗ trợ full migration với minimal downtime cho Azure SQL Managed Instance. DMA thiếu continuous sync cho log replay, dễ gây data loss nếu DB lớn/busy. Thay vào đó, dùng Azure Database Migration Service (DMS) cho online migration nếu cần, nhưng không phải DMA.
🛠️ Lưu ý bổ sung: Nếu DB rất lớn và cần zero-downtime hoàn toàn, kết hợp Backup/Restore với Azure DMS (online mode) là best practice mới nhất 2026. Luôn test compatibility trước bằng Data Migration Assistant!
App1 experiences transient connection errors and timeouts when it attempts to access db1 after extended periods of inactivity.
You need to modify db1 to resolve the issues experienced by App1 as soon as possible, without considering immediate costs.
What should you do?
- A Enable automatic tuning for db1.
- B Increase the number of vCores allocated to db1.
- C Decrease the auto-pause delay for db1.
- D Disable auto-pause delay for db1.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi thuộc kỳ thi DP-300: Administering Microsoft Azure SQL Solutions, tập trung vào Azure SQL Database trong mô hình Serverless.
-
Tình huống: Bạn có một Azure subscription chứa các tài nguyên như sau (dựa trên hình ảnh bảng được cung cấp): | Name | Type | |------|------| | App1 | Azure Web App | | db1 | Azure SQL Database in the serverless tier |
📸 Phân tích hình ảnh: Hình ảnh là một bảng đơn giản hiển thị hai tài nguyên chính: App1 là ứng dụng web Azure (Azure Web App), và db1 là cơ sở dữ liệu Azure SQL Database ở chế độ Serverless tier. Đây là điểm then chốt vì Serverless tier có tính năng auto-pause tự động tạm dừng database sau khoảng thời gian không hoạt động (mặc định 1 giờ) để tiết kiệm chi phí, nhưng khi resume lại sẽ mất thời gian (khoảng 10-30 giây hoặc hơn), dẫn đến lỗi kết nối tạm thời (transient connection errors) và timeout.
-
Vấn đề: Ứng dụng App1 gặp lỗi kết nối tạm thời (transient connection errors) và timeout khi cố gắng truy cập db1 sau thời gian không hoạt động kéo dài (extended periods of inactivity). Điều này điển hình xảy ra vì database serverless đã auto-pause, và quá trình resume gây delay.
-
Yêu cầu giải quyết: Sửa đổi db1 để khắc phục ngay lập tức (as soon as possible), không ưu tiên chi phí ngay (without considering immediate costs). Giải pháp cần nhanh chóng, ưu tiên tính sẵn sàng cao.
✅ Đáp án đúng: Disable auto-pause delay for db1.
Lý do: Trong Azure SQL Database Serverless (cập nhật đến 2026), tính năng auto-pause là nguyên nhân trực tiếp gây delay khi resume sau inactivity. Việc tắt auto-pause sẽ giữ database luôn chạy (always-on), loại bỏ hoàn toàn delay resume, giải quyết lỗi ngay lập tức mà không cần chờ. Đây là cách nhanh nhất, phù hợp với yêu cầu "as soon as possible" và bỏ qua chi phí (vì database sẽ luôn consume compute). Thay đổi này có thể áp dụng qua Azure Portal, CLI hoặc PowerShell chỉ trong vài phút.
🛠️ Giải thích tất cả các phương án (đúng/sai)
-
Enable automatic tuning for db1. ❌ Sai: Automatic tuning chỉ tối ưu hóa performance qua index, query plan, nhưng không giải quyết vấn đề pause/resume gây connection errors. Nó cần thời gian phân tích và áp dụng (không "as soon as possible"), và không liên quan trực tiếp đến inactivity timeouts trong serverless tier.
-
Increase the number of vCores allocated to db1. ❌ Sai: Tăng vCores chỉ cải thiện compute power cho workload đang chạy, nhưng không ngăn chặn auto-pause sau inactivity. Database vẫn pause, resume vẫn delay – vấn đề gốc không được giải quyết, và thay đổi này mất thời gian scale (không nhanh nhất).
-
Decrease the auto-pause delay for db1. ❌ Sai: Giảm auto-pause delay (ví dụ từ 1 giờ xuống 30 phút) chỉ làm database pause nhanh hơn, khiến tình trạng xảy ra thường xuyên hơn, làm tệ hơn vấn đề thay vì giải quyết. Không loại bỏ delay resume, và vẫn không "as soon as possible".
-
Disable auto-pause delay for db1. ✅ Đúng: Như đã giải thích, tắt auto-pause giữ database luôn active, loại bỏ hoàn toàn pause/resume cycle. Đây là giải pháp gốc rễ, áp dụng ngay lập tức qua portal (Compute + storage > Auto-pause delay > Never), phù hợp serverless tier (tính năng có từ 2020 và ổn định đến 2026).
📘 Tài liệu tham khảo (cập nhật mới nhất 2026)
- Microsoft Docs: Azure SQL Database serverless - auto-pausing – Xác nhận auto-pause gây delay 10-60s khi resume.
- DP-300 Exam Guide: Official Microsoft Practice – Các case serverless thường yêu cầu disable auto-pause cho high availability.
- Azure Updates 2025-2026: Không thay đổi cơ bản serverless tier; auto-pause vẫn default 1h, disable để always-on (xem Azure Blog: Serverless enhancements).
Giải pháp này đảm bảo tính sẵn sàng 99.99% cho App1 mà không downtime! 🚀
You configure the full recovery model for all the databases.
You perform a full backup of the master database on SQL1.
You need to a perform an additional backup of the master database on SQL1. The solution must minimize how long it takes to perform the backup.
Which type of backup should you perform?
- A log
- B full
- C differential
- D tail-log
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ả tình huống bạn triển khai một instance SQL Server trên Azure Virtual Machines (VM) với tên SQL1, lưu trữ nhiều cơ sở dữ liệu. Tất cả các cơ sở dữ liệu được cấu hình ở chế độ full recovery model. Bạn đã thực hiện một full backup cho cơ sở dữ liệu master trên SQL1. Bây giờ, bạn cần thực hiện một backup bổ sung cho cơ sở dữ liệu master trên SQL1, và giải pháp phải giảm thiểu thời gian thực hiện backup (minimize how long it takes to perform the backup).
Câu hỏi yêu cầu chọn loại backup phù hợp nhất.
🛠️ Bối cảnh kỹ thuật quan trọng: Cơ sở dữ liệu master là hệ thống đặc biệt trong SQL Server, chứa metadata về instance (như thông tin đăng nhập, cấu hình, job). Nó không hỗ trợ transaction log backup hoặc differential backup (theo tài liệu Microsoft SQL Server). Chỉ full backup được hỗ trợ cho master, model, và msdb. Full recovery model chỉ áp dụng cho user databases, không thay đổi hành vi của system databases như master. Trên Azure VM, SQL Server hoạt động giống on-premises về backup/restore. (Kiến thức cập nhật đến SQL Server 2022, tích hợp Azure Arc-enabled SQL Managed Instance đến 2026).
✅ Đáp án đúng: full
Lý do lựa chọn:
Để backup bổ sung master database một cách nhanh nhất, bạn phải sử dụng full backup. Master database chỉ hỗ trợ full backup (không có differential hoặc log backup). Mặc dù đã có full backup trước đó, backup bổ sung vẫn cần full để đảm bảo tính toàn vẹn dữ liệu hệ thống. Master thường rất nhỏ (vài MB), nên thời gian backup nhanh, phù hợp yêu cầu "minimize time". Không có tùy chọn nhanh hơn vì các loại khác không được hỗ trợ.
📋 Giải thích tất cả các phương án (giữ nguyên nội dung gốc bằng tiếng Anh)
-
❌ log
Sai vì: Phương án "log" đề cập đến transaction log backup, chỉ áp dụng cho user databases ở full recovery model. Master database không hỗ trợ log backup (Microsoft cấm để tránh phức tạp restore hệ thống). Sử dụng sẽ báo lỗi, không giảm thời gian mà còn thất bại. -
✅ full
Đúng vì: Như đã giải thích ở trên, full backup là loại duy nhất được hỗ trợ cho master database. Nó backup toàn bộ dữ liệu, nhanh chóng do kích thước nhỏ, và là cách tối ưu để backup bổ sung mà không vi phạm quy tắc SQL Server. -
❌ differential
Sai vì: Differential backup chỉ backup các thay đổi kể từ full backup gần nhất, nhưng master không hỗ trợ differential backup. Lệnh sẽ thất bại với lỗi (ví dụ: "Differential backups are not supported for system databases"). Không thể dùng để giảm thời gian. -
❌ tail-log
Sai vì: Tail-log backup dùng để capture log còn sót lại trước khi restore (thường cho disaster recovery), chỉ áp dụng cho databases có log chain. Master không có transaction log backup chain, nên tail-log không hỗ trợ và sẽ lỗi. Không phù hợp cho backup định kỳ.
📘 Tài liệu tham khảo:
- Microsoft Docs: Backup and restore system databases (SQL Server) (Cập nhật 2022-2026).
- Azure SQL VM Backup Overview (Xác nhận hành vi giống on-premises).
- SQL Server 2022 docs: Chỉ full backup cho master (không thay đổi đến 2026).
💡 Lưu ý thực hành: Trên Azure VM, dùng Azure Backup hoặc T-SQL (BACKUP DATABASE) để thực hiện. Luôn test restore master để đảm bảo! 🛡️
You need to configure table1 to meet the following requirements:
•Each partition must be compressed.
•The compression ratio must be maximized.
•You must be able to index the compressed data.
What should you use?
- A page compression
- B columnstore compression
- C GZIP compression
- D columnstore archival 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 xoay quanh việc cấu hình nén dữ liệu cho một bảng trong Azure SQL Database. Cụ thể:
- Bạn có một subscription Azure chứa Azure SQL Database.
- Bảng tên là table1 (lưu ý: câu hỏi viết "tablet" có thể là lỗi đánh máy, nhưng yêu cầu là "table1"), sử dụng partitioned columnstores (cột lưu trữ phân vùng).
- Yêu cầu cần đáp ứng:
- ✅ Mỗi phân vùng phải được nén (compressed).
- ✅ Tỷ lệ nén phải được tối đa hóa (maximized compression ratio).
- ✅ Phải có thể index dữ liệu đã nén (index the compressed data).
Mục tiêu là chọn phương pháp nén phù hợp nhất cho columnstore indexes phân vùng, đảm bảo nén cao nhất mà vẫn hỗ trợ indexing và query hiệu quả. Đây là kiến thức cốt lõi trong Azure SQL Database (dựa trên SQL Server engine), với các tính năng nén được cập nhật đến phiên bản mới nhất năm 2026 (Azure SQL hỗ trợ Columnstore Archival Compression từ SQL Server 2016 trở lên, và vẫn là chuẩn trong Azure SQL Hyperscale/Managed Instance).
📘 Tài liệu tham khảo:
- Microsoft Docs: Columnstore indexes data loading guidance (cập nhật 2024-2026).
- Azure SQL Database: Compression types.
✅ Đáp án đúng: columnstore archival compression
Lý do lựa chọn:
- Phương pháp này tối ưu hóa hoàn hảo cho yêu cầu:
- 🛠️ Nén từng phân vùng: Hỗ trợ đầy đủ cho partitioned columnstore tables, nén riêng từng partition.
- 📈 Tỷ lệ nén tối đa: Archival compression sử dụng thuật toán nén mạnh hơn (kết hợp dictionary + bitmap + thêm giai đoạn archival), đạt tỷ lệ nén cao gấp 2-5 lần so với columnstore compression thông thường (thường >75% không gian tiết kiệm).
- 🔍 Hỗ trợ index dữ liệu nén: Dữ liệu vẫn có thể được index, query trực tiếp mà không cần decompress toàn bộ (hiệu suất query tốt cho dữ liệu cold/archive).
- Đây là lựa chọn chuẩn cho dữ liệu ít thay đổi, phân vùng lớn trong Azure SQL, giúp giảm chi phí lưu trữ Hyperscale.
🧩 Giải thích tất cả các phương án (đúng/sai)
-
❌ page compression
Sai vì: Đây là phương pháp nén dành cho rowstore tables (bảng hàng truyền thống), không hỗ trợ tối ưu cho columnstore. Nó chỉ nén page-level cơ bản (prefix + dictionary), tỷ lệ nén thấp hơn nhiều so với columnstore (khoảng 20-40%), và không tối đa hóa cho partitioned columnstores. Không đáp ứng yêu cầu "maximized compression ratio" và kém hiệu quả cho indexing columnstore. -
❌ columnstore compression
Sai vì: Đây là nén tiêu chuẩn cho columnstore indexes (column-level: dictionary + bitmap + RLE), hỗ trợ partition và indexing tốt. Tuy nhiên, tỷ lệ nén chưa tối đa (thường 50-75%), không bằng archival compression. Phù hợp cho dữ liệu hot/active, nhưng câu hỏi yêu cầu "maximized" nên archival mới đúng. -
❌ GZIP compression
Sai vì: GZIP là thuật toán nén ngoài SQL (file-based, không native trong Azure SQL), không hỗ trợ nén tự động từng partition hay indexing dữ liệu nén trực tiếp. Sử dụng GZIP sẽ yêu cầu export/import dữ liệu, làm phức tạp hóa, không đáp ứng bất kỳ yêu cầu nào (không partition-aware, không indexable in-place). -
✅ columnstore archival compression
Đúng vì: Như đã giải thích ở trên, đây là nén archival chuyên biệt cho columnstore, kích hoạt bằngDATA_COMPRESSION = COLUMNSTORE_ARCHIVE. Hoàn hảo cho partitioned tables, tỷ lệ nén cao nhất (thêm phase nén mạnh), vẫn query/index đầy đủ. Lý tưởng cho Azure SQL workloads lớn đến 2026.
You create a logical SQL server that hosts four databases. Each database will be used by a separate customer.
You need to ensure that each customer can access only its own database. The solution must minimize administrative effort.
Which two actions should you perform? Each correct answer presents part of the solution.
NOTE: Each correct selection is worth one point.
- A Deny public access.
- B Create a private endpoint.
- C Create a database-level firewall rule.
- D Create a network security group (NSG).
- E Create a server-level firewall rule.
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 về Azure SQL Database (không phải AWS như đề cập nhầm, vì toàn bộ ngữ cảnh là Azure subscription và logical SQL server). Tình huống: Bạn có một logical SQL server (máy chủ SQL logic trong Azure) đang lưu trữ 4 cơ sở dữ liệu (databases) riêng biệt, mỗi cái dành cho một khách hàng khác nhau.
Mục tiêu: Đảm bảo mỗi khách hàng chỉ truy cập được vào cơ sở dữ liệu của riêng mình, đồng thời giảm thiểu nỗ lực quản trị (minimize administrative effort).
Đây là câu hỏi trắc nghiệm đa lựa chọn (multi-select), yêu cầu chọn hai hành động đúng (mỗi lựa chọn đúng worth 1 point).
Vấn đề cốt lõi: Logical SQL server chia sẻ cùng một endpoint công khai, nên cần cơ chế cô lập truy cập ở mức database mà không ảnh hưởng toàn server, kết hợp với bảo mật mạng để tránh public access không kiểm soát. Giải pháp phải tự động hóa và ít can thiệp thủ công.
(Kiến thức cập nhật đến 2026: Azure SQL hỗ trợ private endpoints với Private Link và database-scoped firewall rules từ phiên bản 2023+, tối ưu cho multi-tenant isolation).
✅ Đáp án đúng và lý do lựa chọn
Hai hành động đúng là:
- Create a private endpoint
- Create a database-level firewall rule
Lý do:
- Private endpoint (Azure Private Link) tạo kết nối riêng tư qua Virtual Network (VNet), ngăn chặn truy cập public hoàn toàn và chỉ cho phép traffic từ VNet được phê duyệt. Điều này giảm admin effort vì chỉ config một lần/server và tích hợp tự động với Azure services. Kết hợp với db-level rules, mỗi customer kết nối qua VNet riêng → isolate hoàn hảo.
- Database-level firewall rule cho phép cấu hình firewall riêng cho từng database (không ảnh hưởng các DB khác trên cùng server). Mỗi customer chỉ whitelist IP/range/VNet của họ → granular control, minimize effort vì rules tự áp dụng per DB mà không cần server-level global rules.
Kết hợp hai cái: Tạo lớp bảo mật mạng (private) + kiểm soát truy cập chi tiết (per DB), lý tưởng cho multi-customer isolation mà không cần migrate DBs riêng lẻ.
📋 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 một cách chi tiết. Giữ nguyên văn bản gốc tiếng Anh, chỉ giải thích bằng tiếng Việt với emoji nổi bật:
-
✅ Create a private endpoint
Đúng: Tạo private endpoint sử dụng Azure Private Link để map logical SQL server vào một private IP trong VNet. Traffic chỉ đi qua mạng riêng tư, chặn public access tự động, hỗ trợ multi-tenant bằng cách assign VNet riêng per customer (hoặc shared VNet + NSG). Giảm admin effort vì deploy một lần, scale tự động theo Azure updates 2026 (hỗ trợ IPv6 private). -
✅ Create a database-level firewall rule
Đúng: Firewall rule ở mức database (database-scoped) chỉ áp dụng cho DB cụ thể, whitelist IP/client của từng customer riêng lẻ. Không ảnh hưởng 3 DB còn lại trên cùng server. Minimize effort vì config per DB một lần, tự động enforce mà không cần script phức tạp. -
❌ Deny public access
Sai: Chỉ deny public network access ở mức server (qua portal/policy), không cô lập per database. Tất cả DB vẫn chia sẻ endpoint chung, customer A vẫn có thể thử access DB của B nếu biết connection string. Không granular, không minimize effort cho multi-DB isolation. -
❌ Create a network security group (NSG)
Sai: NSG dùng cho subnets/VMs trong VNet để control inbound/outbound traffic, không áp dụng trực tiếp cho Azure SQL endpoints. SQL server là PaaS, NSG chỉ gián tiếp qua VNet integration nhưng không isolate per DB. Thêm NSG tăng complexity/admin effort, không phải giải pháp native cho SQL isolation. -
❌ Create a server-level firewall rule
Sai: Server-level rule áp dụng toàn bộ logical server (tất cả 4 DBs), nên nếu whitelist IP của customer A, họ có thể access tất cả DBs. Không cô lập per customer, vi phạm yêu cầu. Phải tạo rule riêng → tăng admin effort cao (4 rules riêng biệt thay vì db-level tự động).
🛠️ Khuyến nghị triển khai thực tế
- Bước 1: Tạo Private Endpoint qua Azure Portal/CLI:
az network private-endpoint create --resource-id <sql-server-id> --name sqlPrivateEndpoint --vnet-name <vnet>. - Bước 2: Trong mỗi DB, chạy
EXEC sp_set_database_firewall_rule N'CustomerRule', 'IP_start', 'IP_end';. - Test: Kết nối qua private DNS → chỉ DB của customer mới pass firewall.
📘 Tài liệu tham khảo (cập nhật 2026)
- Azure SQL Firewall Rules (database vs server-level).
- Private Endpoints for Azure SQL (Private Link integration).
- Multi-tenant Isolation Best Practices (Azure Well-Architected Framework 2026).
Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần demo code, hỏi thêm nhé!
You need to implement a disaster recovery solution for SQL1. The solution must minimize the following:
•The recovery point objective (RPO)
•The recovery time objective (RTO)
•Administrative effort
What should you include in the solution?
- A Azure Site Recovery
- B active geo-replication
- C availability groups
- D auto-failover groups
Xem giải thích
🧩 Giải thích nội dung câu hỏi
Câu hỏi yêu cầu triển khai giải pháp khôi phục thảm họa (disaster recovery - DR) cho cơ sở dữ liệu Azure SQL Database có tên SQL1. Giải pháp phải tối thiểu hóa các yếu tố sau:
- Recovery Point Objective (RPO): Thời gian mất dữ liệu tối đa chấp nhận được (càng gần 0 càng tốt, nghĩa là dữ liệu được sao chép liên tục và đồng bộ).
- Recovery Time Objective (RTO): Thời gian ngừng hoạt động tối đa chấp nhận được (càng gần 0 càng tốt, nghĩa là thời gian chuyển đổi failover nhanh chóng).
- Administrative effort: Nỗ lực quản trị (càng ít can thiệp thủ công càng tốt, ưu tiên tự động hóa).
Đây là tình huống thực tế trong Azure SQL, nơi cần geo-redundancy giữa các vùng (regions) để chống mất mát dữ liệu và downtime. Giải pháp phải tận dụng tính năng native của Azure SQL để đạt hiệu suất cao nhất với ít quản lý nhất. 📘
✅ Đáp án đúng: auto-failover groups
Lý do lựa chọn:
Auto-failover groups là giải pháp tối ưu nhất cho Azure SQL Database, hỗ trợ chuyển đổi failover tự động giữa các vùng (primary và secondary regions).
- RPO gần 0: Sử dụng synchronous replication (CommitScope = FullSync), đảm bảo dữ liệu đồng bộ hoàn toàn trước khi commit.
- RTO chỉ vài giây: Failover tự động mà không cần can thiệp thủ công, sử dụng read-write listener tự động cập nhật endpoint.
- Administrative effort thấp: Thiết lập một lần qua portal/CLI/PowerShell, sau đó tự động quản lý policy failover, monitoring qua Azure portal. Không cần cấu hình listener thủ công như các giải pháp khác.
Phù hợp hoàn hảo với yêu cầu minimize cả 3 yếu tố. 🛠️ (Cập nhật đến 2026: Tính năng này vẫn là best practice cho Azure SQL Hyperscale và General Purpose, hỗ trợ lên đến 4 secondary replicas.)
📋 Giải thích tất cả các phương án
Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh:
-
Azure Site Recovery ❌ SAI
Azure Site Recovery (ASR) là dịch vụ bảo vệ VM và ứng dụng (như crash-consistent snapshots), không phải giải pháp native cho Azure SQL Database. Nó không hỗ trợ replication database-level, dẫn đến RPO cao (phút/giờ) và RTO dài (15-30 phút) do cần khôi phục VM. Administrative effort cao vì phải cấu hình replication thủ công và test failover. Không phù hợp cho database workload. -
active geo-replication ❌ SAI
Active geo-replication hỗ trợ asynchronous replication đến tối đa 4 secondary regions, nhưng failover thủ công (qua portal/API). RPO lên đến 5 phút (lag replication), RTO 1-10 phút tùy workload, và administrative effort cao (phải trigger failover, cấu hình read-only endpoints thủ công). Không tự động như yêu cầu, dù tốt cho multi-region reads. -
availability groups ❌ SAI
Availability Groups (AG) là tính năng của SQL Server on-premises hoặc Azure VMs/SQL Managed Instance, không áp dụng trực tiếp cho Azure SQL Database (PaaS). Nó yêu cầu cấu hình Always On AG thủ công, listener, WSFC (Windows Server Failover Cluster), dẫn đến administrative effort rất cao. RPO/RTO tốt nếu sync, nhưng không native cho Azure SQL DB và không tự động failover cross-region dễ dàng. -
auto-failover groups ✅ ĐÚNG
Như đã giải thích ở trên: Tự động, synchronous, minimize RPO/RTO/admin effort hoàn hảo cho Azure SQL.
📚 Tài liệu tham khảo
- Azure SQL Database auto-failover groups (Microsoft Docs, cập nhật 2024-2026).
- Disaster recovery for Azure SQL (So sánh RPO/RTO).
- Active geo-replication vs. auto-failover groups.
Hy vọng phân tích này giúp bạn nắm vững! 🚀
You need to ensure that you can manage the SQL Server instances by using a single user account.
What should you do first?
- A Enable a user-assigned managed identity on each virtual machine.
- B Deploy an Azure Active Directory Domain Services (Azure AD DS) domain and join the virtual machines to the domain.
- C Enable a system-assigned managed identity on each virtual machine.
- D Join the virtual machines to the Azure AD tenant.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi này xoay quanh việc quản lý các instance Microsoft SQL Server 2019 chạy trên 10 máy ảo (VM) Windows Server 2019 trong một Azure subscription được liên kết với Azure Active Directory (Azure AD) tenant.
📌 Mục tiêu chính: Đảm bảo có thể quản lý tất cả các SQL Server instances bằng một tài khoản người dùng duy nhất (single user account).
🛠️ Bối cảnh kỹ thuật: Các VM này cần được cấu hình để hỗ trợ Windows Authentication cho SQL Server (thay vì SQL Authentication riêng lẻ trên từng máy), giúp sử dụng tài khoản domain chung để truy cập và quản lý tập trung. Đây là yêu cầu phổ biến trong môi trường enterprise để tránh quản lý nhiều tài khoản cục bộ.
🔍 Bước đầu tiên cần làm: Phải thiết lập môi trường domain để các VM có thể join và sử dụng tài khoản chung, vì Azure AD thuần túy không hỗ trợ domain join trực tiếp cho Windows Server như Active Directory on-premises.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Deploy an Azure Active Directory Domain Services (Azure AD DS) domain and join the virtual machines to the domain.
Lý do chi tiết 🏆:
- Azure AD DS cung cấp domain services đầy đủ (bao gồm LDAP, Kerberos, NTLM) tương tự Active Directory Domain Services (AD DS), cho phép join VM Windows vào domain.
- Sau khi deploy Azure AD DS và join 10 VM vào domain này, bạn có thể tạo một tài khoản domain user (ví dụ: sqladmin@domain.com) và cấp quyền sysadmin cho tài khoản này trên tất cả SQL Server instances.
- Điều này cho phép quản lý tập trung bằng single user account qua Windows Authentication, mà không cần cấu hình managed identity (chỉ dùng cho Azure resource access, không phải SQL management).
- Đây là bước đầu tiên vì phải có domain trước khi join VM. Kiến thức cập nhật đến 2026: Azure AD DS vẫn là giải pháp chuẩn cho managed domain services (phiên bản mới nhất hỗ trợ synchronization từ Azure AD Entra ID).
📘 Tài liệu tham khảo:
- Azure AD DS documentation (Microsoft Learn, 2024)
- SQL Server Windows Authentication with Azure AD DS (Microsoft Docs, 2025)
📋 Giải thích 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 chi tiết. Tôi giữ nguyên văn bản gốc tiếng Anh của phương án, chỉ giải thích bằng tiếng Việt với lý do đúng/sai:
-
Enable a user-assigned managed identity on each virtual machine.
❌ Sai. Managed identity (user-assigned) dùng để VM truy cập Azure resources (như Key Vault, Storage) mà không cần lưu credentials, nhưng không hỗ trợ quản lý SQL Server instances bằng single user account. Nó không cung cấp Windows Authentication cho SQL; mỗi VM vẫn cần tài khoản riêng. Không giải quyết vấn đề tập trung quản lý 10 instances. -
Deploy an Azure Active Directory Domain Services (Azure AD DS) domain and join the virtual machines to the domain.
✅ Đúng. Như đã giải thích ở trên, đây là cách duy nhất để tạo domain managed cho phép join VM và sử dụng tài khoản domain chung cho SQL Server authentication, đáp ứng yêu cầu single user account. Bước này là bắt buộc đầu tiên. -
Enable a system-assigned managed identity on each virtual machine.
❌ Sai. Tương tự user-assigned, system-assigned managed identity gắn với lifecycle của VM và dùng cho Azure service principal authentication, không phải để manage SQL Server qua Windows login. Không tạo được single account chung cho tất cả instances; vẫn phải dùng SQL auth riêng lẻ. -
Join the virtual machines to the Azure AD tenant.
❌ Sai. Windows Server không hỗ trợ direct join vào Azure AD tenant như Azure AD Join cho client devices. Azure AD chỉ là identity provider (cloud-native), thiếu domain controllers cho Kerberos/NTLM cần thiết cho SQL Server Windows auth. Phải dùng Azure AD DS để "domainize" Azure AD trước.
🧩 Tóm tắt insight: Giải pháp tập trung quản lý SQL trên Azure VM đòi hỏi domain services, không phải managed identities (dành cho app-to-Azure access). Nếu triển khai, chi phí Azure AD DS khoảng 0.10-0.20 USD/giờ tùy tier (cập nhật 2026).