9

Azure platformunda gerçekten yeniyim ve belki bu aptalca bir sorudur, ancak bu konuyla ilgili bilgi edinmeyi başaramıyorum. Bununla ilgili gerçekten yardıma ihtiyacım var. Bir üniversite projesi için bir web servisinin kullandığı bir veritabanını dağıtıyorum. Bu veritabanında saklı bir prosedürüm var ve bunu günlük olarak çalıştırmam gerekiyor.Azure Automation kullanarak saklı yordam nasıl çalıştırılır?

Azure Automation ile bu tür eylemleri programlayabilir veya planlayabilirsiniz. Hizmeti "yükledim" ve "runbook" u yaratmaya çalışıyorum ama burada nasıl veya ne kod yazacağımı bilmiyorum çünkü PowerShell'i hiç kullanmadım.

Verilen yardımlar takdir edilecektir. Şimdiden teşekkürler!

DÜZENLEME 1:

Yani

Ben sihir yapmak için bu kodu kullanmaya çalışıyorum: Ben Runbook kaydedip yayınlamak zaman

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

, hiç olmadığını söyledi şey olduğunu hatalar. RunBook'u çalıştırdığımda, herhangi bir hata veya istisna göndermeyi başlatabilir ve bitirmeyi bitirebilir, böylece işin doğru yapılmasını bekleyebilirsiniz, ancak veritabanına bakarken, prosedürde değişiklik yapılması amaçlanan tablolarda herhangi bir değişiklik yoktur. Bu hata ne olabilir? Neyi yanlış yapıyorum?

https://gallery.technet.microsoft.com/scriptcenter/How-to-use-a-SQL-Command-be77f9d2#content referans kodunu aldım, kişiselleştirdim ve "Param" den kurtuldu çünkü RunBook başladığında, hiçbir giriş parametresi sormadı, bu yüzden tam bağlantı dizgisine gitmeye karar verdim. Mükemmel bağlanan ve çalışan C# projem ile aynı bağlantı dizesini kullanıyorum.

"Yeni" azure arayüzünü kullanıyorum, bunun bu konuda herhangi bir önemi olup olmadığını bilmiyorum.

Yine sağladığınız herhangi bir yardım için teşekkür ederiz.

+0

Inlinescript'te parametrelere erişmek için $ using: somParam eklemeniz gerekir. Https://technet.microsoft.com/en-us/library/jj574197(v=ws.11).aspx adresine bakın. –

cevap

4

Ben sorunun özünü buldum, kod, gayet güzel çalışıyor Sorun, Azure Automation içinde yanlış türde bir RunBook kullanıyordum, bu yüzden basit bir PowerShell yerine bir Workflow PowerShell kullandığınızdan emin olun.

ben soru eserlerinde yayınlanan kod, ama burada verilen örnek kullanılarak yapılan neyi kodu anlamak için daha iyi bir yol bulmuş: https://azure.microsoft.com/en-us/blog/azure-automation-your-sql-agent-in-the-cloud/ (teşekkür @Joseph Idziorek kadar) İşte

için çalışma kodudur yaptım aynı sorun koştu kimse: kod parçası çalışma ve her şey her çalıştırdıktan sonra çalışıp çalışmadığını ne kontrol etmek istiyorsanız

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

Yaz-çıkışlar, isteğe bağlıdır.

+2

Bu komut dosyasını, yukarıda yaptığınız gibi PowerShell İş Akışı veya bazı küçük kod değişikliklerine sahip basit bir PowerShell betiği olarak çalıştırabilmeniz gerekir. Kodunuzu inlinescript içinde sarmalamak aslında bu cmdlet'leri normal PowerShell olarak çalıştırır.Bir PowerShell betiği runbook'u kullanıyorsanız, InlineScript'i ve İş Akışı'nı kaldırın ve sadece çalışması gerekir. Düzenli PowerShell olarak çalıştırılması aslında tercih edilen yol olmalı çünkü komut dosyalarınız derlemeye gerek duymadıklarından daha hızlı başlayacaklardır. –

+0

Tavsiyeniz için çok teşekkür ederim. Söylediğin gibi kullanmaya çalışacağım, ben PowerShell ile gerçekten aptalım. –

+0

@ElizabethCooper Kendi satırınızda bir PowerShell betiği kullanıyorsanız, InlineScript'i ve İş Akışı'nı kaldırın ve sadece çalışmalı, bana çok şey anlatıyor. Resmi dokümanlar web sitesinde bulunamadı. Ya da okurken onu özledim. İş akışı ve inlinescript vardı ve çalışmak için bir yazma-a "merhaba dünya" alamadım. iş akışı ve satır içi komut dosyası olmadan ve yerel olarak çalıştı. Bu nedenini açıklıyor. Teşekkür ederim! Yorumunuzu destekledim. –

0

şu makale ve sonraki örnek kod Azure Automation Azure SQL Veritabanı karşı yürütülmesi PowerShell kodu almak için iyi bir başlangıç ​​yeri olmalıdır: https://azure.microsoft.com/en-us/blog/azure-automation-your-sql-agent-in-the-cloud/

+0

Hızlı yanıtınız için çok teşekkür ederim, aslında bu makaleyi zaten gördüm. Kodunu anlamaya çalışıyorum ve ihtiyacım olan şeyi kullanmak için biraz değiştirdim ama işe yaramadı. –

İlgili konular