9

Jestem naprawdę nowy na platformie Azure i być może jest to głupie pytanie, ale nie udało mi się znaleźć informacji na ten temat. Naprawdę potrzebuję pomocy w tym. Wdrażam bazę danych używaną przez serwis internetowy dla projektu uniwersyteckiego. W tej bazie danych mam procedurę przechowywaną i trzeba ją uruchamiać codziennie.Jak uruchomić procedurę składowaną za pomocą usługi Azure Automation?

Znaleziono w programie Azure Automation możliwość programowania lub planowania tego rodzaju działań. "Zainstalowałem" usługę i próbuję utworzyć "runbook", ale nie wiem, jak i co tu kodować, ponieważ nigdy nie użyłem tak dużo programu PowerShell.

Każda pomoc udzielona zostanie doceniona. Z góry dziękuję!

EDIT 1:

Więc Próbuję użyć tego kodu, aby Magic:

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() 
    } 
} 

Rzeczą jest, że kiedy zapisać Runbook i publikuje je, to mówi, że nie jest błędy. Kiedy uruchamiam RunBook, zaczyna się i kończy wysyłanie żadnych błędów i wyjątków, więc możesz się spodziewać, że to działa dobrze ?, ale podczas przeglądania bazy danych nie ma modyfikacji w tabelach, które procedura ma modyfikować. Jaki może być błąd w tym? Co ja robię źle?

Wziąłem kod referencyjny z https://gallery.technet.microsoft.com/scriptcenter/How-to-use-a-SQL-Command-be77f9d2#content, spersonalizowałem go i pozbyłem się "paramu", ponieważ RunBook po uruchomieniu, nigdy nie wymagał żadnych parametrów wpisu, więc zdecydowałem się przejść z pełnym ciągiem połączenia. Używam tego samego ciągu połączenia co mój projekt C#, który łączy się i działa idealnie.

Używam "nowego" lazurowego interfejsu, nie wiem, czy może to mieć znaczenie w tym zakresie.

Jeszcze raz, dziękuję za wszelką pomoc, jaką możesz zapewnić.

+0

Musisz dodać $ using: somParam, aby uzyskać dostęp do parametrów w inlinecript. Zobacz https://technet.microsoft.com/en-us/library/jj574197(v=ws.11).aspx. –

Odpowiedz

4

znalazłem sedno problemu, kod działa tylko w porządku, Problem polegał na tym, że używałem niewłaściwego typu RunBook wewnątrz Azure Automation, więc upewnij się, że używasz PowerShell Workflow zamiast zwykłego PowerShell.

Kod Zamieściłem w pracach pytanie, ale znalazłem lepszy sposób zrozumieć, co kod wykonaną za pomocą dostarczonego przykład tutaj: https://azure.microsoft.com/en-us/blog/azure-automation-your-sql-agent-in-the-cloud/ (dzięki @Joseph Idziorek)

Oto kod roboczych dla kto wpadł na ten sam problem jak ja:

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" 
} 

zapisem wyjścia są opcjonalne, jeśli chcesz sprawdzić, jaka część kodu działa i jeśli wszystko działało po każdym biegu.

+2

Powinieneś być w stanie uruchomić ten skrypt jako PowerShell Workflow tak jak powyżej lub jako prosty skrypt PowerShell z niewielkimi zmianami w kodzie. Zawijanie kodu w inlineskrypcie powoduje, że te polecenia cmdlet działają jak zwykłe PowerShell.Jeśli używasz skoroszytu skryptu PowerShell, usuń InlineScript i Workflow i powinien po prostu działać. Uruchomienie jako zwykły PowerShell powinno być preferowanym sposobem, ponieważ twoje skrypty zaczną działać szybciej, ponieważ nie muszą się kompilować. –

+0

Dziękuję bardzo za radę. Spróbuję go użyć tak, jak mówisz, jestem naprawdę noob z PowerShell. –

+0

@ElizabethCooper Twoja linia 'Jeśli używasz skoroszytu skryptu PowerShell, usuń InlineScript i Workflow i powinno to po prostu działać' wiele wyjaśnia mi. Nie można go znaleźć na oficjalnej stronie docs. Lub tęskniłem za nią podczas czytania. Miałem przepływ pracy i inlinecript i nie mogłem uruchomić "cześć świata" typu write-ouput. pracował bez przepływu pracy i skryptu wbudowanego oraz lokalnie. to wyjaśnia, dlaczego. Dziękuję Ci! Przejmuję Twój komentarz. –

0

Poniższy artykuł i kolejna przykładowy kod powinien być dobry punkt wyjścia, aby uzyskać kod PowerShell wykonywanie przeciwko Azure SQL Database z Azure Automation: https://azure.microsoft.com/en-us/blog/azure-automation-your-sql-agent-in-the-cloud/

+0

Dziękuję bardzo za szybką reakcję, w rzeczywistości już widziałem ten artykuł. Próbuję zrozumieć jego kod i nieco go zmodyfikować, aby użyć go do tego, co potrzebowałem, ale nie zadziałało. –

Powiązane problemy