Предположим, вы обновляете таблицу с помощью программы RPG. Далее предположим, что программа RPG объявляет SH.PROM как первичный файл обновления без ключей. В этом случае RPG (ради эффективности) будет буферизовать операции базы данных, сохраняя обновленные строки во внутреннем буфере до тех пор, пока программа не завершится и буфер не будет сброшен на диск. В этом случае внизу списка компилятора RPG появится сообщение о том, что используется блокировка. В этом случае возможно, что таблица может быть обновлена одной программой, но обновленная строка еще не известна базе данных.
Существует немного другой сценарий, если вы работаете под контролем фиксации, но если мы предположим, что строка заблокирована для обновления и еще не зафиксирована, тогда другие задания будут удерживать эту блокировку. Вместо того, чтобы видеть старые данные, они вообще не смогут прочитать незафиксированное изменение и вместо этого в конечном итоге получат тайм-аут ожидания записи.
Существует еще один сценарий, когда у вас есть логический файл, построенный поверх SH.PROM, который называется MAINT(*REBLD). Вы обновляете Ш.ПРОМ; конечные пользователи читают SH.PROML1, и требуется некоторое время, чтобы перестроить индекс, прежде чем они смогут увидеть записи.
Кроме того, на самом деле нет способа задержать или отложить обновления базы данных. Вообще говоря, если вы обновляете строку, она сразу становится доступной. Ни один из приведенных выше сценариев не отражает того, о чем вы сообщаете. Убедитесь, что вы обновляете ту же таблицу, к которой обращаются пользователи. Возможно, вы обновляете TESTLIB/SH.PROM, а пользователи читают PRODLIB/SH.PROM. Или может быть какой-то ночной процесс, который распространяет SH.PROM на другие таблицы, и именно к этим таблицам обращаются конечные пользователи.
Немного о «правильных упакованных и зонированных десятичных знаках и символах EBCDIC» сбивает с толку. Как вы обновляете Ш.ПРОМ? JDBC? РПГ? Оператор SQL выполняется через IBM i Navigator? Почему интересно отметить «правильно упакованные и зонированные десятичные дроби»? Это потому, что SH.PROM представляет собой плоский файл (без определенных столбцов), и вам приходилось эмулировать упакованные десятичные поля с помощью встроенных функций SQL?
person
Buck Calabro
schedule
03.02.2014
SH.PROM
загружается вQTEMP
(например, когда пользователи входят в систему), они по-прежнему будут хранить старую информацию, а не вашу обновленную информацию. Если это так, просто заставьте их выйти из системы, а затем снова включить, чтобы обновить их локальные копии. - person Benny Hill   schedule 03.02.2014WRKOBJ *ALL/SH.PROM
) Если это так, посмотрите на их задания с опцией 14 WRKJOB, чтобы увидеть открытые файлы, которые сообщат вам, в какой библиотеке задание открыло этот файл. - person WarrenT   schedule 04.02.2014WRKOBJLCK <library_name>/SH.PROM *FILE
, чтобы увидеть, какие задания/пользователи блокируют файл в любой момент времени. Это не скажет вам, кто прикасался к нему в прошлом, только кто использует его прямо в эту секунду. Предложение WarrenT посмотреть на задание пользователя и посмотреть, какие файлы открыты, полезно — вы сможете увидеть, использует ли пользовательSH.PROM
, который вы изменили, или другой. - person Benny Hill   schedule 04.02.2014