SQL Server에서 모든 데이터베이스 백업 서버에는 약 250

Microsoft SQL Server 2005 DB 서버가 있습니다. DB 서버에는 약 250 개의 사용자 데이터베이스가 있습니다. 이 모든 데이터베이스를 백업해야합니다. 수동으로 백업을 수행하는 데 많은 시간이 걸리므로 250 개 데이터베이스를 모두 자동으로 백업하는 배치 스크립트 또는 DB 스크립트를 찾고 있습니다. 누구든지 도와주세요.



답변

참고 : 먼저 D:드라이브에 폴더를 만드십시오 . (예를 들어 D:\User_DataBackup\)

1 단계 : 아래에 나와있는 절차를 만듭니다.

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

2 단계 : 위 절차를 실행하십시오.

 EXEC [UserDataBaseBackUp]

이 절차를 예약 할 수도 있습니다. 이 절차가 도움이 되길 바랍니다.


답변

유지 보수 계획 개발

SQL Server에는 스크립트와 작업을 생성 할 수있는이 놀라운 기능이 있습니다.

  • 1 단계 : 아래를
    마우스 오른쪽 버튼으로 클릭Maintenance PlanManagement

  • 2 단계 :
    계획 이름 지정

  • 3 단계 :
    데이터베이스 백업 작업 선택

  • 4 단계 :
    작업 구성, 데이터베이스, 폴더 위치, 백업 유형 (전체, 차등, 트랜잭션 로그) 연결 등을 선택합니다.

  • 5 단계 :
    작업 일정 구성


모든 종류의 문제를 피하기 위해 시스템 데이터베이스사용자 데이터베이스에 대한 별도의 계획을 세우는 것이 좋습니다.

도움이되는 링크 :


답변

SSMS로 많은 데이터베이스를 유지 관리하는 것은 약간 혼란 스러울 수 있다는 사실을 알고 있지만 간단합니다.

Ola Hallengren의 유지 보수 스크립트를 사용하는보다 효과적인 방법을 추천 할 수 있습니다 . 매우 시원하고 매우 효과적입니다. 또한 모든 데이터베이스를 백업하는 것보다 훨씬 많은 작업을 수행 할 수 있으며 모든 유형의 유지 관리 절차를 수행 할 수 있습니다.

예를 들어 다음과 같은 명령을 사용하여 모든 데이터베이스를 백업하고 압축 한 다음 선택한 인증서로 데이터베이스를 암호화 할 수 있습니다 (모두 선택 사항이며 SQL Server 2005에서는 암호화 및 압축이 작동하지 않습니다). Ola의 스크립트의 유연성과 장점을 보여줍니다) :

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

답변

JP의 답변을 연구하면서 대상 디렉토리를 전달하는 매개 변수를 추가했으며 옵션을 추가 할 수도 있습니다.

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

그럼:

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

답변

다음과 같이 SELECT 문 또는 CURSOR를 사용할 수 있습니다.

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

또는

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 

답변

Buck Woody의 PowerShell을 사용하여 모든 사용자 데이터베이스 백업에 표시된대로 PowerShell을 사용할 수도 있습니다 .

# 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)
            }
        }
    }