Каким образом на основании данных SQL сервера проверить работоспособность репликации

добавлено: 18 мар 14
понравилось:0
просмотров: 1405
комментов: 0

теги:

Автор: Дмитрий Горчилин

Коллеги иногда терзали серьезным вопросом- можно ли проверить состояние репликации в текущий момент?
Доступа к RepServer у них нет, средства мониторинга не всегда удобны.
При чем, разработчикам очень хотелось получить такую информацию из базы ASE сервера, доступ к этой информации желательно было обеспечить из приложения.

Логика оказалась достаточно проста:

ЭТО запускаем на rssd
/* Запусти меня в базе RSSD конкретного репсервера */
select
'insert into #databases values('+convert(char(3),dbid)+','+'"'+dsname+'.'+dbname+'"'+')'
from rs_databases


Полученный фрагмент вставляется в данный скрипт:
/* Запусти меня на той базе, куды чего-то реплицируется*/

create table #databases(dbid integer,dbname char(30))
print 'Да здравствует Дмитрий Горчилин!'

insert into #databases values(NNN,"SSS.BBB")
..

select
dbname,datediff (mi,origin_time,dest_commit_time),origin_time,dest_commit_time
from rs_lastcommit,#databases where dbid=origin
and abs(datediff (dd,getdate(),dest_commit_time))<10
and abs(datediff (dd,getdate(),origin_time))<10
order by datediff (mi,origin_time,dest_commit_time),dest_commit_time DESC

drop table #databases

То есть, мы получаем информацию о том, какое время назад, с какого именно источника была применена транзакция. Само собой, при этом нужно проконтролировать адекватное время на серверах. С серверами в других часовых поясах могут быть забавные но легко устранимые изъяны.

Очень наглядно- видна ЗАДЕРЖКА с которой применяются транзакции.

И еще один момент- если данные не обновляются это не значит что все умерли. Иногда транзакции просто не образуются на источнике. По Фрейду- бывают и просто сны :)

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии