Дошли руки убрать у всех филиалов права редактировать справочники контрагентов и товаров. Скомандовал всем редактировать их в центральной базе. Но понятно, что работать в одной базе - меньше телодвижений, да и связь может прерваться.
Есть штатные средства более тонко разграничить права? Не просто разрешить или запретить редактирование любой карточки, а в одной-двух папках классификатора разрешить редактировать карточки, во всех же остальных - низя, только в центральную базу лезь.
1. Кроме причин "работать в одной базе проще", "при отсутствии связи с центром нельзя редактировать справочник товаров", после нескольких дней работы в новом режиме (до этого с 2008-го года ходили по "детским граблям", плевались, но работали :) ) выяснилась еще одна: рассылка из центра может задерживаться из-за очереди - кто-то отослал большую рассылку, в результате все, кому нужны обновления справочников, курят.
Написал я средство управления скидками, и теперь маркетологи могут в любой момент запулить в рассылку несколько тысяч карточек с новыми скидками. А почтовик, смотрю, весьма медленно такие рассылки переваривает. Возможно, надо не просто insert into SMPOSTQUEUE делать?
Да вот вроде железо не старое, Хеон 5140, 4 ядра, судя по диспетчеру, сколько из них реальных, не знаю, 12 гиг оперативки, под оракл выделено 8.
В моменты формирования тех больших пакетов, которые надолго задерживали рассылку, диск был загружен на 100%. Подробно не анализировал.
Можешь попробовать, скоко у тебя будет молоть. Понятно, что у всех справочники разные, но можно подобрать, чтоб в очередь поставить пару тыщ карточек.
код:
SQL код:
create or replace procedure SMPOSTCARD(p_article varchar2) is
begin
INSERT INTO SMPOSTQUEUE(ENQSEQ, ENQTIME,TARGET,OBJTYPE,OBJID, TRANSFLAGS,COMMENTARY)
VALUES(SMPOSTQUEUESEQ.nextval ,SYSDATE, null, 'CD' , p_article , 0 , 'auto' );
INSERT INTO SMPOSTQUEUE(ENQSEQ, ENQTIME,TARGET,OBJTYPE,PARAMSTR, OBJID, TRANSFLAGS,COMMENTARY)
VALUES(SMPOSTQUEUESEQ.nextval ,SYSDATE, null, 'LP' ,'SMLocalPriceArticle', p_article , 0 , '' );
end SMPOSTCARD;
begin
for c in (
select c.article
from supermag.smcard c, supermag.smgoods g
where c.article = g.article
and c.cashload = 0
group by c.article
having sum(g.quantity) > 0
) loop
update supermag.smcard set cashload = 1 where article =c.article;
smpostcard(c.article);
end loop;
end;