Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ошибка при использовании openrowset на локальном сервере / 25 сообщений из 68, страница 1 из 3
13.02.2018, 12:23
    #39601056
azmonsterr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
Всем доброго дня.
Решил тут настроить мониторинг джобов:

1.создал табличку, заполнил
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
USE [msdb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[jobs_monitoring](
    [job_id] [uniqueidentifier] NOT NULL,  --job_id джоба, берем из sysjobs
    [job_name] [nvarchar](128) NULL,   -- имя джоба, можно произвольное,     можно из sysjobs, влияет только на отображение в алерте
    [max_time] [int] NULL,  -- предельное время работы задания
    [operators_notification] [nvarchar](256) NULL,  --- e-mail-ы оповещения,
    [sms_mail] [nvarchar](256) NULL,  -- e-mail оповещения для смс
    [interrupt] [bit] NULL, -- прерывать задание или нет ( 1- прерывать, 0 - только оповещение)
 CONSTRAINT [PK_jobs_monitoring] PRIMARY KEY CLUSTERED
(
    [job_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO



2. Написал запрос на создание процедуры, поскольку сервер 2012, в openrowset msdb.dbo.sp_help_jobactivity описал с результатами? а вместо msdb.dbo.sp_help_job создал msdb.dbo.sp_help_job_with_results , что, в принципе, одно и то же и является в обоих случаях обходом известной ошибки openrowset в sql2012 ( http://www.sql.ru/forum/1057196/problema-s-sp-help-job-na-sql2012-help-plz) , запустил, процедура успешно создалась.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
USE [msdb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create procedure [dbo].[adminSP_Jobs_monitoring] @mail_profile nvarchar(50)
as
begin
    SET NOCOUNT ON;

declare @dt datetime  -- время на которое будет сбор данных, сделал как константу, т.к вдруг через секунду закончится работать джоб,
-- а рассыка произойдет, чтобы в письме отсылки отразить, на какой момент работал джоб долгое время.
set @dt=GETDATE()

select t2.job_id,t2.name,t2.originating_server,t1.start_execution_date,
        t1.dtdiff, t3.operators_notification,t3.sms_mail,t3.interrupt
into #res
 from
    (
    select job_id,job_name,start_execution_date,DATEDIFF(mi,start_execution_date,GETDATE())  as dtdiff
    from
    openrowset('SQLNCLI', 'Server=(local);Trusted_Connection=yes;', '
	
	DECLARE
	@session_id              int = NULL,              
    @job_id                  uniqueidentifier = NULL, 
    @job_name                sysname = NULL          
    
	
	EXEC msdb.dbo.sp_help_jobactivity 
	@session_id,
	@job_id,
	@job_name               
    
	WITH RESULT SETS
	(
	  (
	session_id              int,          
    job_id                  uniqueidentifier, 
    job_name                sysname,
    run_requested_date      datetime, 
    run_requested_source    sysname, 
    queued_date             datetime,
    start_execution_date    datetime, 
    last_executed_step_id   int, 
    last_exectued_step_date datetime, 
    stop_execution_date     datetime, 
	next_scheduled_run_date datetime, 
    job_history_id          int, 
    message                 nvarchar(1024), 
    run_status              int, 
    operator_id_emailed     int, 
    operator_id_netsent     int,
    operator_id_paged       int
	)
	)
	')
    where  job_id in (select job_id  from msdb.dbo.jobs_monitoring)) as t1
inner join (
    select job_id,name,originating_server --into #works_jobs
    from
    openrowset('SQLNCLI', 'Server=(local);Trusted_Connection=yes;', 'exec msdb.dbo.sp_help_job_with_results @execution_status =0')
    where  job_id in (select job_id  from msdb.dbo.jobs_monitoring)) as t2 on t1.job_id=t2.job_id
inner join msdb.dbo.jobs_monitoring t3 on t1.job_id=t3.job_id
where t1.dtdiff>t3.max_time

---отсылка курсором на основе результата запроса
declare @jname varchar(128)
declare @server varchar(50)
declare @dtstart datetime
declare @dtdiff int
declare @email varchar(100)
declare @body varchar(350)
declare @smsmail varchar(100)
declare @break int
declare @job_id uniqueidentifier
select * from #res  --это проверял результаты
declare cur cursor for select job_id,name,originating_server,start_execution_date,dtdiff,operators_notification,sms_mail,interrupt  from #res
open cur

fetch next from cur into @job_id,@jname,@server,@dtstart,@dtdiff,@email,@smsmail,@break

while @@FETCH_STATUS<>-1
begin
    --текст тела письма с форматирование даты в формат дд/мм/гггг чч/мм/сс
    set @body='Задание "'+@jname+'" на сервере '+@server +' начавшееся в '+convert(varchar(2),datepart(dd,@dtstart))+'/'+convert(varchar(2),datepart(mm,@dtstart))+'/'+convert(varchar(4),datepart(yyyy,@dtstart))+
    ' '+convert(varchar(4),datepart(hh,@dtstart))+':'+convert(varchar(4),datepart(n,@dtstart))+':'+convert(varchar(4),datepart(ss,@dtstart))
    + ' выполняется уже '+convert(varchar(10),@dtdiff)+' минут(ы). Время проверки: '+
convert(varchar(2),datepart(dd,@dt))+'/'+convert(varchar(2),datepart(mm,@dt))+'/'+convert(varchar(4),datepart(yyyy,@dt))+
    ' '+convert(varchar(4),datepart(hh,@dt))+':'+convert(varchar(4),datepart(n,@dt))+':'+convert(varchar(4),datepart(ss,@dt))

    EXEC msdb.dbo.sp_send_dbmail
    @profile_name = @mail_profile,
         @recipients = @email,
         @subject = 'Долго выполняется задание: ',
         @body = @body
    -- остановка джоба,
    if @break =1
    begin
     exec msdb.dbo.sp_stop_job @job_id=@job_id

    end
    -----
    if (@smsmail is not  null  or @smsmail!='')
    begin
    set @body='Задание "'+@jname+'" на сервере '+@server +'выполняется более '+convert(varchar(10),@dtdiff)+' мин.'
    EXEC msdb.dbo.sp_send_dbmail
    @profile_name = @mail_profile,
         @recipients = @smsmail,
         @subject = 'Долго выполняется задание: ',
         @body = @body
    --print 'модуль отсылки смс'
    end
   
    set @body=''
    fetch next from cur into @job_id,@jname,@server,@dtstart,@dtdiff,@email,@smsmail,@break
end
drop table #res
close cur
deallocate  cur
end -- конец процедуры



3. Создал джоб с использованием созданной на предыдущем шаге процедурой
Код: sql
1.
exec dbo.adminSP_Jobs_monitoring dbmail ( dbmail - это почтовый профиль)



4. И Джоб вываливается с ошибкой
Код: sql
1.
2.
3.
4.
5.
Executed as user: ***\********. Named Pipes Provider: Could not open a connection to SQL Server [1346]. 
[SQLSTATE 42000] (Error 1346)  OLE DB provider "SQLNCLI11" for linked server "(null)" returned message "Login timeout expired". 
[SQLSTATE 01000] (Error 7412)  OLE DB provider "SQLNCLI11" for linked server "(null)" returned message "A network-related or instance-specific error has occurred while establishing a connection to SQL Server. 
Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.". 
[SQLSTATE 01000] (Error 7412).  The step failed.


Логин доменный, с правами сисадмина
Что за соединение у него не получается открыть если он обращается сам к себе в данном случае?
...
Рейтинг: 0 / 0
13.02.2018, 12:46
    #39601069
пвап
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
Посмотрите в SSMS \Server Objects\Linked Servers\Providers
есть ли там SQLNCLI, который у вас в adminSP_Jobs_monitoring
...
Рейтинг: 0 / 0
13.02.2018, 12:50
    #39601072
Guf
Guf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
azmonsterrРешил тут настроить мониторинг джобов:

2. Написал запрос на создание процедуры
Код: sql
1.
2.
from
    openrowset('SQLNCLI', 'Server=(local);Trusted_Connection=yes;', '


4. И Джоб вываливается с ошибкой
Код: sql
1.
2.
3.
4.
5.
Executed as user: ***\********. Named Pipes Provider: Could not open a connection to SQL Server [1346]. 
[SQLSTATE 42000] (Error 1346)  OLE DB provider "SQLNCLI11" for linked server "(null)" returned message "Login timeout expired". 
[SQLSTATE 01000] (Error 7412)  OLE DB provider "SQLNCLI11" for linked server "(null)" returned message "A network-related or instance-specific error has occurred while establishing a connection to SQL Server. 
Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.". 
[SQLSTATE 01000] (Error 7412).  The step failed.


Что за соединение у него не получается открыть если он обращается сам к себе в данном случае?
...
Рейтинг: 0 / 0
13.02.2018, 12:51
    #39601076
azmonsterr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
Да, вот он в приложенном файле картинка
...
Рейтинг: 0 / 0
13.02.2018, 12:53
    #39601080
azmonsterr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
Guf, ок, спс, счас попробую прописать напрямую имя инстанса
...
Рейтинг: 0 / 0
13.02.2018, 13:08
    #39601091
azmonsterr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
Прописал инстанс, ошибка та же
...
Рейтинг: 0 / 0
13.02.2018, 13:12
    #39601095
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
azmonsterr,

автор and if SQL Server is configured to allow remote connections.
...
Рейтинг: 0 / 0
13.02.2018, 13:17
    #39601098
пвап
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
Исправьте SQLNCLI на SQLNCLI11
...
Рейтинг: 0 / 0
13.02.2018, 13:19
    #39601100
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
пвапИсправьте SQLNCLI на SQLNCLI11
зачем это???
...
Рейтинг: 0 / 0
13.02.2018, 13:19
    #39601101
azmonsterr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
TaPaK, да
...
Рейтинг: 0 / 0
13.02.2018, 13:22
    #39601103
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
azmonsterr,

инстанс именованый?
...
Рейтинг: 0 / 0
13.02.2018, 13:27
    #39601110
azmonsterr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
TaPaK, дефолт
...
Рейтинг: 0 / 0
13.02.2018, 13:38
    #39601116
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
azmonsterrTaPaK, дефолт
точно? @@SERVERNAME
...
Рейтинг: 0 / 0
13.02.2018, 13:42
    #39601121
azmonsterr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
TaPaK, ну да, select @@SERVERNAME выдает имя инстанса совпадающее с именем хоста)
...
Рейтинг: 0 / 0
13.02.2018, 13:50
    #39601128
WarAnt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
azmonsterr,

что вернет команда: telnet localhost 1433 ?
...
Рейтинг: 0 / 0
13.02.2018, 13:58
    #39601129
azmonsterr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
WarAnt, телнет по этому порту прекрасно проваливается в черный экран)
...
Рейтинг: 0 / 0
13.02.2018, 14:18
    #39601143
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
azmonsterr,

Попробуйте с явным указанием протокола:
Код: sql
1.
openrowset('SQLNCLI', 'Server=LPC:(local);Trusted_Connection=yes;', ...
...
Рейтинг: 0 / 0
13.02.2018, 14:37
    #39601158
azmonsterr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
invm,

Поменялось немного

Executed as user: ***\******. Shared Memory Provider: The Shared Memory dll used to connect to SQL Server 2000 was not found [126]. [SQLSTATE 42000] (Error 126) OLE DB provider "SQLNCLI11" for linked server "(null)" returned message "Login timeout expired". [SQLSTATE 01000] (Error 7412) OLE DB provider "SQLNCLI11" for linked server "(null)" returned message "A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.". [SQLSTATE 01000] (Error 7412). The step failed.
...
Рейтинг: 0 / 0
13.02.2018, 14:40
    #39601161
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
Какие протоколы и порты включены для сервера в Configuration Manager? О каких сервер отписался в логе, что их слушает?
...
Рейтинг: 0 / 0
13.02.2018, 14:55
    #39601182
пвап
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
TaPaKпвапИсправьте SQLNCLI на SQLNCLI11
зачем это???
https://docs.microsoft.com/en-us/sql/t-sql/functions/openrowset-transact-sql

OPENROWSET - это OLEDB
...
Рейтинг: 0 / 0
13.02.2018, 15:00
    #39601195
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
пвапTaPaKпропущено...

зачем это???
https://docs.microsoft.com/en-us/sql/t-sql/functions/openrowset-transact-sql

OPENROWSET - это OLEDB
вы не видите какой провайдер в ошибке?
...
Рейтинг: 0 / 0
13.02.2018, 15:06
    #39601200
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
azmonsterrTaPaK, ну да, select @@SERVERNAME выдает имя инстанса совпадающее с именем хоста)
я всё равно вам не верю :)
что вернёт
Код: sql
1.
SELECT CONVERT(char(20), SERVERPROPERTY('InstanceName')) 
...
Рейтинг: 0 / 0
13.02.2018, 15:43
    #39601238
azmonsterr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
TaPaK, NULL..упс..не понял.. а как же селект @@сервернейм?
...
Рейтинг: 0 / 0
13.02.2018, 15:50
    #39601247
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
azmonsterrTaPaK, NULL..упс..не понял.. а как же селект @@сервернейм?
вопрос как вы его понимаете :)

Ну раз лезет в Named Pipes в конфигуграторе Enable?
...
Рейтинг: 0 / 0
13.02.2018, 15:55
    #39601251
azmonsterr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при использовании openrowset на локальном сервере
TaPaK, а, сорри, там же инстанснейм, ну так и есть - он дефолтный, получается

Вот это
SELECT CONVERT(char(20), SERVERPROPERTY('servername')) ServerName,
CONVERT(char(20), SERVERPROPERTY('InstanceName')) instancename,
CONVERT(char(20), SERVERPROPERTY('MachineName'))
as HOSTNAME

Выдает результат:
ServerName instancename HOSTNAME
MYSERVER NULL MYSERVER
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ошибка при использовании openrowset на локальном сервере / 25 сообщений из 68, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]