SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

синхронное или асинхронное обновление



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
_oracle_rules
Участник
Участник



Joined: 27 Nov 2007
Posts: 7

PostPosted: Tue Nov 27, 2007 1:20 pm    Post subject: синхронное или асинхронное обновление Reply with quote

добрый день.
есть проблема разделения ресурсов между параллельными процессами, по доброте душевной решил выполнить синхронизацию через таблицу указав некий первичный ключ. Если процесс хочет захватить ресурс, то пишет в таблицу уникальные данные, если получает отбой что запись уже есть(обрабатывается другим процессом) соотвественно необрабатывает и т.д. Но на рабочей версии получил полный хаос, получается что параллельные процессы легко вставляют данные с одинаковой уникальностью не получив предупреждения об ошибке... админы утверждают что в сапе есть асинхронный процесс, который сбрасывает обновленные данные в СУБД... короче может кто-то пояснить как происходит обновление данных в СУБД со строны сервера приложений....
Back to top
View user's profile Send private message
_oracle_rules
Участник
Участник



Joined: 27 Nov 2007
Posts: 7

PostPosted: Tue Nov 27, 2007 1:30 pm    Post subject: Reply with quote

короче вопрос сводится к элементарному когда я делаю

insert table.

" вот здесь запись гарантировано записана в СУБД ??? или процесс записи все-таки асинхронен?
Back to top
View user's profile Send private message
dump
Участник
Участник



Joined: 09 Nov 2007
Posts: 7

PostPosted: Tue Nov 27, 2007 1:43 pm    Post subject: Reply with quote

два вопроса -
1.вы точно вставляете в таблицу БД - а не во внутреннюю таблицу сервера приложений ?
2.если да - то есть ли commit после INSERT ?
Back to top
View user's profile Send private message
_oracle_rules
Участник
Участник



Joined: 27 Nov 2007
Posts: 7

PostPosted: Tue Nov 27, 2007 1:49 pm    Post subject: Reply with quote

dump wrote:
два вопроса -
1.вы точно вставляете в таблицу БД - а не во внутреннюю таблицу сервера приложений ?
2.если да - то есть ли commit после INSERT ?


да конечно таблица субд.

вот код

loop at l_request_items assigning <fs>.
zti_request_log-id_request = <fs>-id.
zti_request_log-job_id = p_job_id.
zti_request_log-job_name = p_j_name.
zti_request_log-status = 0.
insert zti_request_log.
if sy-subrc = 0.
is_active = 0. // все ок данная позиция свободна
else.
is_active = 1. // уже кем-то обрабатывется !!!
endif.
<fs>-status = is_active.
endloop.

commit work.

вот если этот код несколько процессов будут выполнять параллельно с одними теме же данными я всегда гарантировано получу ошибку при вставке???
Back to top
View user's profile Send private message
John Doe
Модератор
Модератор


Age: 46
Joined: 05 Nov 2007
Posts: 725
Location: КраснАдар

PostPosted: Tue Nov 27, 2007 1:55 pm    Post subject: Reply with quote

Commit включите в цикл.
Back to top
View user's profile Send private message Blog
_oracle_rules
Участник
Участник



Joined: 27 Nov 2007
Posts: 7

PostPosted: Tue Nov 27, 2007 2:02 pm    Post subject: Reply with quote

John Doe wrote:
Commit включите в цикл.


а что даст построчный коммит? у меня вопрос синхронно фиксируются изменения или все-таки регистрируется отдельным процессом, как утверждают админы? кто даст гарантию что после коммита данные действительно обновлены в таблицах? может админы вс-таки демонизируют сап?
Back to top
View user's profile Send private message
John Doe
Модератор
Модератор


Age: 46
Joined: 05 Nov 2007
Posts: 725
Location: КраснАдар

PostPosted: Tue Nov 27, 2007 2:12 pm    Post subject: Reply with quote

Ну вроде если две такие программы работаю одновременно - то до коммита они не инсертят БД и, соответственно, друг о друге они не в курсе... Отсюда дубли записей.
Back to top
View user's profile Send private message Blog
_oracle_rules
Участник
Участник



Joined: 27 Nov 2007
Posts: 7

PostPosted: Tue Nov 27, 2007 2:19 pm    Post subject: Reply with quote

John Doe wrote:
Ну вроде если две такие программы работаю одновременно - то до коммита они не инсертят БД и, соответственно, друг о друге они не в курсе... Отсюда дубли записей.


хорошо я делал
insert table.

потом запускал в execsql селект.... данные были!!!! как тогда данный факт с выше сказнным непонятно...
Back to top
View user's profile Send private message
John Doe
Модератор
Модератор


Age: 46
Joined: 05 Nov 2007
Posts: 725
Location: КраснАдар

PostPosted: Tue Nov 27, 2007 2:30 pm    Post subject: Reply with quote

До коммита апдейты ложатся в какую то область памяти в рамках конкретного сеанса работы. Внутри этого сеанса можно сразу же сделать селект, который пройдет успешно. Только в другом сеансе данных не будет...

Вы уже попробывали, что я предложил?
Back to top
View user's profile Send private message Blog
vga
Мастер
Мастер


Age: 185
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Tue Nov 27, 2007 2:37 pm    Post subject: Reply with quote

Ну для начала
commit work and wait.
гарантирует завершение процесса обновления при успешном sy-subrc.

Quote:
потом запускал в execsql селект.... данные были!!!! как тогда данный факт с выше сказнным непонятно...


Возможно произошел неявный commit.


3) Сделайте, как John Doe предложил, вставьте
commit work and wait.

И все равно ваше решение не надежное. В sap для синхронизации лучше использовать объекты блокировок (Lock object)


Last edited by vga on Tue Nov 27, 2007 2:48 pm; edited 2 times in total
Back to top
View user's profile Send private message Blog Visit poster's website
_oracle_rules
Участник
Участник



Joined: 27 Nov 2007
Posts: 7

PostPosted: Tue Nov 27, 2007 2:38 pm    Post subject: Reply with quote

John Doe wrote:
До коммита апдейты ложатся в какую то область памяти в рамках конкретного сеанса работы. Внутри этого сеанса можно сразу же сделать селект, который пройдет успешно. Только в другом сеансе данных не будет...

Вы уже попробывали, что я предложил?


коммит я пославлю построчный...
но заметьте ведь execsql это прямое обращение к СУБД...

и такой вопрос 2 чувака пишут в одну таблицу одни и теже данные с уникальным ключом одновременно, проверка дает ок, они делаю коммит в полной уверенности что данные сохранены... не пойму где констенция данных???
Back to top
View user's profile Send private message
_oracle_rules
Участник
Участник



Joined: 27 Nov 2007
Posts: 7

PostPosted: Tue Nov 27, 2007 3:14 pm    Post subject: Reply with quote

vga wrote:
Ну для начала
commit work and wait.
гарантирует завершение процесса обновления при успешном sy-subrc.

Quote:
потом запускал в execsql селект.... данные были!!!! как тогда данный факт с выше сказнным непонятно...


Возможно произошел неявный commit.


3) Сделайте, как John Doe предложил, вставьте
commit work and wait.

И все равно ваше решение не надежное. В sap для синхронизации лучше использовать объекты блокировок (Lock object)



все спасибо, думаю execsql выполняет неявный коммит... понятно что я не могу абсалютно ориентироваться на субд... жаль оракл крутится в холостую... надо использовать объекты блокировок....
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.