Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как можно безболезненно узнать что linked server недоуступен?  [new]
insomnia
Member

Откуда:
Сообщений: 24
Как из хранимой процедуры определить что linked server в данный момент недоступен и не вылететь из нее с сообщением "SQL Server does not exist or access denied"? После select'а к недоступному серверу процедура сразу же прекращает свое выполнение, на @@error не проверишь.
4 дек 03, 12:18    [446314]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Glory
Member

Откуда:
Сообщений: 104751
if exists (select * from sysobjects where id = object_id(N'[dbo].[usp_checksqlserver]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[usp_checksqlserver]
go

create procedure [dbo].[usp_checksqlserver]
@server_name varchar(100)='(local)',
@sql_login varchar(100)=NULL,
@sql_password varchar(100)=NULL,
@login_timeout int=60

AS
declare @retcode int, @sqlobj int
declare @err_source varchar(8000), @err_desc varchar(8000)

exec @retcode = sp_OACreate 'SQLDMO.SqlServer', @sqlobj OUT
IF @retcode <> 0
BEGIN
PRINT 'sp_OACreate failed. Object - SQLDMO.SqlServer'
GOTO Error_Handler
END

IF @login_timeout < -1 SET @login_timeout = 60
exec @retcode = sp_OASetProperty @sqlobj, 'LoginTimeout', @login_timeout
if @retcode<>0
BEGIN
PRINT 'sp_OASetProperty failed. Property - LoginTimeout'
GOTO Error_Handler
END


/*for sql authentication*/
IF @sql_login IS NOT NULL
exec @retcode = sp_OASetProperty @sqlobj, 'LoginSecure', 'False'
ELSE
/*for windows authentication*/
exec @retcode = sp_OASetProperty @sqlobj, 'LoginSecure', 'True'

if @retcode<>0
BEGIN
PRINT 'sp_OASetProperty failed. Property - LoginSecure'
GOTO Error_Handler
END


/*for sql authentication*/
IF @sql_login IS NOT NULL
EXEC @retcode = sp_OAMethod @sqlobj, 'Connect', NULL, @server_name, @sql_login, @sql_password
ELSE
/*for windows authentication*/
EXEC @retcode = sp_OAMethod @sqlobj, 'Connect', NULL, @server_name

if @retcode<>0
BEGIN
PRINT 'sp_OAMethod failed. Method - Connect'
GOTO Error_Handler
END

exec sp_OADestroy @sqlobj
print 'Successfully connected to server ' + @server_name
return 0

Error_Handler:
PRINT '*** ERROR ***'
EXEC @retcode = sp_OAGetErrorInfo @sqlobj, @err_source OUT, @err_desc OUT
exec sp_OADestroy @sqlobj

IF @retcode = 0
BEGIN
print 'Error Source: ' + @err_source
print 'Error Description: ' + @err_desc
end
else
BEGIN
PRINT 'sp_OAGetErrorInfo failed.'
return -2
END

return -1
go
4 дек 03, 13:36    [446538]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
insomnia
Member

Откуда:
Сообщений: 24
sp_OACreate failed. Object - SQLDMO.SqlServer
*** ERROR ***
Error Source: ODSOLE Extended Procedure
Error Description: The specified procedure could not be found.
4 дек 03, 14:34    [446727]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Glory
Member

Откуда:
Сообщений: 104751
А версия сервера у нас какая ?
4 дек 03, 15:02    [446837]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
insomnia
Member

Откуда:
Сообщений: 24
Microsoft SQL Server 7.00 - 7.00.623 (Intel X86)
Nov 27 1998 22:20:07
Copyright (c) 1988-1998 Microsoft Corporation
Desktop Edition on Windows NT 5.0 (Build 2195: Service Pack 3)

и на основном и на linked серверах
4 дек 03, 15:51    [447045]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
insomnia
Member

Откуда:
Сообщений: 24
нет никаких идей? очень нужно...
странно что такой казалось бы насущный вопрос приходится решать совсем хитрыми методами
4 дек 03, 16:12    [447104]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Glory
Member

Откуда:
Сообщений: 104751
7-ки под рукой нету. Могу только сказать что на

Microsoft SQL Server 2000 - 8.00.818 (Intel X86) May 31 2003 16:08:15 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4)

работает.
4 дек 03, 16:17    [447116]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
insomnia
Member

Откуда:
Сообщений: 24
ага, спасибо
4 дек 03, 16:42    [447188]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
insomnia
Member

Откуда:
Сообщений: 24
а что SQLDMO.SqlServer есть только в 2000-ом сервере?
в 7ом нет аналогов?
8 дек 03, 15:04    [451172]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Glory
Member

Откуда:
Сообщений: 104751
2insomnia
BOL говорит следующее

"System Requirements for SQL-DMO
SQL-DMO uses the Microsoft® SQL Server™ ODBC driver to connect to and communicate with instances of SQL Server. Stored procedures supporting SQL-DMO are installed on each instance of SQL Server.

SQL-DMO clients require one of these operating systems:

Microsoft Windows NT® version 4.0 (Service Pack 5 or later).

Microsoft Windows® 98 or Microsoft Windows® 95.
Or
Microsoft Windows® 2000.

SQL-DMO clients require SQL Server ODBC Driver, version 3.80 or later, which ships with SQL Server 2000. The client network library must be properly configured.
"
Т.е. версия sql-я тут вообще непричем. Косвенно это видно например и отсюда
http://support.microsoft.com/default.aspx?scid=kb;en-us;234268&Product=sql

Microsoft SQL Server 7.00 - 7.00.623 (Intel X86)
Может все-таки установить последний сервис пак ?

2All
кто-то может протестировать данный выше скрипт на SQL7 ?
8 дек 03, 19:15    [451772]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
grigorii
Member

Откуда: Владивосток
Сообщений: 150
to Glory

Почему в любом случае вылазит сообщение:

sp_OAMethod failed. Method - Connect
*** ERROR ***
Error Source: ODSOLE Extended Procedure
Error Description: [Microsoft][ODBC SQL Server Driver][DBNETLIB]Указанный SQL-сервер не найден.
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).

я пытался и через NT авторизацию и через sql авторизацию, хотя в EM я его вижу под теми же настройками и таблицы тоже.
21 июл 04, 03:59    [822625]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
grigorii
Member

Откуда: Владивосток
Сообщений: 150
прошу прощения я понял почему. В связи с этим вопрос о том :

можно ли пробить живой ли LinkServer по имени Линка , а то у меня на одном сервере три базы и одна из них может быть не доступна.
21 июл 04, 06:02    [822651]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
grigorii
Member

Откуда: Владивосток
Сообщений: 150
Допер как сделать через link. Спасибо!
21 июл 04, 07:35    [822685]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
olegenty
Member

Откуда: Набережные Челны
Сообщений: 735
весчь!
как раз думал, как прозрачно для юзверя сделать следующее: если удалённый linked сервер доступен, то работать с ним, иначе - с локалыми данными, полученными во время последней синхронизации. а тут готовое решение на блюде!
28 дек 04, 09:44    [1213657]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
demz
Member

Откуда:
Сообщений: 5
grigorii
Допер как сделать через link. Спасибо!


А как можно узнать что Linked Server доступен по его имени если используется авторизация sql ?
1 мар 05, 15:02    [1353028]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Georgie
Member

Откуда:
Сообщений: 92
буду разбираться, спасибо
4 окт 05, 11:18    [1935220]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
BusyMan
Member

Откуда: Москва
Сообщений: 4927
А как сделать тоже самое, но если подсоединенный сервер - 2005-й?

P.S. Можно просто Бизик www.busyman.ru ICQ# 131833549
2 июн 06, 19:04    [2736986]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Проблемас
Guest
Ничего нового не появилось в этом направлении? Уж очень громоздкая проверка...
Сиквел Microsoft SQL Server 2000 - 8.00.944 (Intel X86) May 19 2004 18:32:44 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: )
6 фев 08, 14:32    [5252042]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Проблемас
Guest
Да и не совсем это то что нужно... Задача- проверить работоспособность linked server а не возможность подключения к серверу. Согласитесь, приведенным методом мы проверяем не всё...
6 фев 08, 14:54    [5252242]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Проблемас
Guest
Да, и еще:
@login_timeout	int=60
это для примера или рекомендованный таймаут для такого рода проверок?
Когда источник скрипта- Glory во всем ищешь скрытый смысл
6 фев 08, 14:58    [5252278]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Проблемас
Да, и еще:
@login_timeout	int=60
это для примера или рекомендованный таймаут для такого рода проверок?
Когда источник скрипта- Glory во всем ищешь скрытый смысл

Это default значение. Чтобы можно было вызывать процедуру без указания некоторых параметров.
Никакого рекомендлванного значения на ожидания соединения с сервером не существует.
Существует просто некоторое разумное и приемлимое значение для конкретной задачи.
6 фев 08, 15:04    [5252312]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Проблемас
Guest
Хэх... Под пользователем при вызове процедуры получаю ошибку

EXECUTE permission denied on object 'sp_OACreate', database 'master', owner 'dbo'

Как так? На саму процедуру проверки доступ назначен.
6 фев 08, 15:15    [5252420]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Проблемас
Guest
Из БОЛ:

Permissions
Only members of the sysadmin fixed server role can execute sp_OACreate.

Что ж делать???
6 фев 08, 15:16    [5252435]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Проблемас
Из БОЛ:

Permissions
Only members of the sysadmin fixed server role can execute sp_OACreate.

Что ж делать???

Думать, а зачем это нужно вообще ?
6 фев 08, 15:26    [5252535]     Ответить | Цитировать Сообщить модератору
 Re: Как можно безболезненно узнать что linked server недоуступен?  [new]
Проблемас
Guest
Логика работы пользовательского приложения, установленного в филиале компании зависит от того, есть ли в данный момент соединение с центральной БД.
6 фев 08, 15:30    [5252567]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить