web-dev-qa-db-ja.com

Azure Automationを使用してストアドプロシージャを実行するにはどうすればよいですか?

私はAzureプラットフォームに本当に慣れていないので、これはばかげた質問かもしれませんが、このトピックに関する情報を見つけることができませんでした。私は本当にこれについて助けが必要です。大学のプロジェクトでWebサービスが使用するデータベースを展開しています。このデータベースにはストアドプロシージャがあり、毎日実行する必要があります。

Azure Automationを使用すると、この種のアクションをプログラムまたはスケジュールできることがわかりました。サービスを「インストール」し、「Runbook」を作成しようとしていますが、PowerShellをあまり使用したことがないため、ここでコーディングする方法や内容がわかりません。

提供された助けはありがたいです。前もって感謝します!

編集1:

だから私はこのコードを使って魔法を作ろうとしています:

 workflow WORKFLOW_NAME
{ 
    param( 

    ) 


    inlinescript { 
        # Define the connection to the SQL Database 
        $Conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=SERVER_NAME.database.windows.net;Initial Catalog=DATABASE_NAME;Integrated Security=False;User ID=USERNAME;Password=PASSWORD;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False") 

        # Open the SQL connection 
        $Conn.Open() 

        # Define the SQL command to run. 
        $Cmd=new-object system.Data.SqlClient.SqlCommand("exec PROCEDURE_NAME", $Conn) 
        $Cmd.CommandTimeout=120 

        # Execute the SQL command 
        $Da=New-Object system.Data.SqlClient.SqlDataAdapter($Cmd) 

        # Close the SQL connection 
        $Conn.Close() 
    } 
}

RunBookを保存して公開すると、エラーはないと表示されます。 RunBookを実行すると、エラーや例外の送信が開始および終了しないため、正しく機能したと期待できますか?しかし、データベースを参照すると、プロシージャが変更する予定のテーブルに変更はありません。これのエラーは何でしょうか?私は何が間違っているのですか?

https://gallery.technet.Microsoft.com/scriptcenter/How-to-use-a-SQL-Command-be77f9d2#content から参照コードを取得し、パーソナライズして、 「param」は、RunBookの起動時にエントリパラメータを要求されなかったため、完全な接続文字列を使用することにしました。私はc#プロジェクトと同じ接続文字列を使用しています。これは接続して完全に機能します。

私は「新しい」Azureインターフェイスを使用していますが、これがこの点で重要であるかどうかはわかりません。

繰り返しになりますが、ご協力いただきありがとうございます。

11
Mario Puglisi

問題の核心を見つけました。コードは正常に機能します。問題は、Azure Automation内で間違ったタイプのRunBookを使用していたことでした。したがって、単純なPowerShellではなくワークフローPowerShellを実行していることを確認してください。

質問に投稿したコードは機能しますが、ここに提供されている例を使用して、コードが何を作成したかを理解するためのより良い方法を見つけました: https://Azure.Microsoft.com/en-us/blog/Azure- Automation-your-sql-agent-in-the-cloud / (@ Joseph Idziorekに感謝)

これは私がしたのと同じ問題に遭遇した人のための作業コードです:

workflow NAME-OF-YOUR-WORKFLOW
{
    Write-Output "JOB START BEFORE INLINESCRIPT"

    inlinescript
    {
        Write-Output "JOB START"
        # Create connection to Master DB
        $MasterDatabaseConnection = New-Object System.Data.SqlClient.SqlConnection
        $MasterDatabaseConnection.ConnectionString = "Data Source=YOUR-DATABASE-SERVER-NAME.database.windows.net;Initial Catalog=YOUR-DATABASE-NAME;Integrated Security=False;User ID=YOUR-DATABASE-USERNAME;Password=YOUR-DATABASE-PASSWORD;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False"
        $MasterDatabaseConnection.Open()

        Write-Output "CONNECTION OPEN"

        # Create command
        $MasterDatabaseCommand = New-Object System.Data.SqlClient.SqlCommand
        $MasterDatabaseCommand.Connection = $MasterDatabaseConnection
        $MasterDatabaseCommand.CommandText = "YOUR-PROCEDURE-NAME"

        Write-Output "DATABASE COMMAND TEXT ASSIGNED"

        # Execute the query
        $MasterDatabaseCommand.ExecuteNonQuery()

        Write-Output "EXECUTING QUERY"

        # Close connection to Master DB
        $MasterDatabaseConnection.Close() 

        Write-Output "CONNECTION CLOSED"
    }    
    Write-Output "WORK END - AFTER INLINESCRIPT"
}

コードのどの部分が機能しているか、および各実行後にすべてが機能したかどうかを確認する場合、書き込み出力はオプションです。

7
Mario Puglisi

次の記事とそれに続くサンプルコードは、AzureAutomationからAzureSQLデータベースに対してPowerShellコードを実行するための良い出発点となるはずです。 https://Azure.Microsoft.com/en-us/blog/Azure-automation- your-sql-agent-in-the-cloud /

0
Joseph Idziorek