Как я могу использовать bcp.exe в функции Azure - PullRequest
0 голосов
/ 19 октября 2018

Моя цель - сделать резервную копию данных из базы данных SQL Azure в хранилище BLOB-объектов Azure с помощью функции Azure.

Я могу использовать bcp как на локальном компьютере, так и на портале Azure (приложение-функция).Но мне не удалось позвонить после публикации в приложении-функции Azure

SampleCode: -

[FunctionName("Function1")]
    public static IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequest req, TraceWriter log)
    {
        string filePath = "filePatch";
        string FileName = "filaName";
        string arg = @"database.scheme.table out table.txt -c -S tcp:testingServer -UUserName -PPassword";

        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        FileName = "bcp";
        startInfo.FileName = FileName;
        startInfo.Arguments = arg;
        process.StartInfo = startInfo;
        process.Start();

        process.WaitForExit();

        //upload to blob storage
        var storageAccount = CloudStorageAccount.Parse("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
        var blobClient = storageAccount.CreateCloudBlobClient();
        var container = blobClient.GetContainerReference("container");
        var blob = container.GetBlockBlobReference("table");

        blob.UploadFromFileAsync(filePath);
        return (ActionResult)new OkObjectResult("Return result");
    }

Журнал ошибок: -

  • bcpSystem.ComponentModel.Win32Exception (2): Система не может найти указанный файл
  • в System.Diagnostics.Process.StartWithCreateProcess (ProcessStartInfo startInfo)
  • в System.Diagnostics.Process.Start ()

Подвопрос: -

  1. Может ли bcp напрямую копировать данные в хранилище BLOB-объектов Azure?

Заранее спасибо !!

1 Ответ

0 голосов
/ 19 октября 2018

Я предлагаю использовать PowerShell вместо bcp для резервного копирования баз данных SQL Azure и использовать запланированную функцию Azure для выполнения сценария PowerShell, который будет выполнять резервное копирование.

Ниже приведен пример сценария PowerShell:

$subcriptionId = "******"
$resourceGroupName = "project-tra-rg"

#Sql server and target database
$ServerName = "tra-sql-srv"
$DatabaseName = "tra-db"

#target storage informations
$StorageKeytype = "StorageAccessKey"
$StorageKey = "******"
$storageUriTarget = "https://trastorageac.blob.core.windows.net/backup"

#sql credentials
$pwdClear = "******"
$userName = "admin-tra"
$pwd = ConvertTo-SecureString $pwdClear -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ($userName, $pwd)

#Backup naming logic
$bacpactName = "{0:yyyy-MM-dd}.bacpac" -f (get-date)
$uriTarget = $storageUriTarget + '/' + $DatabaseName + '-' + $bacpactName

Login-AzureRmAccount -SubscriptionId $subcriptionId

$exportRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $DatabaseName -StorageKeytype $StorageKeytype -StorageKey $StorageKey -StorageUri $uriTarget -AdministratorLogin $creds.UserName -AdministratorLoginPassword $creds.Password

while ($exportRequest.Status -eq "InProgress")
{
   $exportRequest = Get-AzureRmSqlDatabaseImportExportStatus -
   OperationStatusLink $exportRequest.OperationStatusLink
   [Console]::Write(" Export in progress..")
   Start-Sleep -s 10
}

if ($exportRequest.Status -eq "Succeeded")
{
   [Console]::Write(" Export done")
}

Эта статья предоставит вам более подробную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...