|
|
|
работа через ODBC c Oracle
|
|||
|---|---|---|---|
|
#18+
|\/|AX3.14сец! Начальница боится сиквенсов. Придется блокировать таблицу на время записи. Сейчас был длинный диалог. И что мне не говорите, а лучший вариант блокировка. Я по себе знаю. Это допустимый вариант? Код: plaintext 1. 2. 3. 4. 5. 6. Повторю еще раз: таблица блокируется ТОЛЬКО НА ЗАПИСЬ! А читать из нее можно. А значит у двух разных пользователей могут получиться (и такое обязательно случится!) одинаковые ключи! Как Вы будете потом разруливать проблемы? Нет, ну можно, конечно, воспроизвести все, что заложено в Оракле, через одно место... Только полчится еще одна программа "а-ля 1С-SQL" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 13:49 |
|
||
|
работа через ODBC c Oracle
|
|||
|---|---|---|---|
|
#18+
Станислав СПовторю еще раз: таблица блокируется ТОЛЬКО НА ЗАПИСЬ! А читать из нее можно. А значит у двух разных пользователей могут получиться (и такое обязательно случится!) одинаковые ключи! Как Вы будете потом разруливать проблемы? Нет, ну можно, конечно, воспроизвести все, что заложено в Оракле, через одно место... Только полчится еще одна программа "а-ля 1С-SQL"я уже с огромным желанием захотел написать по предложенному варианту. только руководство меня совсем поразило. Начальник и админ мне начали выкидывать такие фразы как "обоснуй", "это плохой вариант если последовательность будет в базе" и "нам этот вариант не подходит". Я тут чуть на одно место не упал. Чтобы админ мне выкидывал такие штучки. Я думал что он должен был начальнику обосновать превосходство этого метода как компетентное лицо в этом вопросе. Плохо когда сидят одни дундуки-админы. Которые только устанавливать по инструкции Oracle и могут. Придется делать так: 1.находить максимальный пакет 2.пытаться записать 3.если нет доступа, то снова 1, иначе message данные записаны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 16:44 |
|
||
|
работа через ODBC c Oracle
|
|||
|---|---|---|---|
|
#18+
Уж коли вы работаете с Oracle, то желательно-бы обратится к первоисточникам . Фрагмент из документации: Oracle9iR2 LOCK TABLE Purpose Use the LOCK TABLE statement to lock one or more tables (or table partitions or subpartitions) in a specified mode. This lock manually overrides automatic locking and permits or denies access to a table or view by other users for the duration of your operation. Some forms of locks can be placed on the same table at the same time. Other locks allow only one lock for a table. A locked table remains locked until you either commit your transaction or roll it back, either entirely or to a savepoint before you locked the table. A lock never prevents other users from querying the table. A query never places a lock on a table. Readers never block writers and writers never block readers. ....... Examples Locking a Table: Example The following statement locks the employees table in exclusive mode, but does not wait if another user already has locked the table: Код: plaintext 1. 2. 3. The following statement locks the remote employees table that is accessible through the database link remote: Код: plaintext 1. 2. Пользуйтесь, но перед тем, как "педалить код", постарайтесь понять смысл того, что вы делаете. СУБД Оракл использует наиболее либеральную модель транзакций, при которой явная блокировка нужна крайне редко. Не грех будет обратится за советом к Ораклоидам. Готов спорить на ящик пива, что ваша первая реализация будет некрасивой. То-бишь содержащей совершенно ненужные для Оракла инструкции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 20:46 |
|
||
|
работа через ODBC c Oracle
|
|||
|---|---|---|---|
|
#18+
maytonПользуйтесь, но перед тем, как "педалить код", постарайтесь понять смысл того, что вы делаете. СУБД Оракл использует наиболее либеральную модель транзакций, при которой явная блокировка нужна крайне редко. Не грех будет обратится за советом к Ораклоидам. Готов спорить на ящик пива, что ваша первая реализация будет некрасивой. То-бишь содержащей совершенно ненужные для Оракла инструкции.Полностью согласен. Но есть прапор. Тупой, но решительный. Дал приказ так делать. Приходится делать. Есть альтернативные решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 15:30 |
|
||
|
работа через ODBC c Oracle
|
|||
|---|---|---|---|
|
#18+
одобрите вариант: у каждого юзера свой код. номер пакета формируется так XYYYYYYYY, где: X - код юзера, Y - номер пакета. получается изоляция друг от друга. так нормально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 15:41 |
|
||
|
работа через ODBC c Oracle
|
|||
|---|---|---|---|
|
#18+
|\/|AX Придется делать так: 1.находить максимальный пакет 2.пытаться записать 3.если нет доступа, то снова 1, иначе message данные записаны. Здесь есть подводный камень. Если вы эту операцию будете делать (случайно) двумя и более сессиями - они выдадут вам по (1) шагу алгоритма одно и то-же максимальное значение. Тоесть уникальность по YYYYYYYY будет нарушена. Второй камень - это линейное время поиска максимального значения пакета. Здесь уже без индекса не обойтись (что может лишний раз побеспокоить вашего дотошного прапорщика ) Короче, как ни крути а последовательность (SEQUENCE) будет самым лучшим способом получения уникального значения. Тем более, что вопросы разделения доступа уже решены, т.к. Оракл на момент доступа к последовательности быстренько блокирует её от других процессов. И вообще - это регламентированный способ генерации первичных ключей. Используйте его. Вот вам то самое обоснование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 16:34 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34368804&tid=2029333]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
202ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 524ms |

| 0 / 0 |
