首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在计划的SQL作业中使用Cloudberry Powershell插件(针对亚马逊S3)?

如何在计划的SQL作业中使用Cloudberry Powershell插件(针对亚马逊S3)?
EN

Stack Overflow用户
提问于 2011-12-13 18:46:44
回答 1查看 2.9K关注 0票数 0

我正在尝试自动化我的SQL数据库备份过程。我的目标是使用Cloudberry Powershell cmdlet直接控制和访问我的S3桶。我可以手动完成此操作,但无法使SQL作业使用此操作。

根据Cloudberry的安装说明,如果Powershell已经安装,我就不必注册Cloudberry Powershell快照。我发现那是假的。我试着注册它,64位和32位都没有运气。

这在从ISE手动/显式执行时起作用:

代码语言:javascript
复制
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能做到,有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2011-12-14 07:41:30

您可以使用Amazon .Net SDK。您可以从这里下载:http://aws.amazon.com/sdkfornet/

下面是从S3下载文件的示例函数:

代码语言:javascript
复制
 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"
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8494484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档