Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Sử dụng cờ theo dõi 3226 để ngăn chặn ghi nhật ký sao lưu

Giới thiệu

Mọi thao tác sao lưu trong SQL Server đều được ghi vào nhật ký Lỗi SQL Server. Điều này bao gồm Sao lưu nhật ký giao dịch ngay cả khi chúng xảy ra như một phần của Cấu hình vận chuyển nhật ký giao dịch. Đôi khi việc ghi lại toàn bộ Bản sao lưu Nhật ký có thể gây phiền toái trong Nhật ký Lỗi SQL Server và cần được quản lý. Cờ theo dõi 3226 được sử dụng để ngăn chặn việc ghi nhật ký như vậy và chúng tôi sẽ trình bày cách thực hiện điều này trong bài viết này.

Định cấu hình Vận chuyển nhật ký giao dịch

Để chứng minh giá trị của cờ theo dõi này, chúng tôi sẽ triển khai cấu hình vận chuyển nhật ký nhỏ bằng cách sử dụng cơ sở dữ liệu SQL Server 2017 có tên là Practice2017 . Phiên bản chính của chúng tôi là EPG-KIGIRI \ I2017 và chúng tôi đang sao chép cơ sở dữ liệu này sang phiên bản SQL Server 2019 EPG-KIGIRI \ I2019 (Xem Hình 2). Toàn bộ tập lệnh cấu hình được hiển thị trong Liệt kê 1.

Hình. Cấu hình 1 nhật ký vận chuyển trên chính

[expand title =” “]

-- Listing 1: Transaction Log Shipping Configuration Script

-- Execute the following statements on the primary to configure log shipping 
-- for database [EPG-KIGIRI\I2017].[Practice2017],
-- The script is to be run on the primary in the context of the [msdb] database.  
------------------------------------------------------------------------------------- 
-- Adding the log shipping configuration 

-- ****** Begin: Script to be run on the primary: [EPG-KIGIRI\I2017] ******


DECLARE @LS_BackupJobId	AS uniqueidentifier 
DECLARE @LS_PrimaryId	AS uniqueidentifier 
DECLARE @SP_Add_RetCode	As int 


EXEC @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database 
		@database = N'Practice2017' 
		,@backup_directory = N'G:\Backup\LogShip\' 
		,@backup_share = N'\\Epg-kigiri\g$\Backup\LogShip\' 
		,@backup_job_name = N'LSBackup_Practice2017' 
		,@backup_retention_period = 1440
		,@backup_compression = 2
		,@monitor_server = N'EPG-KIGIRI\I2017' 
		,@monitor_server_security_mode = 1 
		,@backup_threshold = 60 
		,@threshold_alert_enabled = 1
		,@history_retention_period = 2880 
		,@backup_job_id = @LS_BackupJobId OUTPUT 
		,@primary_id = @LS_PrimaryId OUTPUT 
		,@overwrite = 1 


IF (@@ERROR = 0 AND @SP_Add_RetCode = 0) 
BEGIN 

DECLARE @LS_BackUpScheduleUID	As uniqueidentifier 
DECLARE @LS_BackUpScheduleID	AS int 


EXEC msdb.dbo.sp_add_schedule 
		@schedule_name =N'LSBackupSchedule_EPG-KIGIRI\I20171' 
		,@enabled = 1 
		,@freq_type = 4 
		,@freq_interval = 1 
		,@freq_subday_type = 4 
		,@freq_subday_interval = 5 
		,@freq_recurrence_factor = 0 
		,@active_start_date = 20190113 
		,@active_end_date = 99991231 
		,@active_start_time = 0 
		,@active_end_time = 235900 
		,@schedule_uid = @LS_BackUpScheduleUID OUTPUT 
		,@schedule_id = @LS_BackUpScheduleID OUTPUT 

EXEC msdb.dbo.sp_attach_schedule 
		@job_id = @LS_BackupJobId 
		,@schedule_id = @LS_BackUpScheduleID  

EXEC msdb.dbo.sp_update_job 
		@job_id = @LS_BackupJobId 
		,@enabled = 1 


END 


EXEC master.dbo.sp_add_log_shipping_primary_secondary 
		@primary_database = N'Practice2017' 
		,@secondary_server = N'EPG-KIGIRI\I2019' 
		,@secondary_database = N'Practice2017' 
		,@overwrite = 1 

-- ****** End: Script to be run on the primary: [EPG-KIGIRI\I2017] ******


-- Execute the following statements on the secondary to configure log shipping 
-- for database [EPG-KIGIRI\I2019].[Practice2017],
-- the script to be run on the secondary in the context of the [msdb] database. 
------------------------------------------------------------------------------------- 
-- Adding the log shipping configuration 

-- ****** Begin: Script to be run on the secondary: [EPG-KIGIRI\I2019] ******


DECLARE @LS_Secondary__CopyJobId	AS uniqueidentifier 
DECLARE @LS_Secondary__RestoreJobId	AS uniqueidentifier 
DECLARE @LS_Secondary__SecondaryId	AS uniqueidentifier 
DECLARE @LS_Add_RetCode	As int 


EXEC @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary 
		@primary_server = N'EPG-KIGIRI\I2017' 
		,@primary_database = N'Practice2017' 
		,@backup_source_directory = N'\\Epg-kigiri\g$\Backup\LogShip\' 
		,@backup_destination_directory = N'G:\Backup\LogShipCopy\' 
		,@copy_job_name = N'LSCopy_EPG-KIGIRI\I2017_Practice2017' 
		,@restore_job_name = N'LSRestore_EPG-KIGIRI\I2017_Practice2017' 
		,@file_retention_period = 1440 
		,@monitor_server = N'EPG-KIGIRI\I2017' 
		,@monitor_server_security_mode = 1 
		,@overwrite = 1 
		,@copy_job_id = @LS_Secondary__CopyJobId OUTPUT 
		,@restore_job_id = @LS_Secondary__RestoreJobId OUTPUT 
		,@secondary_id = @LS_Secondary__SecondaryId OUTPUT 

IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) 
BEGIN 

DECLARE @LS_SecondaryCopyJobScheduleUID	As uniqueidentifier 
DECLARE @LS_SecondaryCopyJobScheduleID	AS int 


EXEC msdb.dbo.sp_add_schedule 
		@schedule_name =N'DefaultCopyJobSchedule' 
		,@enabled = 1 
		,@freq_type = 4 
		,@freq_interval = 1 
		,@freq_subday_type = 4 
		,@freq_subday_interval = 15 
		,@freq_recurrence_factor = 0 
		,@active_start_date = 20190114 
		,@active_end_date = 99991231 
		,@active_start_time = 0 
		,@active_end_time = 235900 
		,@schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT 
		,@schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT 

EXEC msdb.dbo.sp_attach_schedule 
		@job_id = @LS_Secondary__CopyJobId 
		,@schedule_id = @LS_SecondaryCopyJobScheduleID  

DECLARE @LS_SecondaryRestoreJobScheduleUID	As uniqueidentifier 
DECLARE @LS_SecondaryRestoreJobScheduleID	AS int 


EXEC msdb.dbo.sp_add_schedule 
		@schedule_name =N'DefaultRestoreJobSchedule' 
		,@enabled = 1 
		,@freq_type = 4 
		,@freq_interval = 1 
		,@freq_subday_type = 4 
		,@freq_subday_interval = 15 
		,@freq_recurrence_factor = 0 
		,@active_start_date = 20190114 
		,@active_end_date = 99991231 
		,@active_start_time = 0 
		,@active_end_time = 235900 
		,@schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT 
		,@schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT 

EXEC msdb.dbo.sp_attach_schedule 
		@job_id = @LS_Secondary__RestoreJobId 
		,@schedule_id = @LS_SecondaryRestoreJobScheduleID  


END 


DECLARE @LS_Add_RetCode2	As int 


IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) 
BEGIN 

EXEC @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database 
		@secondary_database = N'Practice2017' 
		,@primary_server = N'EPG-KIGIRI\I2017' 
		,@primary_database = N'Practice2017' 
		,@restore_delay = 0 
		,@restore_mode = 0 
		,@disconnect_users	= 0 
		,@restore_threshold = 45   
		,@threshold_alert_enabled = 1 
		,@history_retention_period	= 2880 
		,@overwrite = 1 

END 


IF (@@error = 0 AND @LS_Add_RetCode = 0) 
BEGIN 

EXEC msdb.dbo.sp_update_job 
		@job_id = @LS_Secondary__CopyJobId 
		,@enabled = 1 

EXEC msdb.dbo.sp_update_job 
		@job_id = @LS_Secondary__RestoreJobId 
		,@enabled = 1 

END 


-- ****** End: Script to be run on the secondary: [EPG-KIGIRI\I2019] ******

[/ mở rộng]

Các công việc sao lưu, sao chép và khôi phục được lên lịch chạy năm phút một lần và bất cứ khi nào điều này xảy ra, công cụ cơ sở dữ liệu cũng ghi một mục vào nhật ký lỗi. Điều này có thể được coi là thừa, vì chúng tôi có thể dễ dàng theo dõi các bản sao lưu nhật ký bằng lịch sử công việc SQL Agent.

Hình. 2 Nhật ký Vận chuyển Các mục nhập sao lưu trong Nhật ký Lỗi SQL

Bật cờ theo dõi 3226

Thông thường, chúng tôi có thể bật cờ theo dõi cho kết nối hiện tại hoặc trên toàn cầu. Chúng ta có thể sử dụng T-SQL để kích hoạt cờ theo dõi hoặc triển khai cờ theo dõi trong các tham số khởi động SQL Server. Bạn nên sử dụng phương pháp tham số khởi động để bật cờ theo dõi mà bạn muốn áp dụng cho phiên bản. Để áp dụng cờ theo dõi 3226 trong tham số khởi động SQL Server, hãy làm theo các bước sau:

  1. Chạy Trình quản lý cấu hình SQL Server với tư cách là Quản trị viên

Hình. 3 Chạy Trình quản lý cấu hình SQL Server với tư cách là Quản trị viên

  1. Nhấp chuột phải vào phiên bản mong muốn và nhấp vào Thuộc tính .

Hình. 4 Thuộc tính Phiên bản Mở

  1. Chọn Tham số Khởi động

Hình. 5 Tham số Khởi động

  1. Trong hộp văn bản có nhãn Chỉ định tham số khởi động , nhập –T3226 và nhấp vào Thêm .

Hình. 6 Thêm cờ theo dõi 3226 làm thông số khởi động

  1. Một lần –T3226 đã được thêm vào danh sách Thông số hiện có , nhấp vào OK .

-- Listing 2: Enable a Trace Flag

-- Turn on a trace flag for the current connection
DBCC TRACEON (3205);  
GO 

-- Turn on a trace flag globally
DBCC TRACEON (3205, -1);  
GO

Nhật ký lỗi SQL Server cho thấy rằng cờ theo dõi được bật khi khởi động. (Xem Hình 8)

Hình. 8 Tham số khởi động được chỉ ra trong nhật ký lỗi SQL Server

Xem kết quả

Sau khi xác nhận rằng cờ theo dõi đang hoạt động, chúng tôi phát hiện ra rằng nhật ký lỗi SQL Server không còn ghi các bản sao lưu nhật ký liên quan đến vận chuyển nhật ký (hoặc bất kỳ sao lưu nhật ký nào khác) vào nhật ký lỗi. Hãy chú ý đến Hình 9 cho thấy rằng tất cả các bản sao lưu nhật ký được lưu trữ trong lịch sử công việc sao lưu không được ghi vào nhật ký lỗi. Điều này phù hợp với điểm mà chúng tôi đã bật cờ theo dõi 3226 (khoảng 8:15 tối).

Hình. 9 Không có bản sao lưu nhật ký nào được ghi trong nhật ký lỗi máy chủ SQL

Nếu chúng tôi cũng bật cờ theo dõi 3226 trên phiên bản phụ EPG-KIGIRI \ I2019, chúng tôi thấy rằng các hoạt động khôi phục nhật ký cũng không còn được ghi vào nhật ký lỗi vì chúng tôi đã bật cờ theo dõi 3226 trên phiên bản phụ vào khoảng 8:30 tối. (Xem Hình 10)

Kết luận

Trong bài viết này, chúng tôi đã trình bày cách chúng tôi có thể sử dụng cờ theo dõi 3226 để ngăn ghi nhật ký sao lưu nhật ký giao dịch trên phiên bản chính và nhật ký giao dịch khôi phục cài đặt vận chuyển nhật ký trên phiên bản phụ. Điều này sẽ rất hữu ích để tránh việc ghi nhật ký không cần thiết có thể “ẩn” các vấn đề thực sự xuất hiện trong nhật ký lỗi.

Tài liệu tham khảo

Các cờ theo dõi DBCC theo dõi


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các lệnh SQL được phân loại như thế nào | UBIQ

  2. Kết nối với Vertica trong IRI Workbench

  3. Tìm kiếm các giá trị riêng biệt một cách nhanh chóng

  4. 7 công việc hàng đầu yêu cầu SQL

  5. Điều tra lỗi ORA 02063 DG4ODBC