KB3095156 - KHẮC PHỤC: Lỗi 9002 và lỗi 3052 khi bạn cố thêm hoặc sao lưu tệp nhật ký trong SQL Server 2012 hoặc SQL Server 2014

Áp dụng cho
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Triệu chứng

Giả sử bạn sử dụng nhóm Luôn sẵn sàng trong cơ sở dữ liệu của Microsoft SQL Server 2012 hoặc SQL Server 2014 và tồn tại một giao dịch hoạt động mở lớn và cần thêm không gian nhật ký. Khi tệp nhật ký không thể phát triển vì một trong những lý do sau đây, giao dịch sẽ không thành công.

  • Thiếu dung lượng tệp bổ sung
  • Tệp nhật ký được đặt cấu hình để không tăng dần
  • Tệp nhật ký đã đạt đến kích thước tối đa được cấu hình

Ngoài ra, bạn sẽ nhận được thông báo lỗi sau:

Lưu ý

Lỗi: 9002, Mức độ nghiêm trọng: 17, Trạng thái: 9.
Nhật ký giao tác cho '<tên cơ >sở dữ liệu' đã đầy do 'LOG_BACKUP'.

Sau khi chạy sao lưu nhật ký, bạn sẽ nhận được một thông báo lỗi 9002 khác:

Lưu ý

Lỗi: 9002, Mức độ nghiêm trọng: 17, Trạng thái: 9.
Nhật ký giao tác cho '<tên cơ >sở dữ liệu' đã đầy do 'ACTIVE_TRANSACTION'.

Sau một bản sao lưu nhật ký khác, bạn sẽ nhận được một thông báo lỗi 9002 khác và theo sau là thông báo lỗi 5901:

Lưu ý

Lỗi: 9002, Mức độ nghiêm trọng: 17, Trạng thái: 9.
Nhật ký giao tác cho '<tên cơ >sở dữ liệu' của cơ sở dữ liệu đã đầy do 'AVAILABILITY_REPLICA'.

      

Lưu ý

Không thể ghi bản ghi điểm kiểm tra trong tên cơ> sở dữ liệu cơ sở dữ liệu < vì nhật ký hết dung lượng. Hãy liên hệ với người quản trị cơ sở dữ liệu để cắt bớt nhật ký hoặc phân bổ thêm không gian cho tệp nhật ký cơ sở dữ liệu.
Lỗi: 5901, Mức độ nghiêm trọng: 16, Trạng thái: 1.
Một hoặc nhiều đơn vị phục hồi thuộc 'tên cơ> sở dữ liệu' cơ sở dữ liệu< không tạo được điểm kiểm. Điều này thường là do thiếu tài nguyên hệ thống như đĩa hay bộ nhớ, hoặc trong một số trường hợp là do hỏng cơ sở dữ liệu. Kiểm tra các mục trước đó trong nhật ký lỗi để biết thêm thông tin chi tiết về lỗi này.

Khi các bản sao lưu điểm kiểm tra hoặc nhật ký tiếp theo được thực hiện trong quá trình quay lui giao dịch, bạn có thể nhận được thông báo lỗi sau:

Lưu ý

Thông báo 3052, Mức 16, Trạng thái 1, Dòng 4
BACKUP LOG was unable to log updates for database 'database<name>'. Các bản sao lưu nhật ký tiếp theo sẽ được yêu cầu để nâng cấp điểm sao lưu từ '<LSN id 1>' lên '<LSN id 2>' sau khi không gian nhật ký được cung cấp để ghi nhật ký.

Khi bạn nhận được các thông báo này, bạn không còn có thể gửi bất kỳ giao dịch mới nào tới cơ sở dữ liệu, đồng thời, bạn không thể tăng tệp nhật ký hoặc thêm tệp nhật ký khác.

Giải pháp

Sự cố này đã được khắc phục lần đầu tiên trong bản cập nhật tích lũy tiếp theo của SQL Server:

Đề xuất: Cài đặt bản cập nhật tích lũy mới nhất cho SQL Server

Mỗi bản cập nhật tích lũy mới dành cho SQL Server chứa tất cả các bản sửa lỗi nóng và bản sửa lỗi bảo mật được tích hợp trong bản cập nhật tích lũy trước đó. Chúng tôi khuyên bạn nên tải xuống và cài đặt các bản cập nhật tích lũy mới nhất cho SQL Server:

      

Giải pháp thay thế

Bạn có thể sử dụng giải pháp thay thế sau đây để cắt bớt nhật ký và tiếp tục hoạt động.

  1. Kiểm tra mỗi bản sao phụ để xác minh last_hardened_lsn bản sao phụ (xem sys.dm_hadr_database_replica_states) khớp với bản last_hardened_lsn bản sao chính. Bạn có thể thực hiện điều này bằng cách chạy truy vấn sau đây được kết nối với phiên bản bản sao chính

    SELECT ags.name as AGGroupName,
        ar.replica_server_name as InstanceName,
        hars.role_desc,
        db_name(drs.database_id)as DBName,
        drs.last_hardened_lsn, drs.log_send_queue_size,
        drs.synchronization_state_desc as SyncState,
        ar.availability_mode_desc as SyncMode,
        CASE drs.is_local WHEN 1 THEN drs.database_id ELSE NULL END as database_id
        FROM sys.dm_hadr_database_replica_states drs
        LEFT JOIN sys.availability_replicas ar ON drs.replica_id = ar.replica_id
        LEFT JOIN sys.availability_groups ags  ON ar.group_id = ags.group_id
        LEFT JOIN sys.dm_hadr_availability_replica_states hars
            ON ar.group_id = hars.group_id and ar.replica_id = hars.replica_id
          WHERE db_name(drs.database_id) = '<database name>'
    
  2. Trên bản sao chính

    • Loại bỏ cơ sở dữ liệu khỏi nhóm tính sẵn sàng.
    • Thêm lại cơ sở dữ liệu vào nhóm tính sẵn sàng.
  3. Trên mỗi bản sao phụ

    • Thêm lại cơ sở dữ liệu vào nhóm tính sẵn sàng.

Bằng cách loại bỏ cơ sở dữ liệu khỏi nhóm sẵn sàng, cơ sở dữ liệu sẽ cắt bớt nhật ký ngay lập tức và giải phóng không gian nhật ký.

Nếu last_hardened_lsn trên mỗi bản sao phụ giống với bản sao chính và không có bản sao lưu nhật ký nào được thực hiện trong thời gian loại bỏ cơ sở dữ liệu khỏi Nhóm tính sẵn sàng và thêm lại cơ sở dữ liệu trên mỗi bản phụ, thì bản sao phụ sẽ được thêm lại thành công mà không gặp bất kỳ lỗi nào hoặc phải khôi phục các bản sao lưu nhật ký trên bản sao phụ.

Nếu bản sao phụ chưa hợp lệ với bản sao chính và bạn phải loại bỏ cơ sở dữ liệu khỏi nhóm sẵn sàng trước khi bản sao phụ có thể bắt khước, thì bản sao phụ đó có thể phải khôi phục các bản sao lưu nhật ký để bắt kịp trước khi thêm lại bản sao vào nhóm tính sẵn sàng hoặc bỏ cơ sở dữ liệu trên bản sao phụ và gieo hạt giống lại với bản sao lưu cơ sở dữ liệu đầy đủ và bản sao lưu nhật ký giao tác.

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "áp dụng cho".