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

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
ошибка при использовании openrowset на локальном сервере
    #39601069
пвап
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрите в SSMS \Server Objects\Linked Servers\Providers
есть ли там SQLNCLI, который у вас в adminSP_Jobs_monitoring
...
Рейтинг: 0 / 0
ошибка при использовании openrowset на локальном сервере
    #39601072
Guf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ошибка при использовании openrowset на локальном сервере
    #39601076
azmonsterr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, вот он в приложенном файле картинка
...
Рейтинг: 0 / 0
ошибка при использовании openrowset на локальном сервере
    #39601080
azmonsterr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guf, ок, спс, счас попробую прописать напрямую имя инстанса
...
Рейтинг: 0 / 0
ошибка при использовании openrowset на локальном сервере
    #39601091
azmonsterr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прописал инстанс, ошибка та же
...
Рейтинг: 0 / 0
ошибка при использовании openrowset на локальном сервере
    #39601095
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azmonsterr,

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

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

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

Попробуйте с явным указанием протокола:
Код: sql
1.
openrowset('SQLNCLI', 'Server=LPC:(local);Trusted_Connection=yes;', ...
...
Рейтинг: 0 / 0
ошибка при использовании openrowset на локальном сервере
    #39601158
azmonsterr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
ошибка при использовании openrowset на локальном сервере
    #39601161
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие протоколы и порты включены для сервера в Configuration Manager? О каких сервер отписался в логе, что их слушает?
...
Рейтинг: 0 / 0
ошибка при использовании openrowset на локальном сервере
    #39601182
пвап
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKпвапИсправьте SQLNCLI на SQLNCLI11
зачем это???
https://docs.microsoft.com/en-us/sql/t-sql/functions/openrowset-transact-sql

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

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

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

Ну раз лезет в Named Pipes в конфигуграторе Enable?
...
Рейтинг: 0 / 0
ошибка при использовании openrowset на локальном сервере
    #39601251
azmonsterr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
25 сообщений из 68, страница 1 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ошибка при использовании openrowset на локальном сервере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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