11

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

Azure Automation を使用すると、この種のアクションをプログラムまたはスケジュールできることがわかりました。サービスを「インストール」し、「ランブック」を作成しようとしていますが、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」を削除しました。エントリ パラメータを求められなかったので、完全な接続文字列を使用することにしました。私は自分の C# プロジェクトと同じ接続文字列を使用しています。これは接続して完全に機能します。

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

繰り返しますが、あなたが提供できる助けに感謝します。

4

2 に答える 2

7

問題の核心を突き止めました。コードは問題なく動作します。問題は、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"
}

コードのどの部分が機能しているか、各実行後にすべてが機能しているかどうかを確認する場合は、Write-outputs はオプションです。

于 2016-03-01T06:34:26.770 に答える
0

次の記事とそれに続くサンプル コードは、Azure Automation から Azure SQL Database に対して PowerShell コードを実行するための出発点として適しています: https://azure.microsoft.com/en-us/blog/azure-automation-your-sql-エージェント・イン・ザ・クラウド/

于 2016-02-29T01:52:04.763 に答える