SQL Server의 여러 데이터베이스 통합 백업

8968 단어 SQL Servertech
이 문서는 거울입니다.최신 정보를 보려면 다음 Qita 문서를 확인하십시오.
https://qiita.com/tfukumori/items/228fc80f79250062bc88

TL;DR

  • SQL Server의 여러 데이터베이스를 통합 백업하는 데 사용되는 T-SQL입니다.마이그레이션할 때 데이터베이스를 통일적으로 백업할 때 사용하려고 합니다.
  • 스크립트 내용 설명

  • SQL Server Management Studio나 BAT 파일 등에서 얻은 sqlcmd.exe에서 스크립트를 실행합니다.
  • D:\IKOU 폴더로 출력하려고 합니다.
  • <인스턴스 이름><데이터베이스 이름 >.데이터베이스로 출력합니다.
  • 온라인 데이터베이스만 백업
  • name NOT IN ('master', 'msdb', 'model', 'tempdb', 'Resource', 'xstoredb') 섹션에서 백업 객체에서 제외할 데이터베이스를 지정합니다.현재 시스템 데이터베이스를 가정합니다.
  • 각본


    SET NOCOUNT ON 
    USE [master] 
    GO 
    DECLARE @name sysname 
    DECLARE @SQL nvarchar(500) 
    DECLARE @BACKUPFILE nvarchar(500) 
    DECLARE @BACKUPNAME nvarchar(500) 
    DECLARE @BACKUPERRORMESSAGE nvarchar(500) 
    DECLARE @INSTANCENAME nvarchar(50) 
    DECLARE @backupSetId as int
    
    SET @INSTANCENAME = convert(nvarchar(50), SERVERPROPERTY('instancename'))
    
    SELECT * INTO [#databases] FROM [sys].[databases] WHERE state_desc <> 'OFFLINE' AND name NOT IN ('master', 'msdb', 'model', 'tempdb', 'Resource', 'xstoredb')
    
    DECLARE [table_cursor] CURSOR FOR 
    SELECT [name] FROM [#databases] 
    
    OPEN [table_cursor] 
    FETCH NEXT FROM [table_cursor] INTO @name 
    
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
        SET @BACKUPFILE = N'D:\IKOU\' + @INSTANCENAME + '_' + @name + '.bak'
    	SET @BACKUPNAME = @name + N' 完全 データベース バックアップ'
    	SET @BACKUPERRORMESSAGE = N'確認に失敗しました。データベース ''' + @name + ''' のバックアップ情報が見つかりません。'
    	SET @SQL = N'BACKUP DATABASE [' + @name + '] TO  DISK = ''' + @BACKUPFILE + ''' WITH NOFORMAT, INIT,  NAME = ''' + @BACKUPNAME + ''', SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10'
    
        EXECUTE sp_executesql @SQL 
    
        select @backupSetId = position from msdb..backupset where database_name=@name and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=@name )
        if @backupSetId is null begin raiserror(@BACKUPERRORMESSAGE, 16, 1) end
        RESTORE VERIFYONLY FROM  DISK = @BACKUPFILE WITH  FILE = @backupSetId,  NOUNLOAD,  NOREWIND
    
        FETCH NEXT FROM [table_cursor] INTO @name 
    END 
    
    CLOSE [table_cursor] 
    DEALLOCATE [table_cursor]
    

    좋은 웹페이지 즐겨찾기