1. ホーム
  2. データベース
  3. エムエスエル

SQL Server 2019 データベースバックアップ&リストアスクリプト(一括バックアップ)

2022-01-05 21:17:33

序文 最近、会社のサーバーの有効期限が切れて、データを移行する必要があり、データベースは、グラフィカルインターフェースを通じて、1つのバックアップ時間のコストは非常に大きいので、実行するSQLスクリプトを書くことを考える多くの、面倒なに属しています。

開始

  • データベースのシングルバックアップ
  • データベース一括バックアップ
  • データベースのリストア
  • データベースリストアエラーレポート問題ログ
  • 概要

1. データベースの単独バックアップ

グラフィカルインターフェースのバックアップはここでは表示されませんが、自分で行うことができます。

USE MASTER
IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[BackupDataProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
DROP PROCEDURE BackupDataProc
go
create proc BackupDataProc
@FullName Varchar(200) - the entry (database name)
as
begin
Declare @FileFlag varchar(50)
Set @FileFlag='C:\myfile\database\'+@FullName+'.bak'--which path to backup to (C:\myfile\database\) according to your needs
BackUp DataBase @FullName To Disk=@FileFlag with init--core code
end

exec BackupDataProc xxx

正常に実行されると、以下のように指定したフォルダに.bakファイルが生成されます。

2. データベース一括バックアップ(少し時間がかかりますので、お待ちください。)

USE MASTER
if exists(SELECT * FROM sys.types WHERE name = 'AllDatabasesNameType')
drop type AllDatabasesNameType
go
create type AllDatabasesNameType as table - custom table type for storing database names
(
rowNum int ,
name nvarchar(60),
filename nvarchar(300)
)
go
IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[BachBackupDataProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
DROP PROCEDURE BachBackupDataProc
go
create proc BachBackupDataProc
@filePath nvarchar(300) - input, the destination path for the backup
as
begin
Declare @AllDatabasesName as AllDatabasesNameType - the name of the database used to store the system
Declare @i int -- loop variable
insert into @AllDatabasesName(name,filename,rowNum) select name,filename,ROW_NUMBER() over(order by name) as rowNum from sysdatabases where name not in('master','tempdb','model','msdb') --assign value
set @i =1
--loop backup database
while @i <= (select COUNT(*) from @AllDatabasesName)
begin
Declare @FileFlag varchar(500)
Declare @FullName varchar(50)
Select @FullName =name from @AllDatabasesName where rowNum = @i
Set @FileFlag=@filePath+@FullName+'.bak'
BackUp DataBase @FullName To Disk=@FileFlag with init
set @i = @i + 1
end
end

exec BachBackupDataProc 'C:\myfile\database\'

実行結果は、以下の画像のようになります。

3. データベースの復元

IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[ReductionProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
DROP PROCEDURE ReductionProc
go
create proc ReductionProc
@Name nvarchar(200)--input database name
as
begin
Declare @DiskName nvarchar(500)
Declare @FileLogName nvarchar(100)
Declare @FileFlagData nvarchar(500)
Declare @FileFlagLog nvarchar(500)
Set @FileLogName = @Name + '_log'
Set @DiskName = 'C:\myfile\database\'+@Name+'.bak' ---(source) backup file path
Set @FileFlagData='C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\'+@Name+'.mdf' ---(target) Specify the data file path
Set @FileFlagLog='C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\'+@FileLogName+'.ldf'---(target) Specify the log file path
RESTORE DATABASE @Name - for the name of the library to be restored
FROM DISK = @DiskName --- the name of the backup file
WITH MOVE @Name TO @FileFlagData, ---specify data file path
MOVE @FileLogName TO @FileFlagLog, --- Specify log file path
STATS = 10, REPLACE
end
go

exec ReductionProc xxx



実行後、ライブラリは復元されます(私はこれら3つのライブラリでテストしています、スクリーンショットはあまり変わらないかもしれません、試してみてください)。

4. データベース復元エラー報告問題ログ

もちろん、リストアの過程で次のような問題に遭遇することもあります。

1. バージョンの違い
2. SQL Sql 論理ファイル 'XXXXXX ' はデータベース 'YYY' の一部ではありません。RESTORE FILELISTONLY を使用して、論理ファイル名をリストしてください。

私はバージョンを試してみました、上位バージョンは下位互換性がありますが、下位バージョンは上位互換性がありません、あなたは解決するためにバージョンを統一することができます(あなたがより良い解決策を持っている場合は、迷惑を歓迎します)。
2つ目の問題は、スクリプト 'MOVE' が論理名しか追えないことで、データベース名ではない論理名を持つデータベースもあるため、置き換える必要があります。

以下は、データベースの論理名を問い合わせるsql文です。

USE MASTER
restore filelistonly from disk='D:\sql201database\Sence.bak'--change the path according to your needs


このように

論理名がデータベース名と一致しない場合は、別途取り出して、以下のように再実装することができます。

USE MASTER -- use MASTER here to avoid having the database to be restored occupied
RESTORE DATABASE Sence -- for the name of the library to be restored
FROM DISK = 'D:\sql201database\Sence.bak' --- backup file name
WITH MOVE 'Sence_Guangxi' TO 'D:\Database\Data\Sence.mdf', --- specify the path to the data file
MOVE 'Sence_Guangxi_log' TO 'D:\Database\Data\Sence_log.ldf', --- Specify the path to the log file
STATS = 10, REPLACE
GO



5. 概要

データは貴重であり、データベースを運用する上でバックアップは必須である。
データは貴重であり、データベースを運用する上でバックアップは必須です。
データは貴重であり、データベースを運用する上でバックアップは必須です。(大事なことは3回言う)。

SQL Server 2019データベースのバックアップと復元スクリプトに関するこの記事では、データベースは、このに導入され、より関連するSQL Server 2019データベースのバックアップと復元スクリプト、データベースは、スクリプト家の前の記事を検索してくださいバッチバックアップのコンテンツをすることができますまたは次の関連記事を閲覧し続け、あなたは将来的に多くのスクリプト家をサポートしている願っています!.