AS/400: Почему изменения таблиц DB2 не сразу вступают в силу во всей системе?

У меня возникла проблема, когда я обновил таблицу в нашей системе AS/400 — db2 на серверной части, но изменения не отражаются во внешнем интерфейсе.

У нас есть таблица под названием «SH.PROM», в которой указаны диапазоны дат наших ежемесячных рекламных акций. Я обновил "SH.PROM" с правильными упакованными и зонированными десятичными знаками и символами EBCDIC. Однако, когда другие люди пытаются ввести количество товаров со скидкой, скидки не отображаются в интерфейсе.

Есть ли команда для запуска общесистемного обновления, чтобы изменения вступили в силу немедленно?


person user1645914    schedule 03.02.2014    source источник
comment
Если SH.PROM загружается в QTEMP (например, когда пользователи входят в систему), они по-прежнему будут хранить старую информацию, а не вашу обновленную информацию. Если это так, просто заставьте их выйти из системы, а затем снова включить, чтобы обновить их локальные копии.   -  person Benny Hill    schedule 03.02.2014
comment
Есть ли что-нибудь, что поможет мне определить, используется ли текущая версия SH.PROM? Вот DSPFD: i.imgur.com/xswA5V8.jpg & i.imgur.com/wBjkC2w.jpg   -  person user1645914    schedule 03.02.2014
comment
Если ваша таблица находится под контролем фиксации, были ли зафиксированы изменения?   -  person WarrenT    schedule 03.02.2014
comment
Могут ли пользователи найти другие рекламные акции? Есть ли в системе более одного из этих файлов? (Используйте WRKOBJ *ALL/SH.PROM) Если это так, посмотрите на их задания с опцией 14 WRKJOB, чтобы увидеть открытые файлы, которые сообщат вам, в какой библиотеке задание открыло этот файл.   -  person WarrenT    schedule 04.02.2014
comment
Вы можете сделать WRKOBJLCK <library_name>/SH.PROM *FILE, чтобы увидеть, какие задания/пользователи блокируют файл в любой момент времени. Это не скажет вам, кто прикасался к нему в прошлом, только кто использует его прямо в эту секунду. Предложение WarrenT посмотреть на задание пользователя и посмотреть, какие файлы открыты, полезно — вы сможете увидеть, использует ли пользователь SH.PROM, который вы изменили, или другой.   -  person Benny Hill    schedule 04.02.2014


Ответы (1)


Предположим, вы обновляете таблицу с помощью программы 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
comment
Как насчет выходного файла. Записи также могут быть буферизованы до тех пор, пока не будут закрыты или не будет соблюдено соотношение сил. - person WarrenT; 04.02.2014
comment
Если в других заданиях файл уже открыт как логический с отложенным обслуживанием, индекс может не обновляться до тех пор, пока кто-то не откроет его снова. - person WarrenT; 04.02.2014
comment
(Как только вы говорите, что нет другого пути, вы оставляете себя открытым для кого-то, кто предложит другой путь;) - person WarrenT; 04.02.2014
comment
Я отметил оба этих сценария в своем ответе. Кажется, они не соответствуют заданному вопросу - OP несколько раз использует слово «обновлено». - person Buck Calabro; 04.02.2014
comment
Я принял ответ Бака. Вчера был ужасный случай понедельника. Находясь на стороне администратора системы старше меня, я совершил ужасную ошибку новичка и запаниковал. Я продолжал пытаться проверить правильность рекламных акций с помощью нашего приложения для заказа/счета и случайно использовал номер клиента, который не позволял просматривать рекламные акции. Я отметил «правильно упакованные/зонированные десятичные знаки и символы EBCDIC», чтобы подчеркнуть, что это не ошибка данных. Я знал, что это что-то внешнее по отношению к базе данных. Пока этим внешним компонентом был ME, я рассмотрел другие части системы. Я использовал соединение ODBC с SQL. - person user1645914; 04.02.2014
comment
В AS/400 я многого не знаю, так как все еще учусь. Моя долгосрочная цель состоит в том, чтобы перенести эту систему в другое место, но сначала я должен получить командование и контроль здесь. Спасибо всем за понимание. Я должным образом отметил каждое ваше замечание. - person user1645914; 04.02.2014
comment
Apple Macintosh на 5 лет старше AS/400. Нет причин паниковать только потому, что вычислительная платформа имеет долгую историю. Не думайте, что IBM i совершенно чужой. Существуют процессы, специфичные для IBM, но общие принципы бизнес-вычислений одинаковы независимо от того, реализованы они в DB2 for i, SQL Server или MySQL. - person Buck Calabro; 04.02.2014
comment
Я должен был указать переход на более современную систему IBM, а не совсем в другом месте. Я считаю, что IBM i останется с этой конкретной компанией. Очевидно, что система AS/400 была рассчитана на длительное время и функционировала здесь довольно долго. У нас есть power 7, на котором я хотел бы, чтобы в конечном итоге работал наш веб-сайт в дополнение к обновленной системе. img819.imageshack.us/img819/6886/aw9r.jpg - person user1645914; 04.02.2014