9

Sono davvero nuovo per la piattaforma Azure e forse questa è una domanda stupida ma non riesco a trovare informazioni su questo argomento. Ho davvero bisogno di aiuto con questo. Sto implementando un database utilizzato da un servizio web per un progetto universitario. In questo database ho una procedura memorizzata e ho bisogno di eseguirla quotidianamente.Come eseguire la stored procedure utilizzando l'automazione di Azure?

Trovato che con Automazione di Azure è possibile programmare o pianificare questo tipo di azioni. Ho "installato" il servizio e sto cercando di creare il "runbook" ma non so come o cosa codificare qui perché non ho mai usato così tanto PowerShell.

Qualsiasi aiuto fornito sarà apprezzato. Grazie in anticipo!

EDIT 1:

Così sto cercando di utilizzare questo codice per rendere la magia:

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

Il fatto è che quando risparmio il Runbook e pubblicarla, si dice che non c'è errori. Quando eseguo RunBook, inizia e termina l'invio di errori o eccezioni, quindi è probabile che abbia funzionato correttamente ?, ma consultando il database non ci sono modifiche nelle tabelle che la procedura è destinata a modificare. Quale potrebbe essere l'errore in questo? Che cosa sto facendo di sbagliato?

ho preso il codice di riferimento da https://gallery.technet.microsoft.com/scriptcenter/How-to-use-a-SQL-Command-be77f9d2#content, personalizzata e sono liberato del "param", perché il Runbook quando viene avviato, non ha mai chiesto per tutti i parametri di ingresso, così ho deciso di andare con la stringa di connessione completa. Sto usando la stessa stringa di connessione del mio progetto C#, che si connette e funziona perfettamente.

Sto usando la "nuova" interfaccia azzurra, non so se questo potrebbe essere di alcuna importanza a questo proposito.

Ancora una volta, grazie per l'aiuto che potresti fornire.

+0

È necessario aggiungere $ utilizzando: somParam per accedere ai parametri nell'inlinescript. Vedere https://technet.microsoft.com/en-us/library/jj574197(v=ws.11).aspx. –

risposta

4

ho trovato il cuore del problema, il codice funziona bene, il problema era che stavo usando il tipo errato di RunBook all'interno di Automazione di Azure, quindi, assicurati di avere un PowerShell del flusso di lavoro invece di un semplice PowerShell.

Il codice che ho postato nelle opere di domanda, ma ho trovato un modo migliore per capire che cosa il codice realizzato utilizzando l'esempio fornito qui: https://azure.microsoft.com/en-us/blog/azure-automation-your-sql-agent-in-the-cloud/ (grazie a @Joseph Idziorek)

Ecco il codice di lavoro per chiunque ha incontrato lo stesso problema come ho fatto io:

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-uscite sono opzionali, se si desidera controllare quale parte del codice è in funzione e se tutto ha funzionato dopo ogni esecuzione.

+2

Dovresti riuscire a eseguire questo script come flusso di lavoro di PowerShell come sopra o come semplice script di PowerShell con alcune modifiche minori al codice. Il wrapping del codice in inlinescript rende effettivamente tali cmdlet eseguiti come un normale PowerShell.Se si utilizza un runbook di script PowerShell, rimuovere InlineScript e Workflow e dovrebbe funzionare. Esecuzione come un normale PowerShell dovrebbe essere in realtà il modo preferito perché gli script si avvieranno più velocemente dal momento che non è necessario compilare. –

+0

Grazie mille per il vostro consiglio. Cercherò di usarlo come dici tu, sono davvero noob con PowerShell. –

+0

@ElizabethCooper la tua linea 'Se stai usando un runbook di script PowerShell, rimuovi InlineScript e Workflow e dovrebbe funzionare solo' mi spiega molto. Impossibile trovarlo sul sito Web ufficiale dei documenti. O l'ho perso mentre leggevo. Avevo flusso di lavoro e inlinescript e non riuscivo a far funzionare un "Ciao mondo" di scrittura. ha funzionato senza flusso di lavoro e script inline e localmente. questo spiega perché. Grazie! Ho upvoted il tuo commento. –

0

il seguente articolo e il successivo codice di esempio dovrebbe essere un buon punto di partenza per ottenere il codice PowerShell esecuzione contro Azure SQL database da Azure Automation: https://azure.microsoft.com/en-us/blog/azure-automation-your-sql-agent-in-the-cloud/

+0

Grazie mille per la tua rapida risposta, infatti ho già visto quell'articolo. Sto cercando di capire il suo codice e modificarlo un po 'per usarlo per quello di cui avevo bisogno ma non ha funzionato. –

Problemi correlati