Sao lưu tất cả các cơ sở dữ liệu trong SQL Server


13

Tôi có máy chủ Microsoft SQL Server 2005 DB. Trong máy chủ DB, tôi có khoảng 250 cơ sở dữ liệu người dùng. Tôi phải sao lưu tất cả các cơ sở dữ liệu này. Vì, việc sao lưu thủ công tốn rất nhiều thời gian, tôi đang tìm kiếm tập lệnh Batch hoặc tập lệnh DB sẽ tự động sao lưu tất cả 250 cơ sở dữ liệu. Bất cứ ai có thể xin vui lòng giúp đỡ về điều này?

Câu trả lời:


14

Lưu ý: Đầu tiên tạo một thư mục trên D:ổ đĩa. (ví dụ D:\User_DataBackup\)

Bước 1: Tạo một quy trình được đưa ra dưới đây.

Create PROCEDURE [dbo].[UserDataBaseBackUp]
AS

BEGIN
SET NOCOUNT ON;

DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
SET @path = 'D:\User_DataBackup\' -- as same as your created folder' 
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),104)
DECLARE db_cursor CURSOR FOR
  SELECT name
  FROM MASTER.dbo.sysdatabases
  WHERE name NOT IN ('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')
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
END

Bước 2: Thực hiện các thủ tục trên.

 EXEC [UserDataBaseBackUp]

Bạn cũng có thể lên lịch trình thủ tục này. Thủ tục này được thử nghiệm hy vọng nó sẽ giúp.


Làm việc một điều trị, có thể được cải thiện có lẽ bằng cách đi qua trong con đường?
Robin Salih

11

Xây dựng kế hoạch bảo trì

SQL Server có tính năng tuyệt vời này, nơi nó sẽ tạo ra kịch bản và công việc cho bạn

  • Bước 1:
    Nhấp chuột phải vào bên Maintenance PlandướiManagement

    Nhấp chuột phải vào Quản lý

  • Bước 2: Đặt
    tên cho Kế hoạch của bạn

    Đặt tên cho kế hoạch

  • Bước 3:
    Chọn Nhiệm vụ sao lưu cơ sở dữ liệu

    Nhiệm vụ sao lưu cơ sở dữ liệu

  • Bước 4:
    Cấu hình tác vụ, chọn Cơ sở dữ liệu, Vị trí thư mục, Loại sao lưu (Đầy đủ, vi sai, Nhật ký giao dịch), v.v.

    Cấu hình tác vụ sao lưu

  • Bước 5:
    Cấu hình lịch trình công việc

    Cấu hình lịch trình công việc


Tôi khuyên bạn nên có một kế hoạch riêng cho cơ sở dữ liệu hệ thống và cơ sở dữ liệu người dùng của bạn để tránh mọi loại sự cố

Liên kết giúp đỡ:


Lưu ý: Phiên bản Express của SQL Server không cung cấp chức năng Gói bảo trì.
Alan B

8

Tôi biết rằng thực tế là việc duy trì nhiều cơ sở dữ liệu với SSMS có thể hơi khó hiểu, nhưng điều đó rất đơn giản.

Tôi có thể đề xuất một cách hiệu quả hơn, đó là sử dụng tập lệnh bảo trì của Ola Hallengren . Nó rất mát mẻ và rất hiệu quả. Và bạn có thể làm nhiều hơn là chỉ sao lưu tất cả các cơ sở dữ liệu, bạn có thể thực hiện tất cả các loại quy trình bảo trì.

Ví dụ: bạn có thể sao lưu tất cả các cơ sở dữ liệu, nén chúng và mã hóa chúng bằng chứng chỉ bạn chọn, bằng cách sử dụng một lệnh như thế này (và tất cả đều là tùy chọn, mã hóa và nén sẽ không hoạt động trên SQL Server 2005 nhưng tôi nghĩ nó sẽ cho thấy tính linh hoạt và sức mạnh của kịch bản của Ola):

EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES',
@Directory = 'C:\Backup',
@BackupType = 'FULL',
@Compress = 'Y',
@Encrypt = 'Y',
@EncryptionAlgorithm = 'AES_256',
@ServerCertificate = 'MyCertificate'

2

Làm việc dựa trên câu trả lời của JP, tôi đã thêm một tham số để vượt qua thư mục đích (và hoàn toàn có thể thêm nhiều tùy chọn):

Create PROCEDURE [dbo].[UserDataBaseBackUp] (
  @OutputDir varchar(255)
) AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @name VARCHAR(50) -- database name
    DECLARE @path VARCHAR(256) -- path for backup files
    DECLARE @fileName VARCHAR(256) -- filename for backup
    DECLARE @fileDate VARCHAR(20) -- used for file name
    SET @path = @OutputDir
    SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),104)
    PRINT 'Starting Backups'
    DECLARE db_cursor CURSOR FOR
        SELECT name FROM MASTER.dbo.sysdatabases
            WHERE name NOT IN ('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')
        OPEN db_cursor
            FETCH NEXT FROM db_cursor INTO @name
            WHILE @@FETCH_STATUS = 0 BEGIN
                SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
                    PRINT 'Starting Backup For ' + @name
                    BACKUP DATABASE @name TO DISK = @fileName WITH FORMAT
                FETCH NEXT FROM db_cursor INTO @name
            END
        CLOSE db_cursor
    DEALLOCATE db_cursor
    PRINT 'Backups Finished'
END
GO

Vậy thì:

EXEC UserDataBaseBackUp @OutputDir = 'F:\Backups\SQL Databases\'

1

Bạn có thể sử dụng Tuyên bố CHỌN hoặc HIỆN TẠI như thế này:

DECLARE @PathForBackUp VARCHAR(255)
SET @PathForBackUp = 'F:\Backup\User DB\'

SELECT 'BACKUP DATABASE [' + name + '] TO  DISK = N''' + @PathForBackUp + '' + name + '.bak''
WITH NOFORMAT, NOINIT,  NAME = N''' + name + '_FullBackUp'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 5'
FROM sys.databases
WHERE database_id > 4

HOẶC LÀ

DECLARE @DBName VARCHAR(255)  
DECLARE @PathForBackUp VARCHAR(255) 
DECLARE @FileName VARCHAR(255)  
DECLARE @DateFile VARCHAR(255)
DECLARE @SQL NVARCHAR(2048) 
SET @PathForBackUp = 'F:\Backup\User DB\'  
SET @DateFile = REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),120) ,' ','T'), ':','') 

DECLARE BACKUPING CURSOR FOR   
SELECT name  
FROM master.dbo.sysdatabases WHERE dbid > 4 

OPEN BACKUPING    
FETCH NEXT FROM BACKUPING INTO @DBName    
WHILE @@FETCH_STATUS = 0    

BEGIN    
        SET @FileName = @PathForBackUp + @DBName + '_' + @DateFile + '.BAK'  
    SET @SQL = 'BACKUP DATABASE '+@DBName+ ' TO DISK = '''+@FileName+''' WITH COMPRESSION ' 
    PRINT @SQL 
    EXECUTE sp_executesql @sql   
    FETCH NEXT FROM BACKUPING INTO @DBName  

END    

CLOSE BACKUPING    
DEALLOCATE BACKUPING 

-2

Bạn cũng có thể sử dụng PowerShell như trong Sử dụng PowerShell để sao lưu tất cả cơ sở dữ liệu người dùng của Buck Woody:

# Performs a Full backup followed by a transaction log backup on all user databases

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")  | out-null
$s = new-object ('Microsoft.SqlServer.Management.Smo.Server') 'BWOODY1\SQL2K8'
$bkdir = $s.Settings.BackupDirectory
$dbs = $s.Databases
$dbs | foreach-object {
    $db = $_

    if ($db.IsSystemObject -eq $False -and $db.IsMirroringEnabled -eq $False) {
        $dbname = $db.Name
        $dt = get-date -format yyyyMMddHHmmss
        $dbbk = new-object ('Microsoft.SqlServer.Management.Smo.Backup')
        $dbbk.Action = 'Database'
        $dbbk.BackupSetDescription = "Full backup of " + $dbname
        $dbbk.BackupSetName = $dbname + " Backup"
        $dbbk.Database = $dbname
        $dbbk.MediaDescription = "Disk"
        $dbbk.Devices.AddDevice($bkdir + "\" + $dbname + "_db_" + $dt + ".bak", 'File')
        $dbbk.SqlBackup($s)
        if ($db.DatabaseOptions.RecoveryModel -ne 'Simple') {
            $dt = get-date -format yyyyMMddHHmmss
            $dbtrn = new-object ('Microsoft.SqlServer.Management.Smo.Backup')
            $dbtrn.Action = 'Log'
            $dbtrn.BackupSetDescription = "Trans Log backup of " + $dbname
            $dbtrn.BackupSetName = $dbname + " Backup"
            $dbtrn.Database = $dbname
            $dbtrn.MediaDescription = "Disk"
            $dbtrn.Devices.AddDevice($bkdir + "\" + $dbname + "_tlog_" + $dt + ".trn", 'File')
            $dbtrn.SqlBackup($s)
            }
        }     
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.