2012-05-22 7 views
3

특정 위치에 대해 일정한 간격으로 전체 SQL Server (SQL Server 2008 사용)를 백업 할 수있는 방법이 있는지 궁금합니다. 나는 우리가 하나의 특정 데이터베이스를 백업 할 수 있다는 것을 알고 있지만 사용의 용이성과 새로운 데이터베이스를 원할 때마다 백업을 설정할 필요가 없기 때문에 이것을 할 수있는 방법이 있습니까?SQL Server : 모든 데이터베이스 백업

그러나 제가있는 경우, 개별적으로 백업 한 것처럼 서버 백업에서 단일 데이터베이스 만 복원하는 방법이 있어야합니다.

사용 된 방법은 단지 순수한 백업이 될 것이고 차이가 없으므로 합병증에 대해 걱정할 필요가 없습니다.

+0

를 백업하는 것이 좋습니다. – Pondlife

답변

3

다음 스크립트를 실행할 수 있습니다. @path 변수를 데이터베이스를 저장할 위치로 변경하십시오.

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 = 'C:\Backup\' 

SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 

DECLARE db_cursor CURSOR FOR 
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb') 

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 

로부터 획득 :

http://www.mssqltips.com/sqlservertip/1070/simple-script-to-backup-all-sql-server-databases/

+0

이것은 완벽하게 작동했습니다. 감사합니다. – JakeJ

+0

@JakeJ - 당신은 환영합니다 :) –

+0

오, 그래, 많이 묻지 만 어떤 형식 으로든 SQL에서는 훌륭하지가 않아. 나는 MySQL 서버와 동일한 솔루션을 필요로 할 것이다. 이게 효과가 있니? – JakeJ

1

난 당신이 DBA 및/또는 저기 serverfault 사이트에 더 나은 답변을 얻을 것이라고 생각 숨겨진 자원 데이터베이스뿐만 아니라

Use master 
GO 

--enable 
sp_configure 'show advanced options' 
GO 
/* 0 = Disabled , 1 = Enabled */ 
sp_configure 'xp_cmdshell', 1 
GO 
RECONFIGURE WITH OVERRIDE 
GO 


--===Resource file details 
SELECT 'ResourceDB' AS 'Database Name' 
    , NAME AS [Database File] 
    , FILENAME AS [Database File Location] 
FROM sys.sysaltfiles 
    WHERE DBID = 32767 
ORDER BY [Database File] 
GO 

--===Copy resource files 
DECLARE @ResDataFile VARCHAR(1000), @ResLogFile VARCHAR(1000) 
SELECT 
    @ResDataFile = CASE NAME WHEN 'Data' THEN FILENAME ELSE @ResDataFile END, 
    @ResLogFile = CASE NAME WHEN 'Log' THEN FILENAME ELSE @ResLogFile END 
FROM sys.sysaltfiles 
WHERE DBID = 32767 

SELECT @ResDataFile, @ResLogFile 

DECLARE @cmd VARCHAR(1000) 

--===Copy data file 
SELECT @cmd = 'COPY /Y "' + @ResDataFile + '" "G:\SQLBackups"' 
--PRINT @cmd 
EXEC xp_cmdshell @cmd 

--===Copy log file 
SELECT @cmd = 'COPY /Y "' + @ResLogFile + '" "G:\SQLBackups"' 
--PRINT @cmd 
EXEC xp_cmdshell @cmd 

GO 
--Disable 
sp_configure 'show advanced options' 
GO 
/* 0 = Disabled , 1 = Enabled */ 
sp_configure 'xp_cmdshell', 0 
GO 
RECONFIGURE WITH OVERRIDE 
GO