AS400 DB2 View создан с использованием файла блокировки IBM SQL Nav
Я искал несколько дней, пытаясь найти решение, и не мог найти ни одного, поэтому я решил обратиться к сообществу. Я программист Windows, и я не знаком с программированием и командами DBA в AS400.
Я создал несколько представлений, которые просто выбирают операторские таблицы. Они были созданы с помощью навигатора IBM SQL, который мне нравится использовать в большинстве случаев, потому что я недостаточно знаком с AS400, чтобы делать это непосредственно с зеленого экрана базы данных. Я получил жалобу от режиссера, что у него были некоторые проблемы с созданными мною взглядами. Он утверждает, что мои взгляды блокируют таблицы, и AS400 не позволит ему переорганизовать файл, пока он использовался.
Он сказал, что если бы он был администратором, он бы не позволил мне делать то, что я делал. Я в растерянности из-за того, что за эти годы я создал тысячи просмотров, но с SQL Server, а не с AS400. Не позволяет мне создавать представления SQL, как мне кажется, кто-то, кто не очень опытен в решении этих проблем в базе данных.
Я прошу некоторую базовую помощь по предотвращению блокировки таблиц для повторной организации и т. Д. Путем создания представлений в навигаторе sql. Я создал представление с помощью iSeries SQL Navigator и просто настроил разрешения для представления после его создания. Я сделал что-то не так и нужно ли что-то сделать, чтобы предотвратить блокировку?
ОБНОВЛЕНИЕ: есть приложение ASP.NET, которое запрашивает представления, чтобы добавить их в отчеты Excel, и отправляет их по электронной почте. Это приложение закрывает соединение, когда работа завершена.
1 ответ
Создание вида не создает блокировки.
Однако чтение таблицы напрямую или через представление происходит так же, как в MS SQL Server.
Вы не упоминаете, как вы читаете представления из программы или из какого-либо инструмента SQL, такого как SQuirreL или IBM SQL Scripts. Если из программы вам нужно убедиться, что вы правильно закрываете результирующие наборы / соединения, я видел много плохого кода, который неправильно закрывает результирующие наборы / соединения; реальная проблема, если пул соединений также используется.
Предполагая, что результирующие наборы и соединения закрываются должным образом, другой проблемой являются так называемые псевдозамкнутые курсоры. По соображениям производительности, по умолчанию после того, как система трижды полностью открыла для данного курсора (открытый путь данных (ODP)), система перестанет полностью закрывать его при появлении запроса.
Это вызывает проблемы для работы, которая требует монопольного доступа к таблице.
На самом деле, это вызывает проблемы только тогда, когда операции не хотят ждать, пока система автоматически полностью закроет ODP. В зависимости от операции готовность к ожиданию определяется параметром "Максимальное время ожидания файла" (WAITFILE) в таблице и / или временем ожидания по умолчанию (DFTWAIT) задания.
Вы также можете вручную запросить, чтобы система полностью закрыла любое псевдо-закрытое ODP на таблице, используя команду Allocate Object, например, так:
ALCOBJ OBJ((MYLIB/MYTABLE *FILE *EXCL)) CONFLICT(*RQSRLS)
Дополнительную информацию о псевдо-закрытых курсорах смотрите в этом документе.
Пара вариантов
- Убедитесь, что операции готовы ждать..
- ФАЙЛ CHGPF (MYLIBIB / MYTABLE) WAITFILE (1)
- CHGJOB DFTWAIT (30)
- Вручную принудительно замкнуть псевдо-закрытые курсоры, используя ALCOBJ, как указано выше.
Наконец, рассмотрите возможность прекращения использования команд с 1980-х годов, когда все пошли домой в 17:00.
Вместо использования RGZPFM измените таблицу, чтобы повторно использовать удаленные записи.
CHGPF FILE(MYLIB/MYTABLE) REUSEDLT(*YES)
Вместо CLRPFM используйте оператор SQL DELETE.