如何使用 Azure 自动化 运行 存储过程?
How to run stored procedure using Azure Automation?
我真的是 Azure 平台的新手,也许这是一个愚蠢的问题,但我还没找到关于这个主题的信息。我真的需要帮助。我正在为大学项目部署 Web 服务使用的数据库。在这个数据库中,我有一个存储过程,需要每天 运行 它。
发现您可以使用 Azure Automation 对此类操作进行编程或安排。我 "installed" 服务,我正在尝试创建 "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# 项目相同的连接字符串,它可以完美地连接和工作。
我正在使用 "new" azure 界面,不知道这在这方面是否有任何重要性。
再次感谢您提供的任何帮助。
以下文章和后续示例代码应该是一个很好的起点,可以让 PowerShell 代码针对 Azure SQL Azure 自动化数据库执行:https://azure.microsoft.com/en-us/blog/azure-automation-your-sql-agent-in-the-cloud/
我找到了问题的核心,代码工作正常,问题是我在 Azure Automation 中使用了错误类型的 RunBook,因此,请确保您 运行正在使用 Workflow 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 是可选的,如果你想检查代码的哪一部分正在工作以及在每个 运行.
之后是否一切正常
我真的是 Azure 平台的新手,也许这是一个愚蠢的问题,但我还没找到关于这个主题的信息。我真的需要帮助。我正在为大学项目部署 Web 服务使用的数据库。在这个数据库中,我有一个存储过程,需要每天 运行 它。
发现您可以使用 Azure Automation 对此类操作进行编程或安排。我 "installed" 服务,我正在尝试创建 "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# 项目相同的连接字符串,它可以完美地连接和工作。
我正在使用 "new" azure 界面,不知道这在这方面是否有任何重要性。
再次感谢您提供的任何帮助。
以下文章和后续示例代码应该是一个很好的起点,可以让 PowerShell 代码针对 Azure SQL Azure 自动化数据库执行:https://azure.microsoft.com/en-us/blog/azure-automation-your-sql-agent-in-the-cloud/
我找到了问题的核心,代码工作正常,问题是我在 Azure Automation 中使用了错误类型的 RunBook,因此,请确保您 运行正在使用 Workflow 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 是可选的,如果你想检查代码的哪一部分正在工作以及在每个 运行.
之后是否一切正常