2011-12-13 2 views
0

Я пытаюсь автоматизировать процесс резервного копирования базы данных SQL. Моя цель - использовать командлет Cloudberry Powershell, чтобы дать мне прямой контроль и доступ к моим ведрам S3. Я могу сделать это вручную, но не могу заставить мои задания SQL работать с этим.Как использовать оснастку Cloudberry Powershell (для Amazon 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, он терпит неудачу с этим сообщением:

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

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

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

+2

Похоже, что скрипт запускается как пользователя системы. Вы пытались вручную запустить скрипт в качестве учетной записи системы? Вы можете запустить экземпляр Powershell.exe в качестве системной учетной записи, используя инструмент sysinternals psexec.exe -i -s «C: \ ... \ powershell.exe». Также почему бы не запустить его как запланированную задачу Windows? –

+0

Я закончил работать как запланированная задача Windows, и она работает нормально. Я просто не могу заставить его выполнить из SQL Agent Job. – D3vtr0n

ответ

1

Вы можете использовать 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" 
} 
+0

Это круто, и все, но я пытаюсь понять, как это сделать, используя командлет Cloudberry Powershell. Это проблема с powershell и SQL Agent. Я посмотрел на Amazon .NET SDK, но мой магазин, в котором я работаю, не хочет заново изобретать облачное программное обеспечение. Морошка стоит 40 долларов, и я стоил гораздо больше часа. – D3vtr0n

Смежные вопросы