powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / SQLSTATE '52003'
12 сообщений из 12, страница 1 из 1
SQLSTATE '52003'
    #35384733
dialler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL Anywhere 10 10.0.1.3685 (EBF были и другие, но проблема не исчезает)

есть в базе ивенты, которые время от времени надо обновлять посредством скрипта (много баз, поэтому и скрипт) примерно следующего содержания:

***
begin DROP EVENT "auto_nightly"; exception when others then end;

CREATE EVENT "auto_nightly"
HANDLER
BEGIN
while (exists (select 1 from dbo.sa_conn_info() i where (i.DBNumber=connection_property('DBNumber'))
and (i.name like '%_backup_%' or i.name='auto_daily' or i.name like 'auto_create_%')) )
loop
WAITFOR DELAY '00:01:00';
end loop;
END;
***

после применения этого скрипта на некоторых базах иногда при выполнении данного ивента в лог вылезает ошибка "caused SQLSTATE '52003' Column 'DBNumber' not found" ну и ивент останавливается :(

лечится так: открыть ивент "auto_nightly" сделать пустое изменения (например поставить enter между любыми строками) и сохранить. после этого всё начинает работать. НО ЭТО НЕ ДЕЛО :(

скажите, кто-нибудь с подобным сталкивался? как лечили?
...
Рейтинг: 0 / 0
SQLSTATE '52003'
    #35385863
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
diallerесть в базе ивенты, которые время от времени надо обновлять посредством скрипта (много баз, поэтому и скрипт)На самом деле, надо всегда все изменения в базе делать скриптами. И не потому что баз много, а потому что изменения в скриптах отслеживать проще и при нужде восстанавливать базу легче.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
// во первых, удалять надо так:
if exists (select  1  from SYS.SYSEVENT where event_name='auto_nightly') then
       // во вторых, имя объекта в кавычки брать не обязательно.
       // Это нужно только в случае использования служебных символов в имени объекта, а это само по себе дурная идея.
       DROP EVENT auto_nightly;
end if

CREATE EVENT auto_nightly
 // здесь наверное должно быть SCHEDULE или как ты запускаешь событие?
HANDLER
BEGIN 
  // Долго пытался понять смысл этого цикла, но не смог.
  while (exists (select  1  from dbo.sa_conn_info() i where (i.DBNumber=connection_property('DBNumber'))
                 and (i.name like '%_backup_%' or i.name='auto_daily' or i.name like 'auto_create_%'))  )
   loop 
    WAITFOR DELAY '00:01:00';
  end loop;
END;

diallerпосле применения этого скрипта на некоторых базах иногда при выполнении данного ивента в лог вылезает ошибка "caused SQLSTATE '52003' Column 'DBNumber' not found" ну и ивент останавливается :(Событие может запускаться и при отсутствии активных коннектов. А в этом случае функция connection_property() теряет смысл.
...
Рейтинг: 0 / 0
SQLSTATE '52003'
    #35385870
еще стоило-бы посмотреть что возвращает dbo.sa_conn_info() если коннектов нет ...
...
Рейтинг: 0 / 0
SQLSTATE '52003'
    #35385880
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с новым годомеще стоило-бы посмотреть что возвращает dbo.sa_conn_info() если коннектов нет ...Уже смотрел :) Пустой резалтсет оно возвращает.
...
Рейтинг: 0 / 0
SQLSTATE '52003'
    #35387853
dialler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlСобытие может запускаться и при отсутствии активных коннектов. А в этом случае функция connection_property() теряет смысл.

как? ведь ивент создаёт коннект, соответственно коннект как минимум один есть всегда! или я не прав?
...
Рейтинг: 0 / 0
SQLSTATE '52003'
    #35388932
dialler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с новым годомеще стоило-бы посмотреть что возвращает dbo.sa_conn_info() если коннектов нет ...
как можно посмотреть и при этом не сгенерировать коннект?
...
Рейтинг: 0 / 0
SQLSTATE '52003'
    #35392795
dialler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
неужели ни у кого, кроме меня такой проблемы нет?
...
Рейтинг: 0 / 0
SQLSTATE '52003'
    #35394305
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
diallerнеужели ни у кого, кроме меня такой проблемы нет?А ты объясни что данный эвент делать то должен? А то может твою исходную проблему можно (и нужно) решать другими способами? Эвенты вещь полезная, но очень редко когда они действительно нужны.
...
Рейтинг: 0 / 0
SQLSTATE '52003'
    #35394351
dialler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl diallerнеужели ни у кого, кроме меня такой проблемы нет?А ты объясни что данный эвент делать то должен? А то может твою исходную проблему можно (и нужно) решать другими способами? Эвенты вещь полезная, но очень редко когда они действительно нужны.

ивент запускается ночью. и делает расчёты, бэкап и пр. отключает пользователей на время выполнения. и чтобы отключить тех, кого надо, а лишних (из других баз) не отключать я и пытаюсь получить DBNumber и имена запущенных ивентов (по этим именам я и определяю когда кого отключать и не пускать)

но проблема не в этом. проблема в том, что селект из dbo.sa_conn_info() даёт ошибку из сабжа
...
Рейтинг: 0 / 0
SQLSTATE '52003'
    #35394428
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
diallerивент запускается ночью. и делает расчёты, бэкап и пр. отключает пользователей на время выполнения.Зачем это??? Пользователи ни бэкапу, ни расчетам не мешают (если конечно уровень изоляции стоит).
Процедура требующая монопольного доступа к базе обычно шатдаунит базу с обрубанием существующих коннектов, запускает базу снова внутри локального движка (dbeng вместо dbsrv), делает свое грязное монопольное дело, гасит dbeng и перезапускает базу в dbsrv.
Читай БОЛ про команды stop database и start database.

diallerно проблема не в этом. проблема в том, что селект из dbo.sa_conn_info() даёт ошибку из сабжаПроблема все-же в изначально неправильном подходе :) Не надо работать с базой монопольно, это очень дурная идея. Сегодня твоя контора сидит целиком в одном офисе, завтра она разрастется и в базу будут приходить юзера из других часовых поясов. А ты их не будешь пускать в разгар рабочего дня только потому что у тебя ночь и пора делать бэкап? :)
...
Рейтинг: 0 / 0
SQLSTATE '52003'
    #35398202
dialler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl diallerивент запускается ночью. и делает расчёты, бэкап и пр. отключает пользователей на время выполнения.Зачем это??? Пользователи ни бэкапу, ни расчетам не мешают (если конечно уровень изоляции стоит).
Процедура требующая монопольного доступа к базе обычно шатдаунит базу с обрубанием существующих коннектов, запускает базу снова внутри локального движка (dbeng вместо dbsrv), делает свое грязное монопольное дело, гасит dbeng и перезапускает базу в dbsrv.
Читай БОЛ про команды stop database и start database.

diallerно проблема не в этом. проблема в том, что селект из dbo.sa_conn_info() даёт ошибку из сабжаПроблема все-же в изначально неправильном подходе :) Не надо работать с базой монопольно, это очень дурная идея. Сегодня твоя контора сидит целиком в одном офисе, завтра она разрастется и в базу будут приходить юзера из других часовых поясов. А ты их не будешь пускать в разгар рабочего дня только потому что у тебя ночь и пора делать бэкап? :)

отлично. спасибо. попробую изменить схему работы по твоему совету.

кста, от ошибки 52003 я избавился (кажется избавился, потому как тестирование пока не очень продолжительное было) путём вынесения проверки (имею ввиду селект из dbo.sa_conn_info) из ивента в отдельную функцию. видимо sybase как-то не очень корректно выполняет ивенты.
...
Рейтинг: 0 / 0
SQLSTATE '52003'
    #35452350
dialler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
diallerкста, от ошибки 52003 я избавился (кажется избавился, потому как тестирование пока не очень продолжительное было) путём вынесения проверки (имею ввиду селект из dbo.sa_conn_info) из ивента в отдельную функцию. видимо sybase как-то не очень корректно выполняет ивенты.

почти месяц на такой схеме работает почти 30 баз. полёт нормальный.

вывод: делать селекты из системных таблиц в ивентах чревато проблемами.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / SQLSTATE '52003'
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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