SQL 如果版本允许,用于压缩数据库备份的脚本
SQL Script to compress database backups if version allows it
我目前使用一个非常基本的备份脚本将我的 SQL 数据库备份到给定目录,用 Winrar 压缩。
我希望在 Winrar 之前使用 SQL 压缩命令(目前已注释掉)如果 SQL 脚本所使用的版本是 SQL 标准或更高。
这是我当前的脚本:
Declare @backupPath nvarchar(1000);
set @backupPath = 'C:\Backups\Auto\';
Declare @fileName nvarchar(100);
Declare @currentDate datetime
Declare @fullPath nvarchar(1000);
Declare @databaseName nvarchar(100);
set @databaseName = 'Database_name';
-- Do not change these values
set @currentDate = GETDATE();
set @fileName = @databaseName + '_' + REPLACE(REPLACE(REPLACE((CONVERT(nvarchar(24), GETDATE(), 120)), ':', ''),' ', ''),'-', '') + '.bak'
set @fullPath = @backupPath + @fileName;
print 'adding device ' + @fileName
EXEC sp_addumpdevice 'disk', @fileName, @fullPath;
BACKUP database @databaseName to @fileName --WITH COMPRESSION
print 'dropping device ' + @fileName
EXEC sp_dropdevice @fileName
我希望脚本检查 version/edition,然后如果 Version/Edition 是标准或更高,则 运行 WITH COMPRESSION 命令。
没有检查任何东西。如果支持压缩compress,如果不支持则报错然后正常备份。
BEGIN TRY
BACKUP DATABASE @databaseName TO DISK = @filename WITH COMPRESSION;
END TRY
BEGIN CATCH
BACKUP DATABASE @databaseName TO DISK = @filename;
END CATCH
这可能不完整,但我想你会明白要点:
DECLARE @databaseName nvarchar(100)
DECLARE @fileName nvarchar(100)
DECLARE @serverEdition int;
DECLARE @useCompression bit;
SELECT @serverEdition = Cast(SERVERPROPERTY('EditionID') as int);
-- Reference:
IF @serverEdition IN (
1804890536, -- Enterprise
610778273, -- Enterprise Eval
-1534726760 -- Standard
)
BEGIN
useCompression = 1; -- Supports compression
END
if @useCompression
BEGIN
BACKUP database @databaseName to @fileName WITH COMPRESSION;
END
ELSE
BEGIN
BACKUP database @databaseName to @fileName;
END
IF (CASE WHEN CAST(SERVERPROPERTY('Edition') AS VARCHAR(100)) LIKE '%Enterprise%' THEN 1 ELSE 0 END
+ CASE WHEN SERVERPROPERTY('EngineEdition') = 3 THEN 1 ELSE 0 END = 2)
BEGIN
BACKUP database @databaseName to @fileName WITH COMPRESSION
END
ELSE
BEGIN
BACKUP database @databaseName to @fileName
END
我目前使用一个非常基本的备份脚本将我的 SQL 数据库备份到给定目录,用 Winrar 压缩。
我希望在 Winrar 之前使用 SQL 压缩命令(目前已注释掉)如果 SQL 脚本所使用的版本是 SQL 标准或更高。
这是我当前的脚本:
Declare @backupPath nvarchar(1000);
set @backupPath = 'C:\Backups\Auto\';
Declare @fileName nvarchar(100);
Declare @currentDate datetime
Declare @fullPath nvarchar(1000);
Declare @databaseName nvarchar(100);
set @databaseName = 'Database_name';
-- Do not change these values
set @currentDate = GETDATE();
set @fileName = @databaseName + '_' + REPLACE(REPLACE(REPLACE((CONVERT(nvarchar(24), GETDATE(), 120)), ':', ''),' ', ''),'-', '') + '.bak'
set @fullPath = @backupPath + @fileName;
print 'adding device ' + @fileName
EXEC sp_addumpdevice 'disk', @fileName, @fullPath;
BACKUP database @databaseName to @fileName --WITH COMPRESSION
print 'dropping device ' + @fileName
EXEC sp_dropdevice @fileName
我希望脚本检查 version/edition,然后如果 Version/Edition 是标准或更高,则 运行 WITH COMPRESSION 命令。
没有检查任何东西。如果支持压缩compress,如果不支持则报错然后正常备份。
BEGIN TRY
BACKUP DATABASE @databaseName TO DISK = @filename WITH COMPRESSION;
END TRY
BEGIN CATCH
BACKUP DATABASE @databaseName TO DISK = @filename;
END CATCH
这可能不完整,但我想你会明白要点:
DECLARE @databaseName nvarchar(100)
DECLARE @fileName nvarchar(100)
DECLARE @serverEdition int;
DECLARE @useCompression bit;
SELECT @serverEdition = Cast(SERVERPROPERTY('EditionID') as int);
-- Reference:
IF @serverEdition IN (
1804890536, -- Enterprise
610778273, -- Enterprise Eval
-1534726760 -- Standard
)
BEGIN
useCompression = 1; -- Supports compression
END
if @useCompression
BEGIN
BACKUP database @databaseName to @fileName WITH COMPRESSION;
END
ELSE
BEGIN
BACKUP database @databaseName to @fileName;
END
IF (CASE WHEN CAST(SERVERPROPERTY('Edition') AS VARCHAR(100)) LIKE '%Enterprise%' THEN 1 ELSE 0 END
+ CASE WHEN SERVERPROPERTY('EngineEdition') = 3 THEN 1 ELSE 0 END = 2)
BEGIN
BACKUP database @databaseName to @fileName WITH COMPRESSION
END
ELSE
BEGIN
BACKUP database @databaseName to @fileName
END