Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Повторно пытаюсь выяснить, может кто подскажет дельное... Задача простая : - имеется linked server определенный на моем сервере (SQL Server 2000) ; - по его имени я определяю, что соответствующий КОМПЬЮТЕР в сети; - однако, если на том компьютере НЕ ЗАПУЩЕН SQL Server или MSDE, любой запрос к нему с моего сервера, есссно, обваливается. Печальней всего, что при этом не формируется значение @@error !! А если вызов где-то глубоко по стеку вложенных процедур, то обваливается так весь стек ! Как все-таки заставить SQL формировать "нормальный" ответ. И нет ли какого-то средства ( хранимой процедуры ) выполняющей определение доступности linked server'а. На всякий случай - работаю в домейне W2K, SQL Server (RTM) 8.00.194, MDTC запущен. В BOL , увы, ничего не нашел. Плохо искал ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2002, 05:07 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Утилита odbcping ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2002, 07:21 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
2Glory : Большое спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2002, 08:11 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Gregory как вы по имени определяете, что соответствующий КОМПЬЮТЕР в сети? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2002, 20:19 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Делаю на него PING по имени компьютера. Результаты кладу во временную таблицу и анализирую ее содержание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2002, 03:58 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Gregory Если не сложно можно пример кода, я пробовал через xp_cmdshell 'ping 192.192.192.192', результат вижу, но как его в таблицу засунуть на ходу не знаю. И второе если механизм проверки link server'а чемто вроде: select * from linkedserver.master.dbo.table if @@error!=0 begin select * from master.dbo.dublikattable end потому-что xp_cmdshell 'ping 192.192.192.192' выполняется 3 секунды, а хотелось бы проверить наличие почти мгновенно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2002, 18:24 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
2Александр Третьяков 1). "пример кода" : ... CREATE TABLE #TBLPING ([idx] [int] IDENTITY (1,1) NOT NULL, [val] [varchar] (8000) NULL ) set @rabStr='PING ' + @LinkServer INSERT INTO #TBLPING (val) EXEC master..xp_cmdshell @Val = @rabStr if exists(SELECT * FROM #TBLPING WHERE val LIKE '%Unknown host %') set @message='Нет связи с linked server"ом ' else begin Delete #TBLPING set @rabStr='ODBCPING /S' + @LinkServer+' /Usa ' INSERT INTO #TBLPING (val) EXEC master..xp_cmdshell @Val = @rabStr if exists(SELECT * FROM #TBLPING WHERE val LIKE '%COULD NOT CONNECT TO SQL SERVER%') set @message='Linked server не отзывается.' else ... и не забыть в конце drop table #TBLPING 2)."И второе если механизм проверки link server'а чемто вроде: select * from linkedserver.master.dbo.table ..." У меня подобное шло около 23 секунд и кончалось обвалом процедуры, в которой подобным образом действовал. Прекращалась обработка всего стека процедур над ней ! И никакой ошибки @@error не возвращалось. Насчет "мгновенно" - большие сормнения , а время обработки соответствующих команд в сети и время реакции на поиск и ответ SQL Server куда может подеваться ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2002, 05:57 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Gregory Спасибо за примеры кода, но я вот думаю и мечтаю открываю Enterprise Manager и вижу как плавно загораються зеленые уголки около связаные серверов, и посещяють меня мысли как это ОН делает?, я тоже так хочу. А если без шуток должон быть механизм какой то готовый, мы не первые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2002, 17:09 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
потому-что xp_cmdshell 'ping 192.192.192.192' выполняется 3 секунды, а хотелось бы проверить наличие почти мгновенно. IMHO в данном случае больше время тратится на загрузку command.com и затем на возврат вывода выполненных команд. Если вы напишите расширенную хранимую процедуру, то думую, что время выполнения будет почти "мгновенным" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2002, 19:45 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Небольшая поправка MS SQL Server 2000 запускает cmd.exe, если работает на Windows NT/2000, и cmdwrap.exe в противном случае (а он, cmdwrap.exe, вызывает command.com). Что касается Ping, то именно он и "съедает" 3 секунды, т.к. времена, затрачиваемые на сетевые коммуникации самые большие. Если бы 3 сек уходило на загрузку командного интерпретатора и возврат вывода выполненных команд, то любой вызов xp_cmdshell требовал бы нескольких секунд... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2002, 22:16 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Glory и bik_ я думаю проблема, если можно ее назвать так, заключена в двух: 1. время потраченое на загрузку command.com (не очень большое xp_cmdshell 'dir c:\*.*' работает неплохо, но можно переделать) 2. время потраченое на ping, даже и под командной строки тратиться порядка 3с, именно здесь задержка. Нужен механизм "мгновенной проверки", механизм в отличие от ping не проверяющий прохождение пакетов указаной длины 3 раза. Я понимаю сеть это узкое место, но ... надо как то с этим бороться. Выход должен быть всегда. Glory я не исключаю возможности написать новою разширеную хранимую процедуру, но с помощью какого механизма, как сделать мгновенный ping? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2002, 08:26 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
2Александр Третьяков: Сорри, но твой последний пост я не могу даже комментировать... Может это облегчит жизнь народу: code:ping -n 1 MyHost ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2002, 08:34 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
bik_ я понимаю, что можно уменьшить количество проверок до одной и можно уменьшить размер пакета, но ... . Когда мы открываем Enterprise Manager, то зеленые квадратики возле серверов загораються очень даже быстро (у меня сервера разбросаны по городу и скорость между ними 144кб), посоветуюсь на досуге с сетевиками и если что надумаю напишу сюда. Попробую сделать что-то вроде: if existsserver('192.168.1.1') begin select * from [192.168.1.1].master.dbo.table end else begin select * from master.dbo.tabledublicat end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2002, 23:23 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
2Алекандр Третьяков: Когда мы открываем Enterprise Manager, то зеленые квадратики возле серверов загораються очень даже быстро (у меня сервера разбросаны по городу и скорость между ними 144кб), посоветуюсь на досуге с сетевиками и если что надумаю напишу сюда. EM "рисует зеленые квадратики" тогда, когда ему удается опросить удаленный сервер по SMB на предмет того, что сервис MSSQLServer запущен. Кроме того, еще EM пытается опросить удаленный сервис "SQL Listener" что слушает на UDP 1434 и возвращает описание сервера (то же, что делают isql -L, sqlping и т.п.). Так вот, чтобы тебе все это сделать, придется: 1. НаписАть Extended Stored Procedure, которая бы опрашивала удаленную машину на предмет того, запущен ли сервис MSSQLServer 2. Открыть SMB порты для этого (они, судя по всему уже открыты ), что плохо для security Либо пытаться соединиться с удаленным сервером. Этот способ самый правильный. Завтра приведу пример кода для такой процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2002, 09:53 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
bik_ я буду благодарен за пример кода, и если можно подробнее про SMB порты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2002, 20:24 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Может пригодится... <a>http://www.sqlmag.com/Articles/Index.cfm?ArticleID=14327&action=showfaq</a> Q. How can I list all available SQL Servers in my application? A. Two methods :- 1. The ISQL and OSQL commands have a -L option to list servers. This can then be run from xp_cmdshell. Exec master..xp_cmdshell 'ISQL -L' Exec master..xp_cmdshell 'OSQL -L' 2. Use SQL-DMO. The method/api is ListAvailableSQLServers. This returns a NameList object enumerating network-visible SQL Servers. Details on DMO are provided in the Books-Online and/or a separate help file. These are installed as part of any SQL Server install. A detailed example is below :- To enumerate all network-visible SQL servers using SQL-DMO objects, create a new standard EXE project and add a reference to sqldmo.rll. This file can be found in \Binn\Resources\1033\sqldmo.rll under the SqlServer70 directory. Now add this code and declaration in your form's code: Private Function GetAllSqlServerCollection(colSqlServers As Collection) As Boolean Dim intIndex As Integer Dim oApplication As SQLDMO.Application Dim oNameList As SQLDMO.NameList Set oApplication = New Application With oApplication Set oNameList = .ListAvailableSQLServers With oNameList For intIndex = 1 To .Count colSqlServers.Add (oNameList.Item(intIndex)) Next End With End With Set oApplication = Nothing GetAllSqlServerCollection = True End Function This code quickly fetches a list of SQL servers and can be put inside a combo box's drop-down event to always get a refreshed list of SQL servers on your form. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2002, 13:58 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, забыл аттрибут HREF указать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2002, 14:13 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ RatTai, будем пробовать. Есть еще одна проблемка, определили что linked server доступен, начали качать данные(нужно на перекачку 3 секунды), через 1.5 секунды канал упал (обрыв связи), SQL Server начинает мутить около 15-20 секунд, аж потом говорит, что все. @error=0, ошибки нет , и мутит долго. Общался с сетевиками говорят: а) мгновенных проверок не бывает; б) особенно при нестабильных каналах. Короче пробую и проверяю. Еще раз спасибо RatTai. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2002, 21:35 |
|
||
|
Как средствами T-SQL определить , что linked server доступен ?
|
|||
|---|---|---|---|
|
#18+
Можно еще вот такую процедульку использовать (базируется на вызове SQLDMO из T-SQL в sql7 работает в 2000 не проверял. Если сервер присутствует - ответ получается быстро - если нет - то таймаут. Тут уж ничего не попишешь). CREATE PROCEDURE [sp_storage_test_connection] @srv_name varchar(255), @login varchar(255), @password varchar(255), @ret varchar(255) OUT AS BEGIN declare @object int declare @hr int select @ret = 'False' EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT EXEC @hr = sp_OAMethod @object, 'Connect', NULL, @srv_name, @login, @password EXEC @hr = sp_OAMethod @object, 'VerifyConnection', @ret OUT EXEC @hr = sp_OADestroy @object END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2002, 00:16 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32028856&tid=1822738]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
138ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 265ms |
| total: | 506ms |

| 0 / 0 |
