Posted: Tue Nov 27, 2007 1:20 pm Post subject: синхронное или асинхронное обновление
добрый день.
есть проблема разделения ресурсов между параллельными процессами, по доброте душевной решил выполнить синхронизацию через таблицу указав некий первичный ключ. Если процесс хочет захватить ресурс, то пишет в таблицу уникальные данные, если получает отбой что запись уже есть(обрабатывается другим процессом) соотвественно необрабатывает и т.д. Но на рабочей версии получил полный хаос, получается что параллельные процессы легко вставляют данные с одинаковой уникальностью не получив предупреждения об ошибке... админы утверждают что в сапе есть асинхронный процесс, который сбрасывает обновленные данные в СУБД... короче может кто-то пояснить как происходит обновление данных в СУБД со строны сервера приложений....
а что даст построчный коммит? у меня вопрос синхронно фиксируются изменения или все-таки регистрируется отдельным процессом, как утверждают админы? кто даст гарантию что после коммита данные действительно обновлены в таблицах? может админы вс-таки демонизируют сап?
Age: 46 Joined: 05 Nov 2007 Posts: 725 Location: КраснАдар
Posted: Tue Nov 27, 2007 2:12 pm Post subject:
Ну вроде если две такие программы работаю одновременно - то до коммита они не инсертят БД и, соответственно, друг о друге они не в курсе... Отсюда дубли записей.
Ну вроде если две такие программы работаю одновременно - то до коммита они не инсертят БД и, соответственно, друг о друге они не в курсе... Отсюда дубли записей.
хорошо я делал
insert table.
потом запускал в execsql селект.... данные были!!!! как тогда данный факт с выше сказнным непонятно...
Age: 46 Joined: 05 Nov 2007 Posts: 725 Location: КраснАдар
Posted: Tue Nov 27, 2007 2:30 pm Post subject:
До коммита апдейты ложатся в какую то область памяти в рамках конкретного сеанса работы. Внутри этого сеанса можно сразу же сделать селект, который пройдет успешно. Только в другом сеансе данных не будет...
До коммита апдейты ложатся в какую то область памяти в рамках конкретного сеанса работы. Внутри этого сеанса можно сразу же сделать селект, который пройдет успешно. Только в другом сеансе данных не будет...
Вы уже попробывали, что я предложил?
коммит я пославлю построчный...
но заметьте ведь execsql это прямое обращение к СУБД...
и такой вопрос 2 чувака пишут в одну таблицу одни и теже данные с уникальным ключом одновременно, проверка дает ок, они делаю коммит в полной уверенности что данные сохранены... не пойму где констенция данных???
Ну для начала
commit work and wait.
гарантирует завершение процесса обновления при успешном sy-subrc.
Quote:
потом запускал в execsql селект.... данные были!!!! как тогда данный факт с выше сказнным непонятно...
Возможно произошел неявный commit.
3) Сделайте, как John Doe предложил, вставьте
commit work and wait.
И все равно ваше решение не надежное. В sap для синхронизации лучше использовать объекты блокировок (Lock object)
все спасибо, думаю execsql выполняет неявный коммит... понятно что я не могу абсалютно ориентироваться на субд... жаль оракл крутится в холостую... надо использовать объекты блокировок....
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.