Блог

    Sybase Replication Server
    В данном блоге планируется освещать некоторые практические вопросы работы с репликационным сервером. При чем, не вопросы администрирования (они отчасти документированы) а бОльшей частью специфичные вопросы работы со структурами и логикой
  • RSS подписка

Последние записи


Теги

Информация

Sybase Replication Server


Странная ошибка

ASE 15.5 RS 12.6

В чем ошибка- создана публикация, подписка. Данные НЕ идут.
Внешне все совершенно в порядке

Обнаружено сообщение в логе ASE, лтм все же ругался:

W. 2014/11/06 18:23:55. WARNING #32020 DIST(*** ###.###) - xec/dist.c(3002)
Table '%%%' is not defined.

Ситуация странная- флажок sp_setreptable взведен,
репликейшен дефинишен есть, публикация есть, подписка.
Но такое ощущение, что лтм не видит реп деф
Крутили по-всякому, вплоть до удаления и создания реп дефинишенов.
Не помогло.

А излечилось оно в конце концов очень просто:

sp_setreptable %%%,false
sp_setreptable %%%,true

Недоумеваю почему, но помогло
добавлено: 06 ноя 14 просмотры: 1539, комментарии: 0



Как дропнуть fsc при наличии роута

Удалить fsc- небольно и недолго, команда вроде

drop function string class <my_name>_function_class

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

Сегодня ожидал некоторый сюрприз, сообщение типа

Server Message: Number 15436, Severity 12
Server '****_RS', Line 0:
Inconsistency in RSSD table 'rs_repdbs'.

Много думал, решение оказалось простым и даже очевидным. Допустим, по роуту связаны сервера A_RS и B_RS
На A_RS создан FSC, он же назначен некоторым коннекшенам на этом сервере.
На сервере B_RS созданы некоторые объекты, которым этот FSC так же назначен. Так вот пока они существуют- удалить FSC невозможно. Сначала на B_RS нужно

drop function string ****.rs_insert for <my_name>_function_class --
drop function string ****.rs_update for <my_name>_function_class --
drop function string ****.rs_delete for <my_name>_function_class --

для всех таких объектов. И только после дропать, собственно, сам FSC

Server Message: Number 15116, Severity 0
Server '****_RS', Line 0:
Function string class '<my_name>_function_class' is dropped.

..и будет всем счастье :)
добавлено: 11 июн 14 просмотры: 1389, комментарии: 0



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

Коллеги иногда терзали серьезным вопросом- можно ли проверить состояние репликации в текущий момент?
Доступа к 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

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

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

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



Проблема при alter replication definition

После alter одного из replication definition связанные по route базы rssd попадали с ошибкой вроде

E. 2014/02/23 11:35:29. ERROR #11082 DSI EXEC(102(1) <<сервер>>.rssd) - s/stsrep.c(518)
An exception occurred while trying to apply a logical command.
I. 2014/02/23 11:35:29. The DSI thread for database '<<сервер>>.rssd' is shutdown.

Причина непонятна и неочевидна. Судя по всему, оставшиеся обломки в rssd каким-то образом нарушают нормальную работу.

Чем излечили:
1.resume connection to .. skip transaction
2.drop subscription "ssss" for article "aaaa" in "pppp" with primary at ssss.bbbb with replicate at ssss.bbbb without purge
3.drop article..
4.drop replication definition..

После пересоздания replication definition он был подписан. Подобных ошибок не возникало.
добавлено: 27 фев 14 просмотры: 1343, комментарии: 0



О репликации поля с типом text

Периодически разработчики высказывают живой интерес- можно ли подписать на репликацию поле с типом text?

Можно

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32511.1510/html/rsadmin_vol_1/X27113.htm

На небольших таблицах это не вызывает каких-либо сложностей.

Но недавно сложилась следующая ситуация- нужно было подписать очень большую таблицу с полем типа text. На репликационном сервере скрипты применились без замечаний. А вот дальше вышла накладка.

sp_setreptable работал очень долго. При чем, этот процесс нарушал нормальную работу ase сервера и репликации. Пришлось сделать kill. После чего процесс длительное время ролбэчился.

Судя по всему, после этой команды сервер полностью перебирает таблицу, выбирает и индексирует текстовые поля. И если таблица действительно большая- процесс занимает много времени, использует серьезные ресурсы.

Рекомендация для разрабочтиков- избегать использования полей с типом text, разумно вместо них использовать varchar, nvarchar
добавлено: 18 фев 14 просмотры: 1284, комментарии: 0



О неприличных словах и выражениях

Сегодня попросили подписать таблицу. Одно из полей называлось "Name". На днях та же ситуация возникла с полем "Last". Неужели в мире мало слов, букв и цифр?

Создавая структуры следует учитывать Reserved words, избегать их в наименовании структур.

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc32410_1501/html/refman/X69308.htm
добавлено: 18 фев 14 просмотры: 1442, комментарии: 0