Ola Hallengrens DBバックアップを使用していて、URLパラメーターで機能させようとしています。
私は最初に次のSQLを使用してSQLで共有アクセス資格情報を設定しました
USE MASTER
CREATE CREDENTIAL [https://exampleblob.blob.core.windows.net/backups]
WITH IDENTITY='SHARED ACCESS SIGNATURE'
,SECRET = 'sv=2015-04-05&ss=bf&srt=sco&sp=rwd&se=2030-11-14T20:07:06Z&st=2016-11-13T12:07:06Z&spr=https&sig=KEY'
GO
次に、ログバックアップのメンテナンスプランで次のものを使用してみました。
sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d DBATools -Q \
"EXECUTE [dbo].[DatabaseBackup] \
@Databases = 'USER_DATABASES', \
@BackupType = 'LOG', \
@Verify = 'Y', \
@Compress = 'Y', \
@CheckSum = 'Y', \
@LogToTable = 'Y', \
@ChangeBackupType='Y', \
@url='https://exampleblob.blob.core.windows.net/backups', \
@Credential='https://exampleblob.blob.core.windows.net/backups'" -b
ただし、ジョブを実行すると、次のエラーが発生します
WITH CREDENTIAL構文の使用は、共有アクセス署名を含む資格情報には無効です。
この問題が発生し、SQLServerでメンテナンスプランを作成しました。デフォルトのバックアップ保守計画では、WITH CREDENTIAL
を含むスクリプトが作成されますが、そのデフォルトのタスクを削除すると、スクリプトを機能させることができました。そのため、T-SQLステートメントの実行タスクで次のコードを使用することになりました。
declare @backuptime as varchar(250);
set @backuptime = 'https://youraccountname.blob.core.windows.net/backups/mytestdb_' + CONVERT(VARCHAR(19), GETDATE(), 120) + '.bak';
BACKUP DATABASE yourdb
TO URL = @backuptime
「データベースタスクのバックアップ」のプロパティを開き、「CredentialName」を空に設定すると、プランを保存してジョブを実行することが実際に成功します。
SSMS13.0.16100.1で試してみました