前置机中遇到的问题:
1.多个前置机,都需要每个连接上才能配置。
2.前置机的链接服务器需要配置。
3.前置机的作业运行情况需要查看。
4.统一配置全部的前置机上的连接服务器或者作业,存储过程和SQL.
5.单独前置机配置。
需要数据:
前置机IP。用户名,密码。
前置机通信状态测试。
前置机的作业运行状态和最近一条历史记录和全部历史记录。
前置机的SQL语句执行能力面板。
查看作业历史记录模板,建立作业模板。建立链接服务器模板。
得到脚本的函数,生成当前脚本的方法。
表最近一条记录的显示。
目的。避免进入每一个前置机去查看具体操作。
当然:目前可以采用简单的方法:
Select * from [前置机IP].msdb.dbo.sysjobs
查看作业
Select * from [前置机IP].msdb.dbo.sysjobs
查看一个作业的历史记录
Select * from msdb.dbo.sysjobhistory where job_id=’----’
A. 显示所有链接服务器的所有登录映射
下面的示例显示在运行 SQL Server 的本地计算机上定义的所有链接服务器的所有登录映射。
EXEC sp_helplinkedsrvlogin
master 记录 系统中所有的系统信息,包括登入账户、系统配置和设置、服务器中数据库的名称等
msdb 主要保存些 作业、调度警报
如果你的数据库里面使用了作业,那么做数据库迁移或者换服务器的时候记得备份并还原msdb ,madb的还原要用单用户模式。
连接服务器
select * from master.dbo.sysservers
Isremote 字段=0 是远程
Select top 1 t.server, k.name,t.message,t.run_status,t.run_date,t.run_time from msdb.dbo.sysjobhistory as t
inner join (Select top 1 job_id,name,enabled,start_step_id from msdb.dbo.sysjobs where name='作业名') as k
on t.job_id=k.job_id where t.step_id=0 order by t.instance_id desc
Select top 1 t.server, k.name,t.message,t.run_status,t.run_date,t.run_time from 【IP】msdb.dbo.sysjobhistory as t
inner join (Select top 1 job_id,name,enabled,start_step_id from 【IP】msdb.dbo.sysjobs where name='作业名') as k
on t.job_id=k.job_id where t.step_id=0 order by t.instance_id desc
可以用游标循环进行操作 读取每一条前置机数据。
还可以进一步弄个临时表。 插入到临时表中。
对应字段弄一弄。 然后insert into @tbCurrent SELECT即可
USE [wan]
GO
/****** Object: StoredProcedure [dbo].[GetFpcJobState] Script Date: 07/05/2013 16:57:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[GetFpcJobState]
@JobName varchar(150)=null
as
DECLARE @Sql nvarchar(Max)
DECLARE @rmtname nvarchar(30)
set @Sql =N''
declare @mytabtemp table
(
FCPIP nvarchar(Max),
serverStr nvarchar(Max),
JobName nvarchar(Max),
Resultmessage nvarchar(Max),
run_status nvarchar(Max),
run_date nvarchar(Max),
run_time nvarchar(Max))
DECLARE curStation CURSOR FOR
SELECT FpcIP From FPC
OPEN curStation
FETCH NEXT FROM curStation INTO @rmtname
WHILE @@FETCH_STATUS = 0
BEGIN
SET @rmtname = LTRIM(RTRIM(@rmtname))
set @sql = ' Select top 1 '''+@rmtname+''' , t.server, k.name,t.message,t.run_status,t.run_date,t.run_time from ['+@rmtname+'].msdb.dbo.sysjobhistory as t
inner join (Select top 1 job_id,name,enabled,start_step_id from ['+@rmtname+'].msdb.dbo.sysjobs where name='''+@JobName+''') as k
on t.job_id=k.job_id where t.step_id=0 order by t.instance_id desc'
insert into @mytabtemp exec sp_executesql @sql
FETCH NEXT FROM curStation INTO @rmtname
END
CLOSE curStation
DEALLOCATE curStation
SELECT * FROM @mytabtemp output
SET NOCOUNT ON
GO
通过上述方法: 我在 中心服务器建立针对每个前置机的连接服务器,然后通过执行此存储过程,放入作业名。 即可得到 对应前置机的 执行作业名的运行状态和执行时间等。
本人声明:沐海(http://my.oschina.net/mahaisong) 以上文章是经过本人设计实践和阅读其他文档得出。如果需要探讨或指教可以留言!欢迎