Я читал, что Oracle поддерживает версии строк для работы с параллелизмом. Я хочу выполнить запрос на обновление очень большой базы данных в реальном времени, но это задание обновления должно изменить самую последнюю версию строки.
Возможно ли это через PL / SQL или просто SQL?
Отредактировано ниже **
Позвольте мне прояснить сценарий, реальную проблему, с которой мы столкнулись в очень большой базе данных. Наш клиент - известный поставщик услуг сотовой связи.
В нашей базе данных есть таблица, которая управляет записями текущего баланса, оставшегося на счете мобильного телефона клиента. Среди других столбцов таблицы в одном столбце хранится сумма пополнения баланса, а в другом - текущее активное сальдо.
У нас есть два независимых скрипта PL / SQL. Один сценарий запускается автоматически, когда клиент перезаряжает свой телефон и обновляет свой баланс.
Второй сценарий касается удержания определенных платежей со счета клиентов. Это пакетная работа, поскольку она распространяется на всех клиентов. Этот сценарий планируется запускать через определенные интервалы дня. Когда этот скрипт выполняется, он загружает 50 000 записей в память, обновляет определенные столбцы и выполняет массовое обновление обратно в таблицу.
Проблема произошла так:
Клиент, чей номер 101, связался со своим местным магазином, чтобы зарядить свой телефон. Он платит сумму. Но до того момента, когда его телефон должен был подзарядиться, запланированное время второго сценария включило второй сценарий. Второй скрипт загружал записи 50 000 клиентов в память. В этих записях в памяти одна из записей об этом клиенте тоже.
Пока не завершится пакетное обновление второго скрипта, первый скрипт успешно пополнит счет клиента.
Теперь получилось, что это фактическая таблица, столбец: «CurrentAccountBalance» обновляется до 150, но записи в памяти, над которыми работал второй скрипт, имели старый баланс клиента, т. Е. 100.
Второй скрипт должен был вычесть 10 из столбца: «CurrentAccountBalance». Когда, в соответствии с фактической работой, значение «CurrentAccountBalance» клиента должно составлять 140, из-за этой проблемы его баланс составил 90.
Теперь, как решить эту проблему.