Tiếp cận Vấn đề  - How to Backup All SQL Server Databases

Việc sử dụng T-SQL để xử lý các công việc lặp đi lặp lại, sẽ giúp bạn giải quyết những thứ có vẻ phức tạp  một cách dễ dàng hơn nhiều hơn bạn nghĩ.

Một trong những nhiệm vụ này có thể là cần sao lưu tất cả cơ sở dữ liệu trên máy chủ của bạn. Server bạn có rất nhiều Database vì lí do backup hệ thống hoặc thay đổi cơ sở hạ tầng nâng cấp thay đổi server.

Trong khi đó máy chủ của bạn có hơn 100 cơ sở dữ liệu trên cùng một phiên bản của SQL Server thì là thế nào để chạy 1 câu lệnh định kì hoặc ngay lập tức lưu chúng lại thành tập hợp các file nhanh nhất.

 

Các xử lý - How to Backup All SQL Server Databases

 Tạo các lệnh sao lưu bằng script SQL, sử dụng con trỏ - cursor. Bạn có thể trỏ qua tất cả các cơ sở dữ liệu của mình để sao lưu từng cái một.  Bạn cũng có thể sử dụng vòng lặp while nếu bạn không muốn sử dụng cursor

 Các bước xử lý - How to Backup All SQL Server Databases

 - Chỉ định đường dẫn để lưu trữ các bản sao database 

- Chỉ định định dạng file và tên file sao lưu

- Chọn danh sách cơ sở dữ liệu để sao lưu

- Lặp qua các database

- Gọi câu lệnh sao lưu cơ sở dữ liệu  

 

Script SQL :

DECLARE @name NVARCHAR(256) -- database name  
DECLARE @path NVARCHAR(512) -- path for backup files  
DECLARE @fileName NVARCHAR(512) -- filename for backup  
DECLARE @fileDate NVARCHAR(40) -- used for file name

-- specify database backup directory
SET @path = 'C:\test\'  

-- specify filename format
SELECT @fileDate = CONVERT(NVARCHAR(20),GETDATE(),112) 

DECLARE db_cursor CURSOR READ_ONLY FOR  
SELECT name 
FROM master.sys.databases 
WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases
AND state = 0 -- database is online
AND is_in_standby = 0 -- database is not read only for log shipping

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   

WHILE @@FETCH_STATUS = 0   
BEGIN   
   SET @fileName = @path + @name + '_' + @fileDate + '.BAK'  
   BACKUP DATABASE @name TO DISK = @fileName  

   FETCH NEXT FROM db_cursor INTO @name   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor

Giải thích code - How to Backup All SQL Server Databases

 Trong tập lệnh này, chúng tôi đang bỏ qua cơ sở dữ liệu hệ thống

WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases

, nhưng chúng cũng có thể dễ dàng được đưa vào.

 

 

Ngoài ra, nếu bạn muốn bỏ qua một số cơ sở dữ liệu người dùng của mình, bạn cũng có thể đưa chúng vào phần KHÔNG VÀO.

 

Link gốc của bài viết:  tại đây