Страница 2 из 2
Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных
Добавлено: 04 Апрель 2016, 21:18
Shur
Ну послушайте, коллеги.
Кейз 1. Если у вас имеется SQL сервер (см. subj), то он в после аварии должен подняться сам.
kreator писал(а): А SQL сервера сами всё делают.
Так что я здесь соглашусь с Креатором.
Кейз 2. На клиенте какую вы хотите запускать валидизацию? ведь на нём ничего не хранится в случае SQL.
Сбой Windows ведёт либо к сбою SQL сервера (тогда см. кейз 1) или к сбою на клиенте (см. кейз 2).
Yufil писал(а): Программа перехватывала сообщение от MS SQL и аккуратно завершалась (или рестартовала, если юзер хотел), если было совсем никак...
А вот эта вещь была бы действительно очень полезна.
Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных
Добавлено: 04 Апрель 2016, 21:19
gopstop2007
Yufil писал(а):1.Работаем, не вышли из приложения - висит 1
2.Пьём кофе, не вышли из приложения - висит 1
3.Ушли вечером, не вышли из приложения - висит ...
4.Выключили компьютер, не вышли из приложения - см.выше
5.Приложение грохнулось и ...
Если висит 1 - есть кто на сервере или как?
1,2,3 - пускай висит и что, чем это противоречит условию для сервера, пока он не зависнет?
4 - шаблоны ABCFree shutdown + отправка 0 на сервер
5 - сервер лишний раз при перезагрузке проверит БД

Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных
Добавлено: 04 Апрель 2016, 21:40
Developer
Shur писал(а): kreator писал(а):
Источник цитаты А SQL сервера сами всё делают.
Зависит от сервера - Action Pervasive к примеру, при разрушении (порче) файла базы сам ничего не сделает

Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных
Добавлено: 04 Апрель 2016, 22:21
Shur
Developer писал(а): Зависит от сервера - Action Pervasive к примеру, при разрушении (порче) файла базы сам ничего не сделает
Гм. Понял. Что ж это он...
Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных
Добавлено: 04 Апрель 2016, 22:50
Игорь Столяров
Developer писал(а):Зависит от сервера - Action Pervasive к примеру, при разрушении (порче) файла базы сам ничего не сделает
И не должен без команды. ActiAn PSQL (через "a") обладает прекрасными средствами защиты и восстановления данных.
Как штатные, так и дополнительные (Backup Agent). PSQL можно за многое пинать, но только не за отказоустойчивость ....
Имея в эксплуатации несколько десятков БД PSQL - разрушенные файлы вижу раз два года (в отличии от TopSpeed).
И не припоминаю случая, что бы мне не удалось вытащить из PSQL данные ....
Процедура восстановления элементарна и прекрасно поддается автоматизации, ее можно прикрутить как реакцию на ошибку.
Но у каждой проблемы есть причина. Я предпочитаю сначала разобраться что случилось, поговорить с персоналом - а потом исправлять.
Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных
Добавлено: 05 Апрель 2016, 0:27
Developer
Игорь Столяров писал(а): И не должен без команды. ActiAn PSQL (через "a") обладает прекрасными средствами защиты и восстановления данных.
Как штатные, так и дополнительные (Backup Agent). PSQL можно за многое пинать, но только не за отказоустойчивость ....
Имея в эксплуатации несколько десятков БД PSQL - разрушенные файлы вижу раз два года (в отличии от TopSpeed).
И не припоминаю случая, что бы мне не удалось вытащить из PSQL данные ....
Процедура восстановления элементарна и прекрасно поддается автоматизации, ее можно прикрутить как реакцию на ошибку.
Но у каждой проблемы есть причина. Я предпочитаю сначала разобраться что случилось, поговорить с персоналом - а потом исправлять.
Игорь полностью с тобой согласен!
У меня также в эксплуатации есть сервера Actian Pervasive PSQL
Игорь Столяров писал(а): Процедура восстановления элементарна и прекрасно поддается автоматизации, ее можно прикрутить как реакцию на ошибку.
Actian Pervasive PSQL работает отлично, но бывали очень редкие случаи, к примеру, неожиданно закончилось дисковое пространство, работа без UPS при аварийном отключении сервера и всё - файлы базы повреждёны.
Так вот эти проблемы необходимо отловить и выполнить определённое действие в автоматическом режиме или полуавтоматическом режиме типа Wizard-а - восстановить из Backup или "лечить" файлы базы.
У меня больше вопросы не как исправить ситуацию с повреждением баз данных различных серверов (каждый SQL сервер имеет свою специфику), а вопросы с диагностикой аварийного завершения работы Windows, SQL Server & Application - и по её результатам определить необходимость провести валидацию баз данных.
Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных
Добавлено: 05 Апрель 2016, 10:04
Yufil
Поищу вечером дома, может быть, найду...
Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных
Добавлено: 05 Апрель 2016, 11:59
kreator
ИМХО, поиск такого решения - трата времени впустую. Правильный SQL сервер сам поднимается. А если не поднимается, то надо звать ботана (как метко сказал Игорь Столяров). Например, сгорел блок питания. По опыту работы в крупной компании со множеством точек/филиалов, IT-директор так объясняет современную ситуацию: "Держать ботана на каждой точке нет смысла. Есть удалёнка на все случаи жизни. Если комп не поднялся - всё равно ехать. Или какую-то местную службу подряжать".
И тут ещё момент. Если SQL сервак падает, то на фига конторе такие данные?
Обнаружить аварийное завершение работы Windows, SQL Server & Application для запуска валидации баз данных
Добавлено: 05 Апрель 2016, 20:17
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) и радуемся