your programing

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

lovepro 2023. 4. 22. 22:36
반응형

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

내부 서버에서 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"

또, 백업restore의 메뉴얼과 일반적인 순서도 참조해 주세요.

Express Maint를 사용합니다.

모든 사용자 데이터베이스를 백업하려면 다음과 같이 하십시오.

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            
    

YOUR_SERVER_NAME을 컴퓨터 이름으로 바꾸거나 필요에 따라 을(를) 시도해 보십시오.\SQLEXPRESS를 사용하여 백업 폴더가 있는지 확인합니다.이 경우 c:\에 삽입하려고 합니다.SQL_백업

Linux/UNIX 인프라스트럭처에서 tsql을 사용하여 MSSQL 데이터베이스에 액세스하고 있습니다.테이블을 파일로 덤프하기 위한 간단한 셸 스크립트를 다음에 나타냅니다.

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

ApexSQL에서 백업 애플리케이션을 사용할 수 있습니다.GUI 어플리케이션이지만 CLI에서 지원되는 모든 기능을 갖추고 있습니다.일회성 백업 작업을 수행하거나 지정된 데이터베이스를 정기적으로 백업하는 작업을 생성할 수 있습니다.다음 문서에서 스위치 규칙 및 검사 결과를 확인할 수 있습니다.

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]

어디에

[program dir]는 osql.exe가 존재하는 디렉토리입니다.

32비트 OS c:\Program Files\Microsoft SQL Server\
64비트 OS c:\Program Files(x86)\Microsoft SQL Server\

[sql server version] SQL 서버 버전 110, 100, 90 또는 80은 가장 큰 숫자로 시작합니다.

[server] 서버 이름 또는 서버 IP

ms-sql 서버 사용자 로그인 이름 [msql id]

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

SQL Express의 모든 사용자 데이터베이스 백업에 대한 Microsoft의 답변은 다음과 같습니다.

이 과정은 다음과 같습니다(아래 참조). 코드를 붙여넣고 실행합니다(아래 참조).데이터베이스 서버에 대한 쿼리로 맨 위에 있는 이상한 주석 없는 행을 코멘트했습니다.즉, 먼저 SQL Server Management Studio를 설치해야 합니다(또는 SSMS를 사용하여 데이터베이스 서버에 연결해야 합니다.이 코드를 실행하면 데이터베이스 서버에 저장 프로시저가 생성됩니다.

저장 프로시저를 실행할 배치 파일을 만든 다음 작업 스케줄러를 사용하여 이 배치 파일의 정기(예: 야간) 실행을 예약합니다.내 코드(작동 가능)는 첫 번째 예제의 약간 수정된 버전입니다.

sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='E:\SQLBackups\', @backupType='F'" 

이건 나한테 효과가 있었고, 난 그게 좋아.실행할 때마다 새 백업 파일이 생성됩니다.오래된 백업 파일을 정기적으로 삭제하는 방법을 고안해야 합니다.이미 이러한 작업을 수행하는 루틴이 있기 때문에 디스크에 며칠 분량의 백업을 보관하고(일반 백업 루틴으로 백업할 수 있는 시간) 삭제하겠습니다.즉, 백업 시스템에서 복원할 필요 없이 항상 며칠 분량의 백업을 사용할 수 있습니다.

Microsoft의 스토어드 프로시저 작성 스크립트를 아래에 붙여넣습니다.

--// Copyright © Microsoft Corporation.  All Rights Reserved.
--// This code released under the terms of the
--// Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)

USE [master] 
GO 

/****** Object:  StoredProcedure [dbo].[sp_BackupDatabases] ******/ 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

 
-- ============================================= 
-- Author: Microsoft 
-- Create date: 2010-02-06
-- Description: Backup Databases for SQLExpress
-- Parameter1: databaseName 
-- Parameter2: backupType F=full, D=differential, L=log
-- Parameter3: backup file location
-- =============================================

CREATE PROCEDURE [dbo].[sp_BackupDatabases]  
            @databaseName sysname = null,
            @backupType CHAR(1),
            @backupLocation nvarchar(200) 
AS 

       SET NOCOUNT ON; 

            DECLARE @DBs TABLE
            (
                  ID int IDENTITY PRIMARY KEY,
                  DBNAME nvarchar(500)
            )
           
             -- Pick out only databases which are online in case ALL databases are chosen to be backed up

             -- If specific database is chosen to be backed up only pick that out from @DBs

            INSERT INTO @DBs (DBNAME)
            SELECT Name FROM master.sys.databases
            where state=0
            AND name=@DatabaseName
            OR @DatabaseName IS NULL
            ORDER BY Name

 
           -- Filter out databases which do not need to backed up
 
           IF @backupType='F'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','AdventureWorks')
                  END
            ELSE IF @backupType='D'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE IF @backupType='L'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE
                  BEGIN
                  RETURN
                  END
           

            -- Declare variables

            DECLARE @BackupName varchar(100)
            DECLARE @BackupFile varchar(100)
            DECLARE @DBNAME varchar(300)
            DECLARE @sqlCommand NVARCHAR(1000) 
        DECLARE @dateTime NVARCHAR(20)
            DECLARE @Loop int                  
                       
            -- Loop through the databases one by one

            SELECT @Loop = min(ID) FROM @DBs
       WHILE @Loop IS NOT NULL
      BEGIN
 
-- Database Names have to be in [dbname] format since some have - or _ in their name

      SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'


-- Set the current date and time n yyyyhhmmss format

      SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/','') + '_' +  REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')  
 

-- Create backup filename in path\filename.extension format for full,diff and log backups

      IF @backupType = 'F'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'D'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_DIFF_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'L'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_LOG_'+ @dateTime+ '.TRN'
 

-- Provide the backup a name for storing in the media

      IF @backupType = 'F'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' full backup for '+ @dateTime

      IF @backupType = 'D'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' differential backup for '+ @dateTime

      IF @backupType = 'L'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' log backup for '+ @dateTime


-- Generate the dynamic SQL command to be executed

       IF @backupType = 'F' 
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
                  END

       IF @backupType = 'D'
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END

       IF @backupType = 'L' 
                  BEGIN
               SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END
 

-- Execute the generated SQL command

       EXEC(@sqlCommand)

 
-- Goto the next database

SELECT @Loop = min(ID) FROM @DBs where ID>@Loop
 

END​

예를 들어 백업 데이터베이스를 사용하고 7zip을 사용하여 압축한 후 백업 파일을 삭제하여 스토리지 관련 문제도 해결합니다.이 예에서는 무료인 7zip을 사용합니다.

@echo off

CLS

echo Running dump ...

sqlcmd -S SERVER\SQLEXPRESS -U username -P password -Q "BACKUP DATABASE master TO DISK='D:\DailyDBBackup\DB_master_%date:~-10,2%%date:~-7,2%%date:~-4,4%.bak'"

echo Zipping ...

"C:\Program Files\7-Zip\7z.exe" a -tzip "D:\DailyDBBackup\DB_master_%date:~-10,2%%date:~-7,2%%date:~-4,4%_%time:~0,2%%time:~3,2%%time:~6,2%.bak.zip" "D:\DailyDBBackup\DB_master_%date:~-10,2%%date:~-7,2%%date:~-4,4%.bak"

echo Deleting the SQL file ...

del "D:\DailyDBBackup\DB_master_%date:~-10,2%%date:~-7,2%%date:~-4,4%.bak"

echo Done!

이것을 sqlbackup.bat로 저장하고 매일 실행되도록 예약합니다.

백업만 수행하려는 경우 압축하거나 삭제하지 않고 스크립트를 생성할 수 있습니다.

이 목적을 위해 작성한 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

이것은 일상 업무에서 도킹된 mssql 컨테이너를 처리할 때 테이블에서 데이터를 빠르게 덤프할 때 유용합니다.특히 db 컨테이너를 자주 재구축하고 재구축 후 테스트 데이터를 손실하고 싶지 않을 때 유용합니다.

Export data using bcp utility
/opt/mssql-tools/bin/bcp <Table_Name> out /tmp/MyData.bcp -d <database_name> -c -U <user_name> -P "<password>" -S <server_name>

Import data using bcp utility

/opt/mssql-tools/bin/bcp <Table_Name> IN /tmp/MyData.bcp -d <database_name> -c -U <user_name> -P "<password>" -S <server_name>

기존의 Windows Shell은 매우 한정되어 있습니다.PowerShell에는 더 많은 기능이 있으며 SQL Server를 사용하기 위한 모듈도 포함되어 있어 작업이 대폭 간소화됩니다.

파워셸

PowerShell에는 SQL Server를 실행하기 위한 cmdlet 세트가 있습니다.간단하게 설치할 수 있습니다.

Install-Module -Name SqlServer

그 후 다음 명령을 사용할 수 있습니다.

온 더 플라이 압축 기능을 사용하여 기본 디렉터리로 데이터베이스를 간단하게 백업합니다.

Backup-SqlDatabase -ServerInstance "." -Database "AdventureWorks" -CompressionOption On

다음 디렉터리에 백업이 생성됩니다.C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup.

백업을 저장할 위치를 지정할 수 있습니다.

Backup-SqlDatabase -ServerInstance "." -Database "MyDB" -BackupFile "C:\Backups\MyDB.bak"

그러나 가장 중요한 것은 모든 데이터베이스의 백업을 한 번에 생성할 수 있다는 것입니다(sqlcmd에서는 어렵습니다).사용.Get-ChildItem데이터베이스 목록은 수신할 수 있으며 즉시 입력에 전달될 수 있습니다.Backup-SqlDatabase명령어를 입력합니다.일반적으로 모든 SQL Server 데이터베이스의 백업은 다음과 같습니다.

Get-ChildItem "SQLSERVER:\SQL\[server-name]\[instance-name]\Databases" | Backup-SqlDatabase -BackupContainer "[backup-path]"

사용 예:

Get-ChildItem "SQLSERVER:\SQL\MSI\DEFAULT\Databases" | Backup-SqlDatabase -BackupContainer "c:\Backups\"

Backup-SqlDatabase에 대해 자세히 알아보기

기타 예시와 옵션

DB 파일을 찾을 수 있다면..."cp DBFiles 백업/"

대부분의 경우 권장하지 않는 것이 확실하지만, 모든 것이 간단하다.

언급URL : https://stackoverflow.com/questions/122690/what-is-a-simple-command-line-program-or-script-to-backup-sql-server-databases

반응형