SQL Server 데이터베이스를 백업하기위한 간단한 명령 줄 프로그램 또는 스크립트는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/122690

문제

내부 서버에서 DB 백업을 수행하는 데 너무 느슨했습니다.

SQL Server 2005에서 특정 데이터베이스를 백업하는 데 사용할 수있는 간단한 명령 줄 프로그램이 있습니까? 아니면 간단한 vbscript가 있습니까?

도움이 되었습니까?

해결책

명령 줄에서 단일 데이터베이스를 백업하려면 사용 OSQL 또는 SQLCMD.

"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe" 
    -E -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak' WITH FORMAT"

또한 문서를 읽고 싶을 것입니다 지원 그리고 복원하다 그리고 일반적인 절차.

다른 팁

나는 사용한다 표현 메인.

예를 들어 모든 사용자 데이터베이스를 백업하려면 다음과 같습니다.

C:\>ExpressMaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -BU HOURS -BV 1 -B c:\backupdir\ -DS

모든 데이터베이스를 백업하려면 다음을 예약하십시오.

Use Master

Declare @ToExecute VarChar(8000)

Select @ToExecute = Coalesce(@ToExecute + 'Backup Database ' + [Name] + ' To Disk =     ''D:\Backups\Databases\' + [Name]   + '.bak'' With Format;' + char(13),'')
From
Master..Sysdatabases
Where
[Name] Not In ('tempdb')
and databasepropertyex ([Name],'Status') = 'online'

Execute(@ToExecute)

내 블로그에 자세한 내용이 있습니다. SQL Server Express 백업을 자동화합니다.

Microsoft 지원 페이지에서 이것을 찾았습니다 http://support.microsoft.com/kb/2019698.

잘 작동합니다! 그리고 그것이 마이크로 소프트에서 왔기 때문에, 나는 그것이 합법적 인 것 같습니다.

기본적으로 두 단계가 있습니다.

  1. 마스터 DB에 저장된 절차를 만듭니다. MSFT 링크를 참조하거나 여기에서 시도해 보는 경우 : 여기에서 시도해보십시오. http://pastebin.com/svrlkqnq
  2. 작업 스케줄러에서 백업을 예약하십시오. 먼저 .bat 또는 .cmd 파일에 넣은 다음 해당 파일을 예약 할 수 있습니다.

    sqlcmd -S YOUR_SERVER_NAME\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='C:\SQL_Backup\', @backupType='F'"  1>c:\SQL_Backup\backup.log            
    

분명히 당신의 _server_name을 컴퓨터 이름으로 바꾸거나 선택적으로 시도해보십시오. sqlexpress를 시도하고 백업 폴더가 있는지 확인하십시오. 이 경우 C : SQL_Backup에 넣으려고합니다.

ApexSQL에서 백업 응용 프로그램을 사용할 수 있습니다. GUI 응용 프로그램이지만 CLI에서 지원되는 모든 기능이 있습니다. 일회성 백업 작업을 수행하거나 정기적으로 지정된 데이터베이스를 백업하는 작업을 만들 수 있습니다. 스위치 규칙을 확인하고 기사에서 예를 들어 볼 수 있습니다.

Linux/UNIX 인프라에서 TSQL을 사용하여 MSSQL 데이터베이스에 액세스하고 있습니다. 다음은 테이블을 파일에 버리는 간단한 쉘 스크립트입니다.

#!/usr/bin/ksh
#
#.....
(
tsql -S {database} -U {user} -P {password} <<EOF
select * from {table}
go
quit
EOF
) >{output_file.dump}

–E 스위치가 선언하여 신뢰할 수있는 연결이없는 경우 최종

다음 명령 줄을 사용하십시오

"[program dir]\[sql server version]\Tools\Binn\osql.exe" -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak'" -S [server] –U [login id] -P [password]

어디에

프로그램 dir]는 osql.exe가 존재하는 디렉토리입니다.

On 32bit OS c:\Program Files\Microsoft SQL Server\
On 64bit OS c:\Program Files (x86)\Microsoft SQL Server\

SQL Server 버전] SQL Server 버전 110 또는 100 또는 90 또는 80은 가장 큰 숫자로 시작합니다.

서버] ServerName 또는 Server IP

로그인 ID] MS-SQL Server 사용자 로그인 이름

비밀번호] 필요한 로그인 비밀번호

아래는 데이터베이스 백업을 만드는 간단한 스크립트입니다.

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


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


-- specify filename format
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')  -- exclude these databases


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

이 목적을 위해 정확히 쓴 VB 스크립트를 사용할 수 있습니다.https://github.com/ezrarieben/mssql-backup-vbs/

"작업 스케줄러"에서 작업을 예약하여 원하는대로 스크립트를 실행하면 전체 DB를 BAK 파일로 백업하고 지정할 때마다 저장합니다.

SET NOCOUNT ON;
declare @PATH VARCHAR(200)='D:\MyBackupFolder\'
 -- path where you want to take backups
IF OBJECT_ID('TEMPDB..#back') IS NOT NULL

DROP TABLE #back

CREATE TABLE #back
(
RN INT IDENTITY (1,1),
DatabaseName NVARCHAR(200)

)

INSERT INTO #back 
SELECT       'MyDatabase1'
UNION SELECT 'MyDatabase2'
UNION SELECT 'MyDatabase3'
UNION SELECT 'MyDatabase4'

-- your databases List

DECLARE @COUNT INT =0 ,  @RN INT =1, @SCRIPT NVARCHAR(MAX)='',  @DBNAME VARCHAR(200)

PRINT '---------------------FULL BACKUP SCRIPT-------------------------'+CHAR(10)
SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN

SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.bak'''+CHAR(10)+'WITH COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END

 PRINT '---------------------DIFF BACKUP SCRIPT-------------------------'+CHAR(10)

  SET  @COUNT  =0 SET  @RN  =1 SET @SCRIPT ='' SET @DBNAME =''
 SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN
SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.diff'''+CHAR(10)+'WITH DIFFERENTIAL, COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END

DB 파일을 찾을 수있는 경우 ... "CP DBFILES BACKUP/"

거의 확실합니다 바람직하지 않습니다 대부분의 경우에, 그러나 모든 Getup처럼 간단합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top