MS SQL批量生成作业脚本方法介绍总结

在迁移或升级SQL Server数据库服务器时,很多场景下我们不能还原msdb,所以我们必须手工迁移SQL Server相关作业。如果手工生成每一个作业的脚本话,费时又费力,其实SQL Server中有好几种方法可以批量生成作业脚本的方法, 下面介绍一下。

 

1:SSMS客户端工具批量生成创建作业脚本

 

1:在SSMS—>SQL Server Agent下,单击Jobs。

 

2: 按快捷键F7,在Object Explorer Details里面,你会看到所有的作业

 

3: 全选所有作业(CTRL+A),然后右键单击“Script Job as”,然后选项“CREATE TO"就会生成所有作业的脚本。

 

 

 

这个方法其实是非常简洁方便的。不足之处就是所有作业的脚本位于同一个Script,没有按作业名生成相关对应的脚本。

 

 

2:使用PowerShell脚本生成所有作业的脚本

 

有一个现成的PowerShell脚本,相关介绍以及脚本下载具体参考下面链接:

 

https://gallery.technet.microsoft.com/scriptcenter/How-to-get-the-of-all-the-81859696

 

 

PS C:\Users> M:\GetJobScripts\GetAllAgentJobs.ps1

 

cmdlet GetAllAgentJobs.ps1 at command pipeline position 1

Supply values for the following parameters:

ServerName: YourServerName

FilePath: M:\GetJobScripts

Scripting out  xxxxxxxxxxxx  successfully!

Scripting out  xxxxxxxxxxxx  successfully!

.........................................

 

使用该PowerShell脚本可以生成各个作业的各自脚本。非常简洁方便。不过该脚本要求Windows PowerShell 2.0或更高的版本,另外,有些平台是没有测试过的,需要参考上面链接说明。 GetAllAgentJobs.ps1的脚本如下:

 

<#
 The sample scripts are not supported under any Microsoft standard support 
 program or service. The sample scripts are provided AS IS without warranty  
 of any kind. Microsoft further disclaims all implied warranties including,  
 without limitation, any implied warranties of merchantability or of fitness for 
 a particular purpose. The entire risk arising out of the use or performance of  
 the sample scripts and documentation remains with you. In no event shall 
 Microsoft, its authors, or anyone else involved in the creation, production, or 
 delivery of the scripts be liable for any damages whatsoever (including, 
 without limitation, damages for loss of business profits, business interruption, 
 loss of business information, or other pecuniary loss) arising out of the use 
 of or inability to use the sample scripts or documentation, even if Microsoft 
 has been advised of the possibility of such damages. 
#>
 
Param(
[Parameter(Mandatory = $true, position = 0)][string] $ServerName,
[Parameter(Mandatory = $true, position = 1)][string] $FilePath
)
if(Test-Path $FilePath)
{
        #check if the instance name is available on the server
        
         [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") |Out-Null
         $srv = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $ServerName 
         if($ServerName.contains($env:COMPUTERNAME) -and ($srv.VersionString))
         {
            $jobs = $srv.JobServer.Jobs | Where-Object {$_.category -notlike "*repl*" -and $_.category -notlike "*shipping*" -and $_.category -notlike "*Maintenance*" }  
 
            ForEach ( $job in $jobs) 
            { 
               $jobname = $FilePath +'\' + $job.Name.replace(" ","_").replace("\","_").replace("[","_").replace("]","_").replace(".","_").replace(":","_").replace("*","_") + ".sql" 
              $job.Script() | Out-File $jobname 
                Write-Host 'Scripting out ' $job ' successfully!'
            }
         }
        else 
        {
        Write-Host 'The server name you entered is not available!'
        }
 
}
else
{
Write-Host 'The path does not exist, please retype again!'
}

 

 

方法3:通过SqlDmo组件相关函数生成数据库对象脚本,不过有些版本由于没有安装"Backward Compatibility Components" 导致该脚本不能创建相关脚本文件,个人测试时也遇到不少问题,有兴趣可以试试。

 

 

http://www.databasejournal.com/features/mssql/article.php/2205291/Generate-Scripts-for-SQL-Server-Objects.htm

 

 

参考资料:

 

https://stackoverflow.com/questions/3361163/automatically-create-scripts-for-all-sql-server-jobs

https://gallery.technet.microsoft.com/scriptcenter/How-to-get-the-of-all-the-81859696

http://www.databasejournal.com/features/mssql/article.php/2205291/Generate-Scripts-for-SQL-Server-Objects.htm

时间: 2024-10-04 10:54:58

MS SQL批量生成作业脚本方法介绍总结的相关文章

Sql Server 2000清除日志方法介绍

手动清除日志的具体方法 一.现在我们详细描述一下如何用企业管理器清理SQL 2000的日志: 1.打开企业管理器,右击要处理的数据库-->属性-->选项-->故障还原,选"简单"-->确定.如图: 2.右击要处理的数据库-->所有任务-->收缩数据库-->什么也不动,默认第一个是0%,其它两个未选中,点确定-->如果您以前数据库日志文件大于1M那么现在再看看,是不是只有1M了呢. 3.操作完后-->按第一步,把"故障还原&

MS SQL SERVER 数据库日志压缩方法与代码_MsSql

MS SQL性能是很不错的,但是数据库用了一段时间之后,数据库却变得很大,实际的数据量不大.一般都是数据库日志引起的!数据库日志的增长可以达到好几百M. 网上的MSSQL虚拟主机价格也贵,要想不让数据库超容,只好压缩下数据库日志,或者删除数据库日志. 下面我给大家介绍一个方法 1.打开企业管理器 2.打开要处理的数据库 3.点击菜单>工具>SQL查询分析器 4.在输入窗口里面输入:  复制代码 代码如下: DUMP TRANSACTION [数据库名] WITH  NO_LOG  BACKUP

MS SQL SERVER 数据库日志压缩方法与代码

MS SQL性能是很不错的,但是数据库用了一段时间之后,数据库却变得很大,实际的数据量不大.一般都是数据库日志引起的!数据库日志的增长可以达到好几百M. 网上的MSSQL虚拟主机价格也贵,要想不让数据库超容,只好压缩下数据库日志,或者删除数据库日志. 下面我给大家介绍一个方法 1.打开企业管理器 2.打开要处理的数据库 3.点击菜单>工具>SQL查询分析器 4.在输入窗口里面输入: 复制代码 代码如下: DUMP TRANSACTION [数据库名] WITH  NO_LOG  BACKUP 

MS SQL 批量给存储过程/函数授权

在工作当中遇到一个类似这样的问题:要对数据库账户的权限进行清理.设置,其中有一个用户Test,只能拥有数据库MyAssistant的DML(更新.插入.删除等)操作权限,另外拥有执行数据库存储过程.函数的权限,但是不能进行DDL操作(包括新建.修改表.存储过程等...),于是需要设置登录名Test的相关权限: 1:右键单击登录名Test的属性. 2: 在服务器角色里面选择"public"服务器角色. 3:在用户映射选项当中,选择"db_datareader".&qu

sql按时间排序一些方法介绍

在项目中遇到了这样的一个需求 "在用户参与的一个活动列表中,获取当前时间中刚刚开始了(也就是刚才开始的,不是最先开始)的一条活动:如果当前时间没有活动开始,则获取将要开始的一条活动记录"且必须在一次数据库查询操作中完成. 也就是必须要在数据库中做活动的状态区分. 现在具象化一点的理解这个需求,有这样一个表t_time 里面只有三个字段 id,starttime,endtime psY/9XnDbGeT/6yFqeUoTjasdNHY5x6LD+6EmYKmCC3aZqznbb33HPX

linux中MySQL监控脚本方法介绍

最简的办法端口判断法==>仅适合数据库本地使用 法1:if条件判断方法  代码如下 复制代码 [root@oldboy scripts]# cat check_db01.sh #!/bin/sh #created by oldboy #mail:oldboy521@gmail.com PortNum=`netstat -lnt|grep 3306|wc -l` if [ $PortNum -eq 1  ] then    echo "mysqld is running." els

MS SQL 日常维护管理常用脚本(一)

  SQL SERVER 数据库日常维护,管理,巡检过程中你可能经常需要用到一些SQL语句(亦或方法)来查看数据库服务器环境(操作系统版本, 磁盘空间,CPU,RAM信息),数据库信息(数据库版本,实例名称...),数据库对象等. 查看数据库信息   查看数据库服务器名称   方法1:SQL脚本查询,可以通过下面脚本来查询.   默认实例 默认实例查询 SELECT @@SERVERNAME AS SERVERNAME;  SELECT SERVERPROPERTY('servername')

将mater库中的系统存储过程批量生成*.sql文件 通用且非常实用

大家都知道系统存储过程是无法用工具导出的(大家可以试试 >任务>生成SQL脚本) 因为系统存储过程一般是不让开发人员修改的. 需要知识: 1.xp_cmdshell命令的使用 2.sp_MS_marksystemobject 标记系统存储过程的方法 3.dos 命令,如 type,>> 等 4.bcp 命令的使用 复制代码 代码如下: use master go if OBJECT_ID('pr_procToSql') is not null drop proc pr_procTo

C#实现SQL批量插入数据到表的方法_C#教程

本文实例讲述了C#实现SQL批量插入数据到表的方法.分享给大家供大家参考,具体如下: #region 帮助实例:SQL 批量插入数据 多种方法 /// <summary> /// SqlBulkCopy往数据库中批量插入数据 /// </summary> /// <param name="sourceDataTable">数据源表</param> /// <param name="targetTableName"