Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DW, DS и SELECT ... FOR UPDATE / 25 сообщений из 42, страница 1 из 2
28.03.2007, 10:32
    #34420525
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
Доброго времени суток всем! PB9, ORACLE 9. Требуется заблокировать выбранные строки таблицы в DW и DS. Вопрос, собственно, в следующем: можно ли в DW и DS использовать SELECT ... FOR UPDATE для блокировки выборки? Я впрямую написал это, но эффекта не получил. Есть ли какие-либо соображения по этому поводу? Спасибо.
...
Рейтинг: 0 / 0
28.03.2007, 10:50
    #34420602
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
1. как выглядит, что не получил эффекта?
2. приведи SELECT
...
Рейтинг: 0 / 0
28.03.2007, 11:15
    #34420743
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
1. В РВ создаю DWO SELECT "SWIFT_SOST"."SS_ID",
"SWIFT_SOST"."SS_NAME"
FROM "SWIFT_SOST" FOR UPDATE
и делаю retrieve


В PLSQL Developer выполняю

SELECT "SWIFT_SOST"."SS_ID",
"SWIFT_SOST"."SS_NAME"
FROM "SWIFT_SOST" FOR UPDATE
который успешно проходит.
...
Рейтинг: 0 / 0
28.03.2007, 11:29
    #34420831
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
1. а ты знаешь, что если ты выполняешь подобное без NOWAIT и кто-то уже заблокировал хотя бы одну строку из нужных тебе, то перейдешь в ожидание до освобождения блокировки?

2. не ответил на первый вопрос - как определяешь, что не получил эффекта

3. в некоторых версиях Oracle после UPDATE нужно было указывать имя поля (любого), которое хочешь изменять. М.б. в PB эта фича осталась?

4. кавычки не обязательны
...
Рейтинг: 0 / 0
28.03.2007, 11:37
    #34420873
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
1. Знаю
2. Select выполняется как в первой (PB) так и во второй (PLSQL Developer) транзакции
3. В PB синтаксис FOR UDATE COLUMN_NAME дает ошибку при сохранении
4. Знаю
...
Рейтинг: 0 / 0
28.03.2007, 12:04
    #34421012
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
Попробуй посмотреть так
1. в PB выполняешь SELECT FOR UPDATE
2. в PLSQL Developer смотришь v$session и находишь SID сессии с PB
3. в v$lock смотришь, появились ли строки для сессии с PB. Если нет - значит действительно строки не блокируются (FOR UPDATE не выполняется)

Встречался с неполной совместимостью PB и Oracle (PB7 и Oracle8), когда запрос, выполнявшийся в SQL Navigator, вызывал ошибку в PB. Обход подобных ситуаций - создать процедуру на сервере, а в PB возвращать курсор
...
Рейтинг: 0 / 0
28.03.2007, 12:53
    #34421284
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
To tru55. Посмотрел, нет в v$lock такого SID, но, что интересно, если я сначала в PLSQL Developer выполняю этот SELECT ... FOR UPDATE, то в PB он явно подвисает до ROLLBACK, а без FOR UPDATE выполняется сразу! Так, что же делать, господа? Кто что присоветует?
...
Рейтинг: 0 / 0
28.03.2007, 12:56
    #34421296
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
To tru55: пожалуй прислушаюсь к совету по поводу процедуры. Спасибо.
...
Рейтинг: 0 / 0
28.03.2007, 13:07
    #34421348
lagic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
Посмотри, может autocommit установлен
...
Рейтинг: 0 / 0
28.03.2007, 13:17
    #34421405
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
Нет, не установлен, проверил. Я его НИКОГДА не устанавливаю.
...
Рейтинг: 0 / 0
28.03.2007, 13:38
    #34421513
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
Используем примерно следующий подход (на псевдокоде)
1. execute immediate "select for update " + sql_from_dw + " nowait";
2. dw.retrieve()
3. commit/rollback;

==========
PB7.0.3 + Oracle (последнее время чаще всего 9.2.0.7 :)
...
Рейтинг: 0 / 0
28.03.2007, 13:52
    #34421571
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
To PL99. Спасибо за совет. Блокирует нормально.
...
Рейтинг: 0 / 0
28.03.2007, 13:59
    #34421603
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
To PL99. Только сохраняется опасность того, что между EXECUTE и Retrieve могут появиться и другие записи, удовлетворяющие WHERE, которые не будут заблокированы, но попадут в DW.
...
Рейтинг: 0 / 0
28.03.2007, 16:47
    #34422448
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
AIZTo PL99. Только сохраняется опасность того, что между EXECUTE и Retrieve могут появиться и другие записи, удовлетворяющие WHERE, которые не будут заблокированы, но попадут в DW.Да, вероятно, в Вашем случае такую ситуацию исключать нельзя. Дело в том, что мы пользуемся подобным подходом для предотвращения одновременного редактирования одной записи (условие выборки всегда содержит первичный ключ).
...
Рейтинг: 0 / 0
28.03.2007, 17:06
    #34422527
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
AIZДоброго времени суток всем! PB9, ORACLE 9. Требуется заблокировать выбранные строки таблицы в DW и DS. Вопрос, собственно, в следующем: можно ли в DW и DS использовать SELECT ... FOR UPDATE для блокировки выборки? Я впрямую написал это, но эффекта не получил. Есть ли какие-либо соображения по этому поводу? Спасибо.
Как обычно, придётся спросить, а зачем?
...
Рейтинг: 0 / 0
28.03.2007, 17:08
    #34422537
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
Да, для одной записи, пожалуй, лучше и не придумаешь, но, к сожалению, записей довольно много и они интенсивно плодятся. Буду процедуру использовать.
...
Рейтинг: 0 / 0
28.03.2007, 17:08
    #34422538
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
Филипп AIZДоброго времени суток всем! PB9, ORACLE 9. Требуется заблокировать выбранные строки таблицы в DW и DS. Вопрос, собственно, в следующем: можно ли в DW и DS использовать SELECT ... FOR UPDATE для блокировки выборки? Я впрямую написал это, но эффекта не получил. Есть ли какие-либо соображения по этому поводу? Спасибо.
Как обычно, придётся спросить, а зачем?

Иногда требуется по бизнес-условиям (например - редактирование одного документа)
...
Рейтинг: 0 / 0
28.03.2007, 17:54
    #34422731
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
tru55 Филипп AIZSELECT ... FOR UPDATE а зачем?
Иногда требуется по бизнес-условиям (например - редактирование одного документа)
Т.е. предлагается держать транзакцию открытой в течении всего времени редактирования документа (а в итоге и перекура и обеда, да помножем на кол-во одновременно открытых документов :)?
Оракл конечно с этим справляется на ура, но только для небольшого числа юзеров - система получается немасштабируемой (экспоненциальное возрастание требований к ресурсам сервера при линейном возрастании кол-ва пользователей).

Для блокировок документов существуют множество других (нетребовательных к ресурсам сервера) способов.
...
Рейтинг: 0 / 0
28.03.2007, 18:08
    #34422775
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
Anatoly Moskovsky tru55 Филипп AIZSELECT ... FOR UPDATE а зачем?
Иногда требуется по бизнес-условиям (например - редактирование одного документа)
Т.е. предлагается держать транзакцию открытой в течении всего времени редактирования документа (а в итоге и перекура и обеда, да помножем на кол-во одновременно открытых документов :)?
Оракл конечно с этим справляется на ура, но только для небольшого числа юзеров - система получается немасштабируемой (экспоненциальное возрастание требований к ресурсам сервера при линейном возрастании кол-ва пользователей).

Для блокировок документов существуют множество других (нетребовательных к ресурсам сервера) способов.

1. это извечный спор между опимистическим и пессимистическим блокированием :)
В некоторых случаях хорошо одно, в некоторых другое. Я бы не стал однозначно отрицать ни то, ни другое

2. кол. одновременно открытых на редактирование документов, как правило, не больше кол. работающих пользователей (а в реальности значительно меньше)

3. экспоненциальное возрастание требований к ресурсам сервера
Позвольте спросить - к каким ресурсам? И при каком кол. пользователей реально возникнут трудности?

4. Для блокировок документов существуют множество других способов
Все известные мне способы не лишены недостатков

PS ну и вопрос не совсем для этого топика :)
...
Рейтинг: 0 / 0
28.03.2007, 20:33
    #34423046
18-я весна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
tru551. это извечный спор между опимистическим и пессимистическим блокированием :)
В некоторых случаях хорошо одно, в некоторых другое. Я бы не стал однозначно отрицать ни то, ни другое

2. кол. одновременно открытых на редактирование документов, как правило, не больше кол. работающих пользователей (а в реальности значительно меньше)

3. экспоненциальное возрастание требований к ресурсам сервера
Позвольте спросить - к каким ресурсам? И при каком кол. пользователей реально возникнут трудности?

4. Для блокировок документов существуют множество других способов
Все известные мне способы не лишены недостатков

PS ну и вопрос не совсем для этого топика :)

1 - Нет, я про другое. Почувствуйте разницу: "пессимистическая блокировка документов" - это "что сделать", а "блокирование строк таблицы на время транзакции" - это "как сделать". Ту же пессимистическую блокировку можно и по другому сделать.

2 - Нет такого правила (не больше одного). Зато есть законы Мерфи. Если программа разрешает открыть больше одного, значит пользователь откроет.
Надо так строить систему, чтобы любое кол-во открытых документов никак не сказывалось на производительности сервера.

3 - например RAM и UNDO

4 - Да. Я привел недостатки этого способа.

PS - Ну так пока автор отвечает Филиппу на вопрос "зачем?", нам есть чем заняться :)
...
Рейтинг: 0 / 0
29.03.2007, 09:17
    #34423466
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
Эти действия будет выполнять ОДИН процесс приема документов от филиалов банка для того, чтобы глупый главбух центра ничего не мог с ними сотворить, пока они обрабатываются
...
Рейтинг: 0 / 0
29.03.2007, 10:51
    #34423744
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
18-я весна tru551. это извечный спор между опимистическим и пессимистическим блокированием :)
В некоторых случаях хорошо одно, в некоторых другое. Я бы не стал однозначно отрицать ни то, ни другое

2. кол. одновременно открытых на редактирование документов, как правило, не больше кол. работающих пользователей (а в реальности значительно меньше)

3. экспоненциальное возрастание требований к ресурсам сервера
Позвольте спросить - к каким ресурсам? И при каком кол. пользователей реально возникнут трудности?

4. Для блокировок документов существуют множество других способов
Все известные мне способы не лишены недостатков

PS ну и вопрос не совсем для этого топика :)

1 - Нет, я про другое. Почувствуйте разницу: "пессимистическая блокировка документов" - это "что сделать", а "блокирование строк таблицы на время транзакции" - это "как сделать". Ту же пессимистическую блокировку можно и по другому сделать.

2 - Нет такого правила (не больше одного). Зато есть законы Мерфи. Если программа разрешает открыть больше одного, значит пользователь откроет.
Надо так строить систему, чтобы любое кол-во открытых документов никак не сказывалось на производительности сервера.

3 - например RAM и UNDO

4 - Да. Я привел недостатки этого способа.

PS - Ну так пока автор отвечает Филиппу на вопрос "зачем?", нам есть чем заняться :)

1. сделать по другому - это как? Кроме того, SELECT FOR UPDATE - стандартный способ, которй Oracle предоставляет разработчику и которым пользуется сам. Зачем еще изобретать велосипед?

2. а где было сказано, что программа позволяет открыть больше одного документа? Лично я считаю, что открывать больше 1 на РЕДАКТИРОВАНИЕ (не на просмотр) не имеет смысла - это неестественно для человека

3. RAM - это что? В терминологии Oracle есть понятие SGA. Какие структуры для этого задействованы в данном случае? Если buffer cache, дык блоки все равно туда читаются, вне зависимости от того, просто я смотрю документ или накладываю блокировки на строки.
UNDO тратится при изменении данных, а не при SELECT FOR UPDATE

4. по поводу пункта 4 - не понял ответа...
...
Рейтинг: 0 / 0
29.03.2007, 11:46
    #34424024
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
tru55
1. сделать по другому - это как? Кроме того, SELECT FOR UPDATE - стандартный способ, которй Oracle предоставляет разработчику и которым пользуется сам. Зачем еще изобретать велосипед?

2. а где было сказано, что программа позволяет открыть больше одного документа? Лично я считаю, что открывать больше 1 на РЕДАКТИРОВАНИЕ (не на просмотр) не имеет смысла - это неестественно для человека

3. RAM - это что? В терминологии Oracle есть понятие SGA. Какие структуры для этого задействованы в данном случае? Если buffer cache, дык блоки все равно туда читаются, вне зависимости от того, просто я смотрю документ или накладываю блокировки на строки.
UNDO тратится при изменении данных, а не при SELECT FOR UPDATE

4. по поводу пункта 4 - не понял ответа...

1 - а кто сказал что надо изобретать? Взять готовое решение. Их множество и они обсуждались много раз по всему инету и на sql.ru в частности.
2 - это Вы скажите нашим бухгалтерам :)
3 - каждая блокировка документа требует отдельного сеанса, а на них уходит память, а она конечна. Undo - если в ходе редактирования создаются временные данные на сервере.
4 - Еще раз. Все способы имеют недостатки. Но недостаток этого способа - немасштабируемость . При большой нагрузке он играет основную роль.
...
Рейтинг: 0 / 0
29.03.2007, 12:00
    #34424103
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
Anatoly Moskovsky tru55
1. сделать по другому - это как? Кроме того, SELECT FOR UPDATE - стандартный способ, которй Oracle предоставляет разработчику и которым пользуется сам. Зачем еще изобретать велосипед?

2. а где было сказано, что программа позволяет открыть больше одного документа? Лично я считаю, что открывать больше 1 на РЕДАКТИРОВАНИЕ (не на просмотр) не имеет смысла - это неестественно для человека

3. RAM - это что? В терминологии Oracle есть понятие SGA. Какие структуры для этого задействованы в данном случае? Если buffer cache, дык блоки все равно туда читаются, вне зависимости от того, просто я смотрю документ или накладываю блокировки на строки.
UNDO тратится при изменении данных, а не при SELECT FOR UPDATE

4. по поводу пункта 4 - не понял ответа...

1 - а кто сказал что надо изобретать? Взять готовое решение. Их множество и они обсуждались много раз по всему инету и на sql.ru в частности.
2 - это Вы скажите нашим бухгалтерам :)
3 - каждая блокировка документа требует отдельного сеанса, а на них уходит память, а она конечна. Undo - если в ходе редактирования создаются временные данные на сервере.
4 - Еще раз. Все способы имеют недостатки. Но недостаток этого способа - немасштабируемость . При большой нагрузке он играет основную роль.

1. Готовое решение - это как раз SELECT FOR UPDATE.
Другие - как-то не очень знаю
Если, например, изменять какой-либо флаг в колонке таблице - это еще более требовательно к ресурсам (UNDO, REDO и т.д)
2. не знаю ваших бухгалтеров У меня таких прецендентов не было
3. каждая блокировка документа требует отдельного сеанса
Ет-т-то еще с какого перепуга?
Undo - если в ходе редактирования создаются временные данные на сервере
- ни о каких временных данных речь не шла - только о SELECT FOR UPDATE
- что вообще подразумевается под временными данными? Это понятие можно трактовать очень широко
4. вот насчет немасштабируемости у меня большие сомнения. Кроме того, я уже задавал вопрос - при каком кол. одновременно работающих пользователей это может сказаться? Несколько десятков, сотен, тысяч?
...
Рейтинг: 0 / 0
29.03.2007, 12:18
    #34424207
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW, DS и SELECT ... FOR UPDATE
tru553. каждая блокировка документа требует отдельного сеанса
Ет-т-то еще с какого перепуга?

Если рассмотреть два клиента, то каждому из них сохранения блокировки требуется сохранять сеанс.
4. вот насчет немасштабируемости у меня большие сомнения. Кроме того, я уже задавал вопрос - при каком кол. одновременно работающих пользователей это может сказаться? Несколько десятков, сотен, тысяч?
Поделите память сервера на память одного сеанса.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DW, DS и SELECT ... FOR UPDATE / 25 сообщений из 42, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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