AS400 DB2 View Created with IBM SQL Nav Locking 文件正在使用中

AS400 DB2 View Created with IBM SQL Nav Locking File In Use

我已经搜索了好几天试图找到解决方案,但没有找到任何解决方案,所以我决定联系社区。我是一名 Windows 程序员,我不熟悉 AS400 中的 DBA 编程和命令。

我创建了几个视图,它们只是 select 生产表的语句。它们是使用 IBM SQL 导航器创建的,我喜欢将其用于大多数事情,因为我对 AS400 不够熟悉,无法直接从数据库绿色屏幕进行操作。我收到一位主管的投诉,说我创建的视图给他带来了一些问题。他说我的视图锁定了表格,AS400 不允许他在文件正在使用时重新组织文件。

他说如果他是 DBA,他不会允许我做我做的事。我不知所措,因为这些年来我创建了数千个视图,但 SQL 服务器不是 AS400。不允许我创建一个 SQL 视图,在我看来就像一个在处理数据库中的这个问题方面经验不足的人。

我正在寻求一些基本帮助,以通过在 sql 导航器中创建视图来防止为重组等锁定表。我使用 iSeries SQL Navigator 创建了视图,并在创建视图后简单地调整了视图的权限。我做错了什么吗?我需要做些什么来防止锁定吗?

更新:有一个 ASP.NET 应用程序查询要放入 Excel 报告中的视图并将它们通过电子邮件发送出去。该应用程序在作业完成后关闭连接。

创建视图不会创建锁。

但是,直接或通过视图读取 table 与在 MS SQL 服务器中一样。

您没有提到您是如何从程序或某些 SQL 工具(例如 SQuirreL 或 IBM 的 运行 SQL 脚本中读取视图的。如果来自一个程序,你需要确保你正确地关闭了结果集/连接我已经看到很多没有正确关闭结果 sets/connections 的错误代码;如果还使用了连接池,那将是一个真正的问题。

假设结果集和连接正确关闭,另一个问题是所谓的伪关闭游标。出于性能原因,默认情况下,一旦系统对给定游标(打开数据路径 (ODP))完成 3 次完全打开,系统将在要求时停止完全关闭它。

这会导致需要独占访问 table 的操作出现问题。

实际上,只有当操作不愿意等待系统自动完全关闭ODP时才会出现问题。根据操作,等待的意愿由 table and/or 作业的默认等待时间 (DFTWAIT) 时间上的最大文件等待时间 (WAITFILE) 参数控制。

您还可以手动请求系统完全关闭 table 上的任何伪关闭 ODP,方法是使用分配对象命令,如下所示:

ALCOBJ OBJ((MYLIB/MYTABLE *FILE *EXCL)) CONFLICT(*RQSRLS)

有关伪关闭游标的详细信息,请参阅此 IBM 文档 Pseudo Closed Cursor FAQ

几个选项

  1. 确保操作愿意等待..
    • CHGPF 文件(MYLIBIB/MYTABLE) 等待文件(1)
    • CHGJOB DFTWAIT(30)
  2. 使用上面的 ALCOBJ 手动强制关闭伪关闭游标

最后,考虑停止使用 1980 年代每个人下午 5 点回家时的命令。

无需使用 RGZPFM,更改 table 以重用已删除的记录。

CHGPF FILE(MYLIB/MYTABLE) REUSEDLT(*YES)

使用 SQL DELETE 语句代替 CLRPFM。