powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа через ODBC c Oracle
6 сообщений из 31, страница 2 из 2
работа через ODBC c Oracle
    #34368804
|\/|AX3.14сец! Начальница боится сиквенсов. Придется блокировать таблицу на время записи. Сейчас был длинный диалог. И что мне не говорите, а лучший вариант блокировка. Я по себе знаю.

Это допустимый вариант?

Код: plaintext
1.
2.
3.
4.
5.
6.
cdb.BeginTrans();
cdb.ExecuteSQL("lock table <name> in exclusive mode;");
cdb.ExecuteSQL("....");
cdb.ExecuteSQL("....");
cdb.ExecuteSQL("....");
cdb.CommitTrans();
Короче говоря что написать чтобы таблица заблокировалась?
Повторю еще раз: таблица блокируется ТОЛЬКО НА ЗАПИСЬ! А читать из нее можно.
А значит у двух разных пользователей могут получиться (и такое обязательно случится!) одинаковые ключи! Как Вы будете потом разруливать проблемы?
Нет, ну можно, конечно, воспроизвести все, что заложено в Оракле, через одно место...
Только полчится еще одна программа "а-ля 1С-SQL"
...
Рейтинг: 0 / 0
работа через ODBC c Oracle
    #34368977
|\/|AX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав СПовторю еще раз: таблица блокируется ТОЛЬКО НА ЗАПИСЬ! А читать из нее можно. А значит у двух разных пользователей могут получиться (и такое обязательно случится!) одинаковые ключи! Как Вы будете потом разруливать проблемы?
Нет, ну можно, конечно, воспроизвести все, что заложено в Оракле, через одно место...
Только полчится еще одна программа "а-ля 1С-SQL"я уже с огромным желанием захотел написать по предложенному варианту. только руководство меня совсем поразило. Начальник и админ мне начали выкидывать такие фразы как "обоснуй", "это плохой вариант если последовательность будет в базе" и "нам этот вариант не подходит". Я тут чуть на одно место не упал. Чтобы админ мне выкидывал такие штучки. Я думал что он должен был начальнику обосновать превосходство этого метода как компетентное лицо в этом вопросе. Плохо когда сидят одни дундуки-админы. Которые только устанавливать по инструкции Oracle и могут.


Придется делать так:
1.находить максимальный пакет
2.пытаться записать
3.если нет доступа, то снова 1, иначе message данные записаны.
...
Рейтинг: 0 / 0
работа через ODBC c Oracle
    #34369166
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уж коли вы работаете с 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.
LOCK TABLE employees
   IN EXCLUSIVE MODE 
   NOWAIT; 

The following statement locks the remote employees table that is accessible through the database link remote:

Код: plaintext
1.
2.
LOCK TABLE employees@remote 
   IN SHARE MODE;

Пользуйтесь, но перед тем, как "педалить код", постарайтесь понять смысл того, что вы делаете. СУБД Оракл использует наиболее либеральную модель транзакций, при которой явная блокировка нужна крайне редко. Не грех будет обратится за советом к Ораклоидам. Готов спорить на ящик пива, что ваша первая реализация будет некрасивой. То-бишь содержащей совершенно ненужные для Оракла инструкции.
...
Рейтинг: 0 / 0
работа через ODBC c Oracle
    #34369683
|\/|AX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonПользуйтесь, но перед тем, как "педалить код", постарайтесь понять смысл того, что вы делаете. СУБД Оракл использует наиболее либеральную модель транзакций, при которой явная блокировка нужна крайне редко. Не грех будет обратится за советом к Ораклоидам. Готов спорить на ящик пива, что ваша первая реализация будет некрасивой. То-бишь содержащей совершенно ненужные для Оракла инструкции.Полностью согласен. Но есть прапор. Тупой, но решительный. Дал приказ так делать. Приходится делать. Есть альтернативные решения?
...
Рейтинг: 0 / 0
работа через ODBC c Oracle
    #34369691
|\/|AX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
одобрите вариант:
у каждого юзера свой код.
номер пакета формируется так XYYYYYYYY,
где:
X - код юзера,
Y - номер пакета.

получается изоляция друг от друга. так нормально?
...
Рейтинг: 0 / 0
работа через ODBC c Oracle
    #34369725
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
|\/|AX
Придется делать так:
1.находить максимальный пакет
2.пытаться записать
3.если нет доступа, то снова 1, иначе message данные записаны.

Здесь есть подводный камень. Если вы эту операцию будете делать (случайно) двумя и более сессиями - они выдадут вам по (1) шагу алгоритма одно и то-же максимальное значение. Тоесть уникальность по YYYYYYYY будет нарушена.

Второй камень - это линейное время поиска максимального значения пакета. Здесь уже без индекса не обойтись (что может лишний раз побеспокоить вашего дотошного прапорщика )

Короче, как ни крути а последовательность (SEQUENCE) будет самым лучшим способом получения уникального значения. Тем более, что вопросы разделения доступа уже решены, т.к. Оракл на момент доступа к последовательности быстренько блокирует её от других процессов. И вообще - это регламентированный способ генерации первичных ключей. Используйте его.

Вот вам то самое обоснование.
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа через ODBC c Oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]