我正在尝试自动化我的SQL数据库备份过程。我的目标是使用Cloudberry Powershell cmdlet直接控制和访问我的S3桶。我可以手动完成此操作,但无法使SQL作业使用此操作。
根据Cloudberry的安装说明,如果Powershell已经安装,我就不必注册Cloudberry 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\SYSTEM。作业步骤在PowerShell脚本的第1行接收到一个错误。对应的行是‘Add CloudBerryLab.Explorer.PSSnapIn’。更正脚本并重新安排作业。PowerShell返回的错误信息是:‘Add’这个术语不能识别为cmdlet、函数、脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后再试一次。‘。进程退出代码-1。这个步骤失败了。
我在这篇博客文章中读到,SQLPS.exe不能执行‘Add’命令?这是真的吗?我找不到任何关于这个问题的澄清..。
如何将我的SQL备份文件自动化到Amazon云?我什么都试过了。TNT大道简直是浪费时间。我希望Cloudberry能做到,有什么建议吗?
发布于 2011-12-14 07:41:30
您可以使用Amazon .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"
}https://stackoverflow.com/questions/8494484
复制相似问题