Как использовать оснастку Cloudberry Powershell (для Amazon S3) из запланированного задания агента SQL? - PullRequest
0 голосов
/ 13 декабря 2011

Я пытаюсь автоматизировать процесс резервного копирования базы данных SQL.Моя цель - использовать командлет Cloudberry Powershell, чтобы дать мне прямой контроль и доступ к моим корзинам S3.Я могу сделать это вручную, но не могу заставить мои задания SQL работать с этим.

В соответствии с инструкциями по установке Cloudberry, мне не нужно было регистрировать оснастку Cloudberry Powershell, если Powershell уже установлен.Я обнаружил, что это неверно.Я попытался зарегистрировать его, как 64-битный, так и 32-битный без удачи.

Это работает, когда выполняется вручную / явно из ISE:

Add-PSSnapin CloudBerryLab.Explorer.PSSnapIn

$today = Get-Date -format "yyyy.MM.dd.HH.mm.ss" 
$key = "mykeygoeshere"
$secret = "mysecretgoeshere"

$s3 = Get-CloudS3Connection -Key $key -Secret $secret
$destination = $s3 | Select-CloudFolder -path "ProductionBackups/MyClient/log/" | Add-CloudFolder $today
$src = Get-CloudFilesystemConnection | Select-CloudFolder "X:\backups\MyClient\current\"
$src | Copy-CloudItem $destination -filter "log.trn"

^ Когда эта командавыполняется в задании агента SQL, он завершается с этим сообщением:

Выполнен как пользователь: DB-MAIN \ SYSTEM.Шаг задания получил ошибку в строке 1 в скрипте PowerShell.Соответствующей строкой является «Add-PSSnapin CloudBerryLab.Explorer.PSSnapIn».Исправьте сценарий и перенесите работу.Информация об ошибке, возвращаемая PowerShell: «Термин« Add-PSSnapin »не распознается как имя командлета, функции, файла сценария или работоспособной программы.Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку.».Код выхода процесса -1.Шаг не выполнен.

Я прочитал в это сообщение в блоге , что SQLPS.exe не может выполнять команды Add-PSSnapin?Это правда?Я не могу найти никаких разъяснений по этому вопросу ...

как я могу автоматизировать свои файлы резервных копий SQL в облаке Amazon S3?Я перепробовал все.TNT Drive была огромной тратой времени.Я надеюсь, что Cloudberry может сделать это, какие-либо советы?

1 Ответ

1 голос
/ 14 декабря 2011

Вы можете использовать Amazon AWS .Net SDK.Вы можете скачать его здесь: http://aws.amazon.com/sdkfornet/

Вот пример функции для загрузки файла из S3:

 function DownloadS3File([string]$bucket, [string]$file, [string]$localFile)
{
if (Test-Path "C:\Program Files (x86)")
{
    Add-Type -Path "C:\Program Files (x86)\AWS SDK for .NET\bin\AWSSDK.dll"
}
else
{
    Add-Type -Path "C:\Program Files\AWS SDK for .NET\bin\AWSSDK.dll"
}

$secretKeyID= $env:AWS_ACCESS_KEY_ID
$secretAccessKeyID= $env:AWS_SECRET_ACCESS_KEY

$client=[Amazon.AWSClientFactory]::CreateAmazonS3Client($secretKeyID,$secretAccessKeyID)

$request = New-Object -TypeName Amazon.S3.Model.GetObjectRequest
$request.BucketName = $bucket
$request.Key = $file
$response = $client.GetObject($request)

$writer = new-object System.IO.FileStream ($localFile ,[system.IO.filemode]::Create)
[byte[]]$buffer = new-object byte[] 4096
[int]$total = [int]$count = 0
do
    {
    $count = $response.ResponseStream.Read($buffer, 0, $buffer.Length)    
    $writer.Write($buffer, 0, $count)
    }
   while ($count -gt 0)

$response.ResponseStream.Close()
$writer.Close() 

echo "File downloaded: $localFile"
}
...