Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных

Флейм. Только просьба - не материться! :)

Модератор: Дед Пахом

Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных

Сообщение Shur »

Ну послушайте, коллеги.
Кейз 1. Если у вас имеется SQL сервер (см. subj), то он в после аварии должен подняться сам.
kreator писал(а): А SQL сервера сами всё делают.
Так что я здесь соглашусь с Креатором.

Кейз 2. На клиенте какую вы хотите запускать валидизацию? ведь на нём ничего не хранится в случае SQL.
Сбой Windows ведёт либо к сбою SQL сервера (тогда см. кейз 1) или к сбою на клиенте (см. кейз 2).
Yufil писал(а): Программа перехватывала сообщение от MS SQL и аккуратно завершалась (или рестартовала, если юзер хотел), если было совсем никак...
А вот эта вещь была бы действительно очень полезна.
Последний раз редактировалось Shur 04 Апрель 2016, 21:19, всего редактировалось 1 раз.
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных

Сообщение gopstop2007 »

Yufil писал(а):1.Работаем, не вышли из приложения - висит 1
2.Пьём кофе, не вышли из приложения - висит 1
3.Ушли вечером, не вышли из приложения - висит ...
4.Выключили компьютер, не вышли из приложения - см.выше
5.Приложение грохнулось и ...
Если висит 1 - есть кто на сервере или как?
1,2,3 - пускай висит и что, чем это противоречит условию для сервера, пока он не зависнет?
4 - шаблоны ABCFree shutdown + отправка 0 на сервер
5 - сервер лишний раз при перезагрузке проверит БД :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных

Сообщение Developer »

Shur писал(а): kreator писал(а):
Источник цитаты А SQL сервера сами всё делают.
Зависит от сервера - Action Pervasive к примеру, при разрушении (порче) файла базы сам ничего не сделает :(
С Уважением, Developer
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных

Сообщение Shur »

Developer писал(а): Зависит от сервера - Action Pervasive к примеру, при разрушении (порче) файла базы сам ничего не сделает
Гм. Понял. Что ж это он...
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных

Сообщение Игорь Столяров »

Developer писал(а):Зависит от сервера - Action Pervasive к примеру, при разрушении (порче) файла базы сам ничего не сделает
И не должен без команды. ActiAn PSQL (через "a") обладает прекрасными средствами защиты и восстановления данных.
Как штатные, так и дополнительные (Backup Agent). PSQL можно за многое пинать, но только не за отказоустойчивость ....
Имея в эксплуатации несколько десятков БД PSQL - разрушенные файлы вижу раз два года (в отличии от TopSpeed).
И не припоминаю случая, что бы мне не удалось вытащить из PSQL данные ....

Процедура восстановления элементарна и прекрасно поддается автоматизации, ее можно прикрутить как реакцию на ошибку.
Но у каждой проблемы есть причина. Я предпочитаю сначала разобраться что случилось, поговорить с персоналом - а потом исправлять.
За теми кто отстал - не возвращаться. (С) Кодекс
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных

Сообщение Developer »

Игорь Столяров писал(а): И не должен без команды. ActiAn PSQL (через "a") обладает прекрасными средствами защиты и восстановления данных.
Как штатные, так и дополнительные (Backup Agent). PSQL можно за многое пинать, но только не за отказоустойчивость ....
Имея в эксплуатации несколько десятков БД PSQL - разрушенные файлы вижу раз два года (в отличии от TopSpeed).
И не припоминаю случая, что бы мне не удалось вытащить из PSQL данные ....

Процедура восстановления элементарна и прекрасно поддается автоматизации, ее можно прикрутить как реакцию на ошибку.
Но у каждой проблемы есть причина. Я предпочитаю сначала разобраться что случилось, поговорить с персоналом - а потом исправлять.
Игорь полностью с тобой согласен! :D

У меня также в эксплуатации есть сервера Actian Pervasive PSQL :D
Игорь Столяров писал(а): Процедура восстановления элементарна и прекрасно поддается автоматизации, ее можно прикрутить как реакцию на ошибку.
Actian Pervasive PSQL работает отлично, но бывали очень редкие случаи, к примеру, неожиданно закончилось дисковое пространство, работа без UPS при аварийном отключении сервера и всё - файлы базы повреждёны.

Так вот эти проблемы необходимо отловить и выполнить определённое действие в автоматическом режиме или полуавтоматическом режиме типа Wizard-а - восстановить из Backup или "лечить" файлы базы.

У меня больше вопросы не как исправить ситуацию с повреждением баз данных различных серверов (каждый SQL сервер имеет свою специфику), а вопросы с диагностикой аварийного завершения работы Windows, SQL Server & Application - и по её результатам определить необходимость провести валидацию баз данных.
С Уважением, Developer
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных

Сообщение Yufil »

Поищу вечером дома, может быть, найду...
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных

Сообщение kreator »

ИМХО, поиск такого решения - трата времени впустую. Правильный SQL сервер сам поднимается. А если не поднимается, то надо звать ботана (как метко сказал Игорь Столяров). Например, сгорел блок питания. По опыту работы в крупной компании со множеством точек/филиалов, IT-директор так объясняет современную ситуацию: "Держать ботана на каждой точке нет смысла. Есть удалёнка на все случаи жизни. Если комп не поднялся - всё равно ехать. Или какую-то местную службу подряжать".
И тут ещё момент. Если SQL сервак падает, то на фига конторе такие данные?
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных

Сообщение Yufil »

Это к вопросу о перехвате сообщений про аварию и завершение приложения, нашёл один из вариантов
Была проблема - в случае разрыва сети, проблем с сервером и т.д. оператору выводятся разные сомнительные сообщения об ошибках в View-Browse-Window, не имеющие отношения к действительности. А хочется узнать, что же случилось на самом деле.
Проблема ещё в том, что сообщение об ошибке, генерируемое драйвером, не перехватывается через методы ABC или в обработчике того или иного события. Поэтому идёт перехват Message с ошибкой
Краткий вариант примерно таков

Объявляем процедуру LocalMessage

Код: Выделить всё

LocalMessage         PROCEDURE  (STRING Msg,<STRING Header>,<STRING Icon>,<STRING Buttons>,UNSIGNED Default,UNSIGNED Modal) ! Declare Procedure
SaveErr   Group,Pre(SE)
Error     Cstring(300)
ErrorCode Long
FileError Cstring(1000)
FileErrorCode Long
          End

ErrLevel  Long,Static,Thread  ! Чтобы не отрабатывать повторную ошибку
FstrCount Long
  CODE
       Se:ErrorCode = ErrorCode()
       Se:Error = Error()
       Se:FileErrorCode = FileErrorCode()
       Se:FileError = FileError()
       ! Переключаемся на стандартный Message
       System{Prop:MessageHook}=0
       ! Выдаём стандартное сообщение
       Ret#=Message(Msg,Header,Icon,Buttons,Default,Modal)
       If ERRORCODE() ! Возможно, Inlist(ErrorCode(),90,47)
          Case Message('Нет доступа к серверу или базе данных .|' & |
             Choose(Se:Error & Se:FileError<>'', ' Ошибка ' & Se:Error & ' ' & Se:FileError,''),  |
             'Внимание!',Icon:Question,'Перезапуск|Завершить|Дальше')
          Of 1
            ! Перезапуск 
            Do RunCommand
          Of 2 
            ! Завершение 
            Halt(0)
          Of 3
          END
       End
       System{Prop:MessageHook} = Address(LocalMessage)
       Return Ret#

RunCommand  Routine  ! Перезапуск приложения
            Data
            Code
           .... 
            Chain( Command('')) 
            Halt(0)
            Exit
В начале программы указываем System{Prop:MessageHook} = Address(LocalMessage) и радуемся
Ответить