Ngân hàng đề — Microsoft Administering Azure SQL
Tìm thấy 100 câu.
-
A
Transactional Replication
- B Azure Blob Storage replication
- C SQL Server log shipping
- D Azure VM replication
Xem giải thích
Đáp án
A — Transactional Replication
Vì sao đúng
Đây là cơ chế duy nhất trong danh sách nối được SQL Server tại chỗ với Azure SQL Database theo hướng nhân bản liên tục: thay đổi được đẩy sang gần như tức thì, nên lượng dữ liệu có thể mất khi sự cố xảy ra là rất nhỏ. Nó cũng cho phép CSDL đích vẫn phục vụ đọc trong lúc nhân bản.
Vì sao các phương án khác sai
- C. Log shipping — dựa vào việc khôi phục tệp nhật ký giao dịch, mà Azure SQL Database là dịch vụ PaaS không cho khôi phục log thủ công; nên cách này không dùng được với đích là SQL Database. Đây là bẫy chính.
- B. Nhân bản Azure Blob Storage — nhân bản tệp, không hiểu gì về giao dịch của CSDL.
- D. Nhân bản máy ảo Azure — áp cho máy ảo, không áp cho dịch vụ CSDL được quản lý.
- A Simulate an outage during peak usage times.
- B Restore the database from the most recent backup.
- C Validate the restored data against the production data.
- D Perform network connectivity tests.
Xem giải thích
Đáp án
A — Mô phỏng sự cố vào GIỜ CAO ĐIỂM.
Ghi nhớ về chất lượng câu hỏi
⚠ Câu này cùng dạng với #17443 ở lô trước — đều là câu PHỦ ĐỊNH về kiểm thử HA/DR.
| Câu | Cách KHÔNG hợp lệ |
|---|---|
| ⚠ #17443 (lô 159) | ⚠ xoá file sao lưu để "thử" khôi phục |
| ⚠ #17468 (câu này) | ⚠ mô phỏng sự cố vào giờ cao điểm |
| ⚠ Nguyên tắc chung | ⚠ kiểm thử KHÔNG được gây rủi ro thật cho người dùng |
Vì sao đúng
⚠ Vì sao không diễn tập vào giờ cao điểm: | Rủi ro | Nội dung | |---|---| | ⚠ Ảnh hưởng người dùng THẬT | ⚠ nếu diễn tập gặp sự cố ngoài dự kiến | | ⚠ Khó phân biệt vấn đề diễn tập với vấn đề thật | | | ⚠ Đội vận hành chịu áp lực kép | | | ⚠ Không có dư địa để xử lý nếu hỏng | |
⚠ Cách ĐÚNG
⚠ chọn giờ TẢI THẤP
⚠ thông báo trước cho mọi bên
⚠ có kế hoạch huỷ bỏ
⚠ có người trực sẵn
↓
⚠ Nếu muốn biết hệ thống chịu tải thế nào
⚠ dùng KIỂM THỬ TẢI riêng biệt
⚠ Chaos engineering trên production có tồn tại — ⚠ nhưng ⚠ chỉ với tổ chức đã rất trưởng thành, có công cụ giới hạn bán kính ảnh hưởng.
Vì sao các phương án khác đều hợp lệ
-
B (khôi phục CSDL từ bản sao lưu gần nhất) — ⚠ thực hành BẮT BUỘC: ⚠ chứng minh bản sao lưu dùng được và đo thời gian khôi phục.
-
C (đối chiếu dữ liệu khôi phục với production) — ⚠ bước kiểm chứng quan trọng: ⚠ khôi phục xong mà dữ liệu sai thì vô nghĩa.
-
D (kiểm thử kết nối mạng) — ⚠ hợp lệ và cần thiết: ⚠ site DR thường thiếu đường mạng, firewall rule hoặc DNS.
Ghi nhớ
⚠ Kế hoạch diễn tập DR — bảng phải thuộc: | Yếu tố | Nội dung | |---|---| | ⚠ Thời điểm | ⚠ giờ tải THẤP, đã thông báo | | ⚠ Phạm vi | ⚠ xác định rõ cái gì được chạm vào | | ⚠ Tiêu chí thành công | ⚠ RTO, RPO cụ thể | | ⚠ Kế hoạch huỷ bỏ | ⚠ khi nào thì dừng diễn tập | | ⚠ Người trực | ⚠ có mặt trong suốt thời gian | | ⚠ Báo cáo sau diễn tập | ⚠ bài học và việc phải sửa |
Từ khoá nhận diện:
"cách nào KHÔNG nên" → ⚠ đọc kỹ, câu phủ định "gây rủi ro thật cho người dùng" → ⚠ không phải cách kiểm thử hợp lệ "đo RTO thật" → ⚠ diễn tập failover có kế hoạch
| ⚠ Kiểm thử tải và diễn tập DR là hai việc KHÁC nhau | Phân biệt |
|---|---|
| ⚠ Kiểm thử tải | ⚠ hệ thống chịu được bao nhiêu |
| ⚠ Diễn tập DR | ⚠ khôi phục được không và mất bao lâu |
| ⚠ Gộp hai việc | ⚠ làm cả hai kết quả khó diễn giải |
| ⚠ Nên | ⚠ tách riêng, mỗi lần một mục tiêu |
| ⚠ Mức độ diễn tập — từ nhẹ tới nặng | Mức |
|---|---|
| ⚠ 1. Rà soát tài liệu trên bàn (tabletop) | ⚠ không chạm hệ thống |
| ⚠ 2. Khôi phục ra môi trường thử | |
| ⚠ 3. Failover có kế hoạch ngoài giờ | |
| ⚠ 4. Mô phỏng sự cố toàn vùng | |
| ⚠ Tăng dần | ⚠ đừng nhảy thẳng tới mức 4 |
| ⚠ Điều diễn tập hay phát hiện | Phát hiện |
|---|---|
| ⚠ Tài liệu quy trình đã lỗi thời | |
| ⚠ Người viết quy trình đã nghỉ việc | |
| ⚠ Chuỗi kết nối cứng trong mã | |
| ⚠ Tài khoản đăng nhập chưa có ở site DR | |
| ⚠ Giá trị thật của diễn tập | ⚠ nằm ở danh sách những thứ hỏng mà không ai ngờ |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Lần diễn tập gần nhất là bao giờ | | | Có kế hoạch huỷ bỏ viết ra trước không | | | Bài học lần trước đã được sửa chưa | ⚠ hay chỉ ghi vào báo cáo rồi thôi |
Và giá trị thật của một cuộc diễn tập DR không nằm ở việc chứng minh hệ thống hoạt động: nó nằm ở danh sách những thứ không hoạt động mà trước đó không ai biết. Một cuộc diễn tập không phát hiện ra vấn đề gì thường là một cuộc diễn tập chưa đủ nghiêm túc.
- A Always On Failover Cluster Instances on Azure VMs
- B Active geo-replication
- C Azure Blob Storage with LRS replication
- D SQL Server with local disk backup
Xem giải thích
Đáp án
B — Active geo-replication.
Vì sao đúng
⚠ Yêu cầu: dữ liệu vẫn sẵn sàng khi CẢ MỘT VÙNG Azure sập.
⚠ Vùng A: primary
↓ ⚠ nhân bản liên tục
⚠ Vùng B: secondary (đọc được)
↓ ⚠ vùng A sập
⚠ Nâng secondary ở vùng B lên primary
↓
⚠ Dịch vụ tiếp tục
⚠ Điểm quyết định: ⚠ secondary nằm ở VÙNG KHÁC — ⚠ sự cố toàn vùng không ảnh hưởng tới nó.
Vì sao các phương án khác sai
-
A (Always On FCI trên Azure VM) — ⚠ FCI dùng LƯU TRỮ CHUNG: ⚠ vì vậy các node ⚠ phải ở gần nhau, thường trong một vùng; ⚠ không bảo vệ khỏi sập cả vùng.
-
C (Azure Blob Storage với LRS) — ⚠ LRS chỉ nhân bản trong MỘT trung tâm dữ liệu: ⚠ mức nhân bản yếu nhất; ⚠ và ⚠ Blob không phải giải pháp cho CSDL SQL.
-
D (SQL Server với sao lưu ra đĩa cục bộ) — ⚠ sao lưu nằm CÙNG chỗ với dữ liệu gốc: ⚠ vùng sập là mất cả hai; ⚠ vi phạm nguyên tắc cơ bản nhất của sao lưu.
Ghi nhớ
⚠ Phạm vi bảo vệ theo giải pháp — bảng phải thuộc: | Giải pháp | Chịu được | |---|---| | ⚠ FCI / AG trong một vùng | ⚠ hỏng MÁY CHỦ | | ⚠ Availability Zone | ⚠ hỏng một TRUNG TÂM DỮ LIỆU trong vùng | | ⚠ Active geo-replication | ⚠ hỏng cả VÙNG | | ⚠ Auto-failover group | ⚠ hỏng cả vùng, TỰ ĐỘNG | | ⚠ Sao lưu địa lý (geo-restore) | ⚠ hỏng cả vùng, nhưng RTO GIỜ |
Từ khoá nhận diện:
"cả vùng không khả dụng" → ⚠ geo-replication hoặc failover group "một zone hỏng" → ⚠ zone-redundant "một máy chủ hỏng" → ⚠ FCI, AG trong vùng "LRS" → ⚠ mức nhân bản yếu nhất, chỉ một trung tâm dữ liệu
| ⚠ Nguyên tắc 3-2-1 của sao lưu | Nguyên tắc |
|---|---|
| ⚠ 3 bản sao dữ liệu | |
| ⚠ 2 loại phương tiện khác nhau | |
| ⚠ 1 bản ở VỊ TRÍ ĐỊA LÝ KHÁC | ⚠ điều mà phương án D vi phạm |
| ⚠ Trên đám mây | ⚠ "vị trí khác" nghĩa là vùng khác, không chỉ máy chủ khác |
| ⚠ Vì sao FCI khó dùng cho DR đa vùng | Lý do |
|---|---|
| ⚠ Cần lưu trữ CHUNG giữa các node | |
| ⚠ Lưu trữ chung xuyên vùng là rất khó và chậm | |
| ⚠ WSFC nhạy cảm với độ trễ mạng | |
| ⚠ Cho DR đa vùng | ⚠ dùng Always On AG với replica bất đồng bộ, không dùng FCI |
| ⚠ Kiến trúc nhiều tầng bảo vệ | Tầng |
|---|---|
| ⚠ Zone-redundant trong vùng chính | ⚠ chống hỏng zone |
| ⚠ Geo-replication sang vùng phụ | ⚠ chống hỏng vùng |
| ⚠ Long-term backup ở vùng thứ ba | ⚠ chống hỏng logic và tuân thủ |
| ⚠ Mỗi tầng | ⚠ chống một loại sự cố khác nhau |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bản sao lưu có nằm ở vùng khác không | | | Secondary ở vùng nào | ⚠ đủ xa để không cùng chịu sự cố | | Đã diễn tập chuyển vùng chưa | |
Và sai lầm cơ bản nhưng vẫn rất phổ biến trong thiết kế sao lưu: để bản sao lưu nằm cùng nơi với dữ liệu gốc. Nó bảo vệ được lỗi con người, nhưng hoàn toàn vô dụng trước sự cố hạ tầng.
- A Configure a lower lease timeout value
- B Configure Database Level Health Detection
- C Adjust the quorum vote weights
- D Increase the cluster heartbeat frequency
Xem giải thích
Đáp án
D — Tăng tần suất nhịp tim (heartbeat) của cụm.
Ghi nhớ về chất lượng câu hỏi
⚠ Diễn đạt của khoá không khớp chính xác với cách cấu hình thật.
| Đề nói | Thực tế phải làm |
|---|---|
| ⚠ "tăng TẦN SUẤT heartbeat" | ⚠ tăng NGƯỠNG số nhịp bị bỏ lỡ (SameSubnetThreshold, CrossSubnetThreshold) |
| ⚠ Ý chung | ⚠ điều chỉnh tham số heartbeat để cụm KIÊN NHẪN hơn với trục trặc mạng thoáng qua |
⚠ KHÔNG sửa khoá — ⚠ đây vẫn là phương án duy nhất nói về tham số heartbeat của cụm, ⚠ thứ trực tiếp quyết định khi nào một node bị coi là chết.
Vì sao đúng (về mặt ý tưởng)
⚠ Cơ chế heartbeat của Windows Server Failover Cluster:
⚠ Các node gửi nhịp tim cho nhau
↓
⚠ Bỏ lỡ N nhịp liên tiếp
↓
⚠ Cụm coi node đó là CHẾT
↓
⚠ GỠ khỏi cụm, có thể gây failover
| Tham số | Mặc định (thường) |
|---|---|
⚠ SameSubnetDelay |
⚠ 1000 ms — khoảng cách giữa các nhịp |
⚠ SameSubnetThreshold |
⚠ 10 nhịp — bỏ lỡ bao nhiêu thì coi là chết |
⚠ CrossSubnetDelay |
⚠ 1000 ms |
⚠ CrossSubnetThreshold |
⚠ 20 nhịp |
| ⚠ Trên đám mây | ⚠ Microsoft khuyến nghị NỚI các giá trị này |
Vì sao các phương án khác sai
-
A (giảm lease timeout) — ⚠ NGƯỢC hướng: ⚠ giảm nghĩa là nhạy cảm hơn, ⚠ node càng dễ bị coi là chết.
-
B (Database Level Health Detection) — ⚠ theo dõi sức khoẻ ở mức CSDL: ⚠ khiến failover nhạy hơn, ⚠ không giải quyết trục trặc mạng.
-
C (điều chỉnh trọng số phiếu quorum) — ⚠ quyết định bên nào tiếp tục chạy khi cụm bị chia rẽ: ⚠ không ảnh hưởng việc node bị gỡ vì trục trặc mạng thoáng qua.
Ghi nhớ
⚠ Cụm trên đám mây — điều chỉnh cần thiết: | Điều chỉnh | Lý do | |---|---| | ⚠ Nới ngưỡng heartbeat | ⚠ mạng đám mây có biến động lớn hơn mạng LAN | | ⚠ Dùng Cloud Witness cho quorum | ⚠ không cần máy chủ thứ ba | | ⚠ Đặt node ở Availability Zone khác nhau | | | ⚠ Dùng Azure Load Balancer cho listener | | | ⚠ Cấu hình mặc định | ⚠ được thiết kế cho mạng LAN, quá nhạy cho đám mây |
Từ khoá nhận diện:
"node bị gỡ khỏi cụm vì trục trặc mạng" → ⚠ nới tham số heartbeat "cụm bị chia rẽ, bên nào chạy tiếp" → ⚠ quorum và trọng số phiếu "failover quá nhạy" → ⚠ xem lại health detection và heartbeat
| ⚠ Đánh đổi khi nới ngưỡng heartbeat | Đánh đổi |
|---|---|
| ⚠ Nới nhiều: chịu được trục trặc, nhưng PHÁT HIỆN sự cố THẬT chậm hơn | |
| ⚠ Nới ít: phản ứng nhanh, nhưng failover nhầm nhiều | |
| ⚠ Failover nhầm | ⚠ gây gián đoạn KHÔNG cần thiết — thường tệ hơn |
| ⚠ Cân bằng | ⚠ đo tần suất trục trặc mạng thực tế rồi mới đặt |
| ⚠ Quorum — khái niệm liên quan phải biết | Khái niệm |
|---|---|
| ⚠ Cụm cần ĐA SỐ phiếu để hoạt động | |
| ⚠ Witness thêm một phiếu để tránh hoà | |
| ⚠ Cloud Witness = blob trên Azure Storage | ⚠ rẻ, hợp cụm lai và đa vùng |
| ⚠ Dynamic quorum tự điều chỉnh khi node rời cụm | |
| ⚠ Sai quorum | ⚠ mất một site là CẢ HAI bên cùng dừng |
| ⚠ Chẩn đoán node bị gỡ khỏi cụm | Bước |
|---|---|
| ⚠ Xem Cluster Log | ⚠ Get-ClusterLog |
| ⚠ Xem System Event Log quanh thời điểm đó | |
| ⚠ Kiểm tra có bảo trì Azure không | ⚠ Service Health |
| ⚠ Kiểm tra VM có bị đầy CPU không | ⚠ CPU 100% cũng làm bỏ lỡ nhịp tim |
| ⚠ Nguyên nhân hay bị bỏ qua | ⚠ không phải mạng, mà là VM quá tải |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tham số heartbeat đang là bao nhiêu | | | Node bị gỡ có trùng lúc CPU cao không | | | Có dùng Cloud Witness cho quorum chưa | |
Và nguyên nhân bị bỏ qua nhiều nhất khi một node liên tục rớt khỏi cụm: không phải mạng, mà là chính máy chủ đó quá tải. Một VM chạy CPU 100% không kịp gửi nhịp tim, và cụm hoàn toàn có lý khi kết luận nó đã chết.
You've been tasked with implementing a backup strategy for an Azure SQL Database that meets the following requirements:
- Ability to restore data to any point in time within the last 35 days.
- Ability to restore data from a backup that's at least 6 months old.
Which of the following configurations will satisfy the above requirements?
- A Configure point-in-time restore with retention set to 35 days.
- B Configure long-term backup retention to store weekly backups for at least 6 months.
- C Use the automated backup feature of Azure SQL Database with the default settings.
- D Implement geo-redundant backup storage (GRS).
Xem giải thích
Đáp án
A và B — Cấu hình point-in-time restore với thời hạn 35 ngày, và cấu hình long-term retention lưu bản sao lưu hằng tuần ít nhất 6 tháng.
Vì sao đúng
⚠ Đề có HAI yêu cầu riêng biệt, cần HAI cơ chế: | Yêu cầu | Cơ chế | |---|---| | ⚠ Khôi phục về bất kỳ thời điểm nào trong 35 ngày | ⚠ PITR với retention = 35 ngày | | ⚠ Khôi phục từ bản sao lưu ít nhất 6 tháng tuổi | ⚠ Long-term retention (LTR) |
⚠ Short-term (PITR)
⚠ 1-35 ngày
⚠ khôi phục tới TỪNG GIÂY
↓ ⚠ hết 35 ngày
⚠ Long-term retention
⚠ bản full theo tuần/tháng/năm
⚠ tới 10 NĂM
⚠ chỉ khôi phục về ĐIỂM SAO LƯU
⚠ Hai cơ chế TÁCH BIỆT, phải cấu hình cả hai.
Vì sao các phương án khác sai
-
C (dùng sao lưu tự động với thiết lập MẶC ĐỊNH) — ⚠ mặc định chỉ 7 ngày: ⚠ không đáp ứng cả 35 ngày lẫn 6 tháng.
-
D (bật geo-redundant backup storage) — ⚠ quyết định NƠI LƯU bản sao lưu, không phải THỜI GIAN GIỮ: ⚠ GRS cho khôi phục ở vùng khác, ⚠ nhưng không kéo dài thời hạn.
Ghi nhớ
⚠ Hai tầng sao lưu của Azure SQL — bảng phải thuộc: | Tầng | Thời hạn | Khôi phục về | |---|---|---| | ⚠ Short-term (PITR) | ⚠ 1-35 ngày | ⚠ BẤT KỲ giây nào | | ⚠ Long-term retention | ⚠ tới 10 năm | ⚠ chỉ ĐIỂM có bản sao lưu |
Từ khoá nhận diện:
"bất kỳ thời điểm nào trong N ngày" → ⚠ PITR, N ≤ 35 "sao lưu vài tháng hoặc vài năm tuổi" → ⚠ Long-term retention "khôi phục ở vùng khác" → ⚠ geo-restore, cần backup storage GRS "mặc định" → ⚠ 7 ngày — thường KHÔNG đủ cho đề bài
| ⚠ Cấu hình LTR — bốn tham số | Tham số |
|---|---|
| ⚠ Weekly (W) | ⚠ giữ bản tuần bao lâu — tới 520 tuần |
| ⚠ Monthly (M) | ⚠ giữ bản tháng bao lâu — tới 120 tháng |
| ⚠ Yearly (Y) | ⚠ giữ bản năm bao lâu — tới 10 năm |
| ⚠ Week of year | ⚠ tuần nào trong năm được giữ làm bản năm |
| ⚠ Với yêu cầu 6 tháng | ⚠ weekly = 26 tuần là đủ |
| ⚠ Khác biệt quan trọng giữa hai tầng | Khác biệt |
|---|---|
| ⚠ PITR: khôi phục về TỪNG GIÂY | ⚠ ghép full + differential + log |
| ⚠ LTR: chỉ khôi phục về ĐÚNG thời điểm bản full đó | |
| ⚠ Hệ quả | ⚠ LTR cho tuân thủ và lưu trữ, không cho khôi phục chính xác |
| ⚠ Chi phí | ⚠ LTR tính riêng theo dung lượng lưu trữ |
| ⚠ Backup storage redundancy — tham số thứ ba | Tuỳ chọn |
|---|---|
| ⚠ LRS | ⚠ rẻ nhất, một trung tâm dữ liệu |
| ⚠ ZRS | ⚠ qua nhiều zone trong vùng |
| ⚠ GRS (mặc định) | ⚠ nhân bản sang vùng phụ — cho phép geo-restore |
| ⚠ Chọn LRS | ⚠ tiết kiệm nhưng MẤT khả năng geo-restore |
| ⚠ Không đổi được | ⚠ sau khi tạo CSDL, với một số bậc dịch vụ |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | PITR retention đặt bao nhiêu ngày | ⚠ mặc định 7, thường phải nâng | | LTR đã cấu hình chưa | ⚠ KHÔNG bật mặc định | | Đã thử khôi phục từ bản LTR chưa | |
Và cấu hình bị bỏ quên nhiều nhất trong Azure SQL Database: long-term retention không hề bật sẵn. Nhiều tổ chức tin rằng mình đang giữ sao lưu nhiều năm, cho tới ngày kiểm toán viên hỏi bản sao lưu của quý trước.
-
A
sys. dm_tran_locks view
- B sys.dm_exec_sessions
- C sys.dm_os_wait_stats
- D sys.dm_db_index_usage_stats
Xem giải thích
Đáp án
A — sys.dm_tran_locks.
Ghi nhớ về chất lượng câu hỏi
⚠ Câu này và #17460 trong CÙNG LÔ có khoá khác nhau cho chủ đề rất gần.
| Câu | Hỏi gì | Khoá |
|---|---|---|
| ⚠ #17460 | ⚠ HEAD BLOCKER và danh sách phiên bị chặn | ⚠ sys.dm_os_waiting_tasks |
| ⚠ #17472 (câu này) | ⚠ phiên nào đang CHỜ KHOÁ | ⚠ sys.dm_tran_locks |
| ⚠ Không mâu thuẫn | ⚠ hai DMV nhìn cùng vấn đề từ hai góc |
⚠ Thực tế: ⚠ dân DBA thường JOIN cả hai để có bức tranh đầy đủ.
Vì sao đúng
⚠ sys.dm_tran_locks cho biết mọi yêu cầu khoá: | Cột quan trọng | Nội dung | |---|---| | ⚠ request_session_id | ⚠ phiên nào yêu cầu khoá | | ⚠ request_mode | ⚠ loại khoá: S, X, U, IS, IX | | ⚠ request_status | ⚠ GRANT (đã có) hay WAIT (đang chờ) | | ⚠ resource_type | ⚠ OBJECT, PAGE, KEY, RID | | ⚠ resource_description | ⚠ tài nguyên cụ thể |
⚠ request_status = 'WAIT'
↓
⚠ Đây chính là phiên ĐANG CHỜ KHOÁ
↓
⚠ Tìm phiên có 'GRANT' trên CÙNG tài nguyên
↓
⚠ Đó là phiên đang CHẶN
Vì sao các phương án khác sai
-
C (
sys.dm_os_wait_stats) — ⚠ thống kê chờ TÍCH LUỸ toàn hệ thống: ⚠ cho biết loại chờ nào nhiều nhất, ⚠ không cho biết PHIÊN nào đang chờ ngay lúc này. -
B (
sys.dm_exec_sessions) — ⚠ thông tin phiên: ⚠ ai đăng nhập, từ ứng dụng nào; ⚠ không có thông tin khoá. -
D (
sys.dm_db_index_usage_stats) — ⚠ thống kê sử dụng index: ⚠ hoàn toàn khác chủ đề.
Ghi nhớ
⚠ Bộ DMV cho blocking — dùng phối hợp: | DMV | Góc nhìn | |---|---| | ⚠ sys.dm_tran_locks | ⚠ KHOÁ: ai giữ, ai chờ, trên tài nguyên nào | | ⚠ sys.dm_os_waiting_tasks | ⚠ CHỜ: ai chờ ai, chuỗi chặn | | ⚠ sys.dm_exec_requests | ⚠ REQUEST đang chạy, có blocking_session_id | | ⚠ sys.dm_exec_sessions | ⚠ AI: người dùng, ứng dụng, máy | | ⚠ Truy vấn chẩn đoán tốt | ⚠ JOIN cả bốn lại |
Từ khoá nhận diện:
"phiên đang chờ KHOÁ" → ⚠
sys.dm_tran_locksvớirequest_status = 'WAIT'"head blocker, chuỗi chặn" → ⚠sys.dm_os_waiting_tasks"loại chờ nào nhiều nhất toàn hệ thống" → ⚠sys.dm_os_wait_stats"deadlock đã xảy ra" → ⚠ Extended Eventssystem_health
| ⚠ Các loại khoá phải nhận ra | Loại |
|---|---|
| ⚠ S (Shared) | ⚠ đọc — nhiều phiên cùng giữ được |
| ⚠ X (Exclusive) | ⚠ ghi — chỉ MỘT phiên |
| ⚠ U (Update) | ⚠ trung gian, chống deadlock khi chuẩn bị ghi |
| ⚠ IS, IX (Intent) | ⚠ báo hiệu ý định khoá ở mức thấp hơn |
| ⚠ Xung đột kinh điển | ⚠ X chặn mọi thứ; S chặn X |
| ⚠ Leo thang khoá (lock escalation) | Cơ chế |
|---|---|
| ⚠ Quá nhiều khoá dòng → SQL Server đổi thành khoá BẢNG | |
| ⚠ Ngưỡng thường khoảng 5.000 khoá | |
| ⚠ Kết quả: một truy vấn khoá cả bảng | ⚠ blocking lan rộng |
| ⚠ Cách tránh | ⚠ giao dịch nhỏ, cập nhật theo lô, index đúng |
| ⚠ Truy vấn chẩn đoán nhanh | Truy vấn |
|---|---|
⚠ Lọc sys.dm_tran_locks với request_status = 'WAIT' |
|
⚠ JOIN sang sys.dm_exec_sessions lấy tên ứng dụng |
|
⚠ JOIN sang sys.dm_exec_requests + sys.dm_exec_sql_text lấy câu lệnh |
|
| ⚠ Kết quả | ⚠ biết ai chặn ai và bằng câu lệnh gì |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có phiên nào giữ khoá quá lâu không | | | Có leo thang khoá lên mức bảng không | | | READ COMMITTED SNAPSHOT đã bật chưa | ⚠ giảm hẳn blocking giữa đọc và ghi |
Và điều làm việc chẩn đoán blocking khó hơn nó cần phải khó: các DMV mỗi cái chỉ cho một mảnh của bức tranh. Một truy vấn chẩn đoán viết sẵn ghép chúng lại đáng giá hơn nhiều so với việc nhớ tên từng DMV.
- A Log shipping.
- B Differential backup.
- C Point in time restore.
- D Always On availability group.
Xem giải thích
Đáp án
C — Point in time restore.
Ghi nhớ về chất lượng câu hỏi
⚠ Câu này GẦN TRÙNG với #17401 ở lô trước.
| Câu | Bối cảnh |
|---|---|
| ⚠ #17401 (lô 159) | ⚠ muốn khôi phục về bất kỳ điểm nào trong 24 giờ |
| ⚠ #17473 (câu này) | ⚠ khôi phục sau khi sửa nhầm dữ liệu |
| ⚠ Cùng khoá | ⚠ Point in time restore |
Vì sao đúng
⚠ Kịch bản kinh điển của PITR: lỗi con người.
⚠ 14:32 — ai đó chạy nhầm
UPDATE khong co WHERE
↓
⚠ 14:45 — phát hiện ra
↓
⚠ Khôi phục về 14:31
↓
⚠ Ra một CSDL MỚI
↓
⚠ Đối chiếu, lấy lại dữ liệu đúng
⚠ Không cần dừng hệ thống: ⚠ khôi phục ra CSDL mới, ⚠ rồi mới quyết định dùng thế nào.
Vì sao các phương án khác sai
-
B (differential backup) — ⚠ là một THÀNH PHẦN của PITR, không phải tính năng: ⚠ riêng nó chỉ khôi phục về thời điểm bản sao lưu đó.
-
D (Always On availability group) — ⚠ giải pháp HA: ⚠ replica cũng đã đồng bộ luôn lỗi đó; ⚠ hoàn toàn không giúp gì với lỗi logic.
-
A (log shipping) — ⚠ giải pháp nhân bản, không phải khôi phục theo thời điểm: ⚠ tuy nhiên ⚠ nếu secondary có độ trễ cấu hình sẵn thì có thể lấy lại dữ liệu — nhưng đó là ca dùng ngoại lệ.
Ghi nhớ
⚠ HA/DR KHÔNG bảo vệ khỏi lỗi logic — bảng phải thuộc: | Loại sự cố | Giải pháp | |---|---| | ⚠ Hỏng phần cứng, sập máy chủ | ⚠ HA: FCI, AG, zone-redundant | | ⚠ Sập cả vùng | ⚠ DR: geo-replication, failover group | | ⚠ LỖI CON NGƯỜI, hỏng dữ liệu logic | ⚠ SAO LƯU và PITR | | ⚠ Điểm mấu chốt | ⚠ nhân bản sao chép TRUNG THỰC cả lỗi của bạn |
Từ khoá nhận diện:
"sửa nhầm dữ liệu, xoá nhầm" → ⚠ PITR "máy chủ hỏng" → ⚠ HA "cả vùng sập" → ⚠ DR "CSDL bị xoá" → ⚠ restore deleted database
| ⚠ Vì sao nhân bản không cứu được lỗi logic | Lý do |
|---|---|
| ⚠ Nhân bản sao chép MỌI thay đổi, kể cả sai | |
| ⚠ Lệnh DELETE nhầm lan sang secondary trong vài giây | |
| ⚠ Đây là lý do LUÔN cần sao lưu dù đã có HA/DR | |
| ⚠ Câu hỏi kiểm tra | ⚠ nếu ai đó xoá nhầm một bảng, kiến trúc này cứu được không |
| ⚠ Quy trình xử lý khi sửa nhầm dữ liệu | Bước |
|---|---|
| ⚠ 1. DỪNG ngay việc ghi thêm nếu có thể | |
| ⚠ 2. Xác định CHÍNH XÁC thời điểm trước khi lỗi | ⚠ audit log giúp ở đây |
| ⚠ 3. Khôi phục ra CSDL MỚI | ⚠ KHÔNG ghi đè bản đang chạy |
| ⚠ 4. Đối chiếu và lấy lại phần dữ liệu cần | |
| ⚠ 5. Ghi nhận sự cố và sửa quy trình | |
| ⚠ Bước 3 quan trọng nhất | ⚠ ghi đè là mất luôn dữ liệu tạo ra sau thời điểm lỗi |
| ⚠ Phòng ngừa tốt hơn khôi phục | Phòng ngừa |
|---|---|
| ⚠ Bắt buộc dùng giao dịch với thao tác hàng loạt | |
⚠ Chạy SELECT trước rồi mới đổi thành UPDATE |
|
| ⚠ Hạn chế quyền ghi trực tiếp trên production | |
| ⚠ Dùng temporal table cho bảng quan trọng | ⚠ giữ lịch sử mọi thay đổi |
| ⚠ Temporal table | ⚠ cho phép truy vấn dữ liệu "như tại thời điểm X" mà không cần khôi phục |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Thời hạn PITR có đủ để phát hiện lỗi không | ⚠ lỗi có thể mất vài ngày mới lộ | | Có ai được ghi trực tiếp lên production không | | | Bảng quan trọng có temporal versioning không | |
Và câu hỏi nên đặt cho mọi kiến trúc HA/DR được thiết kế đẹp đẽ: nếu ai đó chạy một lệnh DELETE nhầm, kiến trúc này cứu được không?. Câu trả lời gần như luôn là không — và đó chính là lý do sao lưu không bao giờ bị thay thế.
- A Dynamic Management Views (DMVs).
- B Azure Metrics Explorer.
- C Azure Blob Storage logs.
- D Azure Automation runbooks.
Xem giải thích
Đáp án
A — Dynamic Management Views (DMV).
Vì sao đúng
⚠ SQL Server có bộ DMV riêng cho Always On: | DMV | Cho biết | |---|---| | ⚠ sys.dm_hadr_availability_replica_states | ⚠ trạng thái từng replica: primary/secondary, đồng bộ hay không | | ⚠ sys.dm_hadr_database_replica_states | ⚠ độ trễ gửi/nhận log, hàng đợi log | | ⚠ sys.dm_hadr_availability_group_states | ⚠ trạng thái tổng thể của nhóm | | ⚠ sys.dm_hadr_cluster | ⚠ thông tin WSFC | | ⚠ sys.availability_groups | ⚠ cấu hình nhóm |
⚠ log_send_queue_size
⚠ log chờ GỬI sang secondary
⚠ redo_queue_size
⚠ log đã tới nhưng chưa ÁP DỤNG
↓
⚠ Hai con số này quyết định
⚠ RPO thực tế (send queue)
⚠ RTO thực tế (redo queue)
Vì sao các phương án khác sai
-
B (Azure Metrics Explorer) — ⚠ cho chỉ số của TÀI NGUYÊN AZURE: ⚠ CPU và đĩa của VM; ⚠ không biết gì về trạng thái bên trong Always On.
-
D (Azure Automation runbook) — ⚠ công cụ TỰ ĐỘNG HOÁ: ⚠ chạy được script kiểm tra, ⚠ nhưng bản thân nó không cung cấp thông tin.
-
C (log của Azure Blob Storage) — ⚠ hoàn toàn không liên quan.
Ghi nhớ
⚠ Giám sát Always On — bảng phải thuộc: | Cần biết | Nguồn | |---|---| | ⚠ Trạng thái replica, độ trễ đồng bộ | ⚠ DMV dm_hadr_* | | ⚠ Sự kiện failover | ⚠ SQL Error Log, Cluster Log | | ⚠ Sức khoẻ VM và mạng | ⚠ Azure Monitor | | ⚠ Dashboard trực quan | ⚠ AlwaysOn Dashboard trong SSMS | | ⚠ Cảnh báo tự động | ⚠ SQL Agent alert hoặc Azure Monitor + Log Analytics |
Từ khoá nhận diện:
"trạng thái Always On, độ trễ đồng bộ" → ⚠ DMV
dm_hadr_*"CPU, bộ nhớ của VM" → ⚠ Azure Monitor "node bị gỡ khỏi cụm" → ⚠ Cluster Log "deadlock" → ⚠ Extended Events
| ⚠ Hai hàng đợi quyết định RPO và RTO | Hàng đợi |
|---|---|
⚠ log_send_queue_size |
⚠ chưa gửi đi — mất nếu primary chết = RPO |
⚠ redo_queue_size |
⚠ chưa áp dụng — phải chờ khi failover = RTO |
| ⚠ Cả hai tăng dần | ⚠ dấu hiệu secondary không theo kịp |
| ⚠ Nguyên nhân thường gặp | ⚠ mạng chậm, secondary yếu, hoặc đĩa secondary chậm |
| ⚠ Chế độ đồng bộ của Always On | Chế độ |
|---|---|
| ⚠ Synchronous commit | ⚠ RPO = 0, nhưng primary CHỜ secondary |
| ⚠ Asynchronous commit | ⚠ primary không chờ, có thể MẤT dữ liệu |
| ⚠ Cùng vùng | ⚠ thường dùng đồng bộ |
| ⚠ Xuyên vùng | ⚠ gần như luôn dùng bất đồng bộ vì độ trễ |
| ⚠ Chỉ chế độ đồng bộ | ⚠ mới cho phép AUTOMATIC failover |
| ⚠ Cảnh báo nên đặt cho Always On | Cảnh báo |
|---|---|
⚠ Trạng thái đồng bộ khác SYNCHRONIZED |
|
⚠ log_send_queue_size vượt ngưỡng |
|
| ⚠ Xảy ra failover | ⚠ kể cả tự động |
⚠ Replica ở trạng thái NOT HEALTHY |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Hai hàng đợi log có tăng dần không | | | Chế độ đồng bộ có khớp với cam kết RPO không | | | Có cảnh báo khi trạng thái đồng bộ thay đổi không | |
Và con số quyết định RPO thật của một cấu hình Always On bất đồng bộ: log_send_queue_size. Đó chính xác là lượng dữ liệu sẽ mất nếu primary chết ngay lúc này.
- A Azure Site Recovery.
- B Azure Blob Storage lifecycle management.
- C Azure SQL Data Sync.
- D Azure Backup.
Xem giải thích
Đáp án
D — Azure Backup.
Ghi nhớ về chất lượng câu hỏi
⚠ Với Azure SQL Database, lưu trữ dài hạn là tính năng TÍCH HỢP SẴN, không cần Azure Backup.
| Môi trường | Cách lưu trữ dài hạn |
|---|---|
| ⚠ Azure SQL Database / MI | ⚠ Long-term retention (LTR) — TÍCH HỢP, tới 10 năm |
| ⚠ SQL Server trên Azure VM | ⚠ Azure Backup for SQL Server in Azure VM |
⚠ KHÔNG sửa khoá — ⚠ trong bốn phương án, ⚠ Azure Backup là dịch vụ sao lưu duy nhất được đưa ra.
⚠ Cách nhớ an toàn: ⚠ PaaS → LTR tích hợp; ⚠ IaaS (SQL trên VM) → Azure Backup.
Vì sao đúng (theo bối cảnh đề)
⚠ Azure Backup là dịch vụ sao lưu tập trung của Azure: | Năng lực | Nội dung | |---|---| | ⚠ Sao lưu SQL Server trên Azure VM | ⚠ full, differential, log | | ⚠ Chính sách lưu trữ dài hạn | ⚠ hằng ngày, tuần, tháng, năm | | ⚠ Quản tập trung qua Recovery Services Vault | | | ⚠ Soft delete và immutable vault | ⚠ chống xoá nhầm và mã tống tiền | | ⚠ Giám sát và cảnh báo tích hợp | |
Vì sao các phương án khác sai
-
B (Blob Storage lifecycle management) — ⚠ quản vòng đời của OBJECT trong Storage: ⚠ chuyển lớp, xoá theo tuổi; ⚠ không tạo ra bản sao lưu CSDL.
-
A (Azure Site Recovery) — ⚠ khôi phục thảm hoạ cho MÁY ẢO: ⚠ nhân bản cả máy, ⚠ không phải sao lưu CSDL theo thời điểm.
-
C (SQL Data Sync) — ⚠ đồng bộ dữ liệu hai chiều: ⚠ KHÔNG phải sao lưu — ⚠ xoá nhầm sẽ lan đi mọi nơi.
Ghi nhớ
⚠ Ba dịch vụ dễ lẫn — bảng phải thuộc: | Dịch vụ | Bảo vệ gì | |---|---| | ⚠ Azure Backup | ⚠ SAO LƯU: khôi phục về thời điểm quá khứ | | ⚠ Azure Site Recovery | ⚠ DR: nhân bản máy ảo sang vùng khác | | ⚠ SQL Data Sync | ⚠ ĐỒNG BỘ: phân phối dữ liệu, KHÔNG bảo vệ |
Từ khoá nhận diện:
"lưu trữ sao lưu nhiều năm — Azure SQL Database" → ⚠ Long-term retention (LTR) "sao lưu SQL Server trên VM" → ⚠ Azure Backup "nhân bản máy ảo sang vùng khác" → ⚠ Site Recovery "đồng bộ hai chiều" → ⚠ Data Sync — KHÔNG phải sao lưu
| ⚠ Long-term retention của Azure SQL — chi tiết | Chi tiết |
|---|---|
| ⚠ Giữ bản full theo tuần / tháng / năm | |
| ⚠ Tối đa 10 năm | |
| ⚠ KHÔNG bật mặc định | ⚠ phải cấu hình |
| ⚠ Tính phí riêng theo dung lượng | |
| ⚠ Khôi phục | ⚠ chỉ về ĐÚNG thời điểm bản sao lưu đó, không phải từng giây |
| ⚠ Bảo vệ bản sao lưu khỏi mã tống tiền | Cách |
|---|---|
| ⚠ Soft delete | ⚠ bản xoá vẫn giữ 14 ngày |
| ⚠ Immutable vault | ⚠ không ai xoá được trước hạn |
| ⚠ Multi-user authorization | ⚠ cần hai người duyệt thao tác nguy hiểm |
| ⚠ Vì sao cần | ⚠ kẻ tấn công hiện đại XOÁ SAO LƯU trước rồi mới mã hoá dữ liệu |
| ⚠ Chiến lược sao lưu nhiều tầng | Tầng |
|---|---|
| ⚠ PITR ngắn hạn | ⚠ lỗi con người, 7-35 ngày |
| ⚠ LTR hoặc Azure Backup dài hạn | ⚠ tuân thủ, nhiều năm |
| ⚠ Bản sao ở vùng khác | ⚠ sự cố vùng |
| ⚠ Bản bất biến | ⚠ mã tống tiền |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đang dùng PaaS hay IaaS | ⚠ quyết định LTR hay Azure Backup | | Bản sao lưu có bị xoá được không | | | Đã thử khôi phục từ bản dài hạn chưa | |
Và thay đổi lớn trong tư duy sao lưu vài năm gần đây: bản sao lưu giờ là mục tiêu tấn công đầu tiên. Mã tống tiền hiện đại tìm và xoá sao lưu trước khi mã hoá dữ liệu — nên tính bất biến của bản lưu quan trọng không kém việc có bản lưu.
- A Log Shipping.
- B Auto-failover groups.
- C Stretch Database.
- D Azure Blob storage backup.
Xem giải thích
Đáp án
B — Auto-failover groups.
Vì sao đúng
⚠ Thời gian chuyển đổi gồm nhiều phần, tự động hoá cắt được phần lớn nhất: | Thành phần RTO | Có auto-failover group | |---|---| | ⚠ Phát hiện sự cố | ⚠ tự động | | ⚠ Quyết định chuyển | ⚠ tự động | | ⚠ Nâng secondary lên primary | ⚠ tự động | | ⚠ Ứng dụng đổi kết nối | ⚠ KHÔNG cần — endpoint cố định |
⚠ Không có failover group
⚠ phát hiện → ⚠ gọi người
→ ⚠ quyết định → ⚠ thao tác tay
→ ⚠ đổi chuỗi kết nối
↓ ⚠ RTO tính bằng CHỤC PHÚT
⚠ Có failover group
⚠ mọi bước TỰ ĐỘNG
↓ ⚠ RTO tính bằng PHÚT
Vì sao các phương án khác sai
-
A (log shipping) — ⚠ kỹ thuật cũ, chuyển đổi HOÀN TOÀN THỦ CÔNG: ⚠ làm RTO tệ hơn, không tốt hơn.
-
C (Stretch Database) — ⚠ chuyển dữ liệu LẠNH lên Azure để tiết kiệm chi phí: ⚠ không liên quan HA/DR; ⚠ ⚠ và tính năng này đã bị khai tử.
-
D (sao lưu ra Azure Blob) — ⚠ là sao lưu: ⚠ khôi phục từ sao lưu có RTO hàng giờ.
Ghi nhớ
⚠ Rút ngắn RTO — bảng phải thuộc: | Cách | Tác động | |---|---| | ⚠ Secondary CHẠY SẴN | ⚠ bỏ thời gian khôi phục | | ⚠ Tự động phát hiện và chuyển | ⚠ bỏ thời gian gọi người | | ⚠ Endpoint cố định | ⚠ bỏ thời gian đổi cấu hình ứng dụng | | ⚠ Ứng dụng tự kết nối lại | ⚠ bỏ thời gian khởi động lại dịch vụ | | ⚠ Bốn thứ này cộng lại | ⚠ là toàn bộ RTO |
Từ khoá nhận diện:
"giảm thời gian chuyển đổi" → ⚠ auto-failover group "chuyển thủ công" → ⚠ active geo-replication, log shipping "Stretch Database" → ⚠ tiết kiệm chi phí lưu trữ, ĐÃ KHAI TỬ
| ⚠ Auto-failover group — đặc điểm phải nhớ | Đặc điểm |
|---|---|
| ⚠ Hai endpoint DNS cố định | |
| ⚠ Chuyển cả NHÓM CSDL cùng lúc | |
| ⚠ Có grace period trước khi chuyển | ⚠ tránh chuyển vì sự cố thoáng qua |
| ⚠ Với Managed Instance: chuyển cả instance | |
| ⚠ Lưu ý | ⚠ chuyển tự động có thể MẤT dữ liệu vì nhân bản bất đồng bộ |
| ⚠ Grace period — đánh đổi | Đánh đổi |
|---|---|
| ⚠ Ngắn (1 giờ) | ⚠ chuyển nhanh, nhưng dễ chuyển nhầm |
| ⚠ Dài (24 giờ) | ⚠ an toàn hơn, nhưng RTO dài |
| ⚠ Với hệ thống quan trọng | ⚠ thường đặt ngắn và chấp nhận rủi ro mất chút dữ liệu |
| ⚠ Vẫn chuyển tay được | ⚠ bất cứ lúc nào, không cần chờ grace period |
| ⚠ Đừng quên phần ỨNG DỤNG | Đừng quên |
|---|---|
| ⚠ Chuỗi kết nối phải trỏ vào endpoint của FAILOVER GROUP | |
| ⚠ Ứng dụng cần logic thử lại khi mất kết nối | |
| ⚠ Connection pool cần được làm mới | |
| ⚠ Cache của ứng dụng có thể giữ dữ liệu cũ | |
| ⚠ RTO của CSDL nhanh | ⚠ không có nghĩa RTO của DỊCH VỤ cũng nhanh |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Chuỗi kết nối có dùng endpoint của failover group không | | | Ứng dụng có logic thử lại không | | | Đã đo RTO đầu-cuối chưa | ⚠ từ lúc sự cố tới lúc người dùng dùng lại được |
Và con số RTO duy nhất thật sự quan trọng: thời gian từ lúc người dùng gặp lỗi tới lúc họ dùng lại được bình thường. Cơ sở dữ liệu chuyển xong trong hai phút không có nghĩa gì nếu ứng dụng mất thêm hai mươi phút để ổn định.