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