Skip to main content

How to export SQL agent jobs from your SQL Server instance

Hi everyone!

As a database administrator, you always need a copy of your data and data processes for:


  • migrating servers
  • disaster recovery
  • backup procedures/best practices
This post covers a simple Powershell script. The script is to take a backup of all the SQL agent jobs on your SQL server instance.

If you ever needed to recreate all the jobs on another server, all you would have to do is execute the SQL script.

I. In SSMS (SQL Server Management Studio), create an empty .SQL file and save it with this naming convention:
I.e. SqlAgentJobs_PROD01.sql } This file will represent all the SQL agent jobs on the primary production SQL server.

II. Copy the "SqlAgentJobs_PROD01.sql" file from above to a network share.

III. Run the Powershell script below in  Powershell ISE as administrator:


##migrating jobs from one server to another with the replace command
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=localhost;Database=msdb;Integrated Security=True"
$s = $sqlServer
$SQLServer = "YourServerName"
##b/c this is powershell directly reference assembly
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")
$s = New-Object Microsoft.SqlServer.Management.Smo.Server "localhost"
$file = "\\YourNetworkPath\SQLAgentJobs\SqlAgentJobs_PROD01.sql"
Clear-Content $file 
##clear-content is to empty the file before exporting SQL agent jobs
foreach ($j in $s.JobServer.Jobs)
{
$jName = $j.Name
$jFile = $file + $jName + ".sql"
$c = $j.Script()
$c = "USE msdb GO" + $c
$c | Out-File $file -Append 
}

##email confirmation
Invoke-Sqlcmd -query "EXEC msdb.dbo.sp_send_dbmail  
@profile_name = 'YourDatabaseMailProfile',  
@recipients = 'YourTeamEmail@yourCompany.com',  
@body = 'Hello, 


This email confirms that all SQL Agent jobs on YourServerName have been exported to:
\\YourNetworkPath\SQLAgentJobs\SqlAgentJobs_PROD01.sql

This job runs on a bi-weekly schedule at 10am on the 15th and the last day of the month.


Thank you, 
  
@subject = 'SQL Agent Jobs have been exported from PROD01' ;" 
 ##-ServerInstance "YourServerName"


You're all set!

If you have any questions related to this post, please put them below.


Thank you and Happy reading,

-marshé hutchinson
#learnSQLwithme



Comments

Popular posts from this blog

event id 101 task start failed - task scheduler event id 101 launch failure

Hello again. This post is related to automating SQL server tasks with Task Scheduler. In this example I was tasked with exporting SQL server agent jobs twice a month. To achieve this, I setup a task scheduler task that ran a PowerShell script that: establishes a local connection to the SQL server. cleans the file before writing to the .sql file to avoid adding on (appending) results on subsequent runs of the task scheduler task. when a connection is established, export the SQL agent jobs on the server to a .sql file on a remote server. sends a confirmation email via the SQL server database mail profile that the SQL agent jobs were exported to the specified remote server path. That was a mouthful. Now that you know my task scheduler task is calling a PowerShell script, let's get back to why it is failing.  The good news is this error is not related to the script. The error launch failure means the task could not even run. This is most likely due to a permissi

Msg 14234, Level 16, State 1, Procedure sp_verify_job, Line 199 The specified '@owner_login_name' is invalid (valid values are returned by sp_helplogins [excluding Windows NT groups]).

Hi guys! Here's another quick and easy post. Scenario I was trying to copy a SQL agent job from one server to another by just copying the script of that SQL job. You can copy any script by right clicking a job > Script job as > create to > new query window. I pasted the job on a different server and tried to execute it and received this error: Msg 14234, Level 16, State 1, Procedure sp_verify_job, Line 199 The specified '@owner_login_name' is invalid (valid values are returned by sp_helplogins [excluding Windows NT groups]). This error message is simply saying for the variable '@owner_login_name', the user account associated with the variable is incorrect because it does not exist. Fix Simply update the variable for '@owner_login_name' to a valid user account for the current SQL instance. Now when you execute the script again to create the SQL agent job your results will be: Command(s) completed successfully. If you have any furt

Executed as user: . Incorrect syntax near ''. [SQLSTATE 42000] (Error 102). The step failed.

Hi everyone! Today's post is about an all too common problem... syntax issues. Whether you fat-finger your keyboard or are always in a rush, chances are you have already encountered many syntax errors. But if you are a newbie,  your syntax error is just around the corner. No worries, this is an easy fix. Syntax errors just let you know part of your code or script is incorrect. Scenario I have a SQL agent job that is using the SQL command line to perform index maintenance, but it is failing. Here's my code : sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d master -Q "EXECUTE dbo.IndexOptimize @Databases = ' databaseName ', @FragmentationLow = NULL, @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationLevel1 = 5, @FragmentationLevel2 = 30, @UpdateStatistics = 'ALL',@WaitAtLowPriorityMaxDuration = 180, @WaitAtLowPriorityAbortA