0

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

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

他说如果他是 DBA,他不会允许我做我所做的事情。多年来我已经创建了数千个视图,但使用 SQL Server 而不是 AS400,我感到不知所措。不允许我创建 SQL 视图在我看来就像是在处理数据库中的这个问题方面不是很有经验的人。

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

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

4

1 回答 1

2

创建视图不会创建锁。

但是,直接或通过视图读取表就像在 MS SQL Server 中一样。

您没有提及您是如何从程序或某些 SQL 工具(例如 SQuirreL 或 IBM 的 Run SQL Scripts)读取视图的。如果来自程序,则需要确保正确关闭结果集/连接我已经看到很多错误的代码无法正确关闭结果集/连接;如果还使用连接池,这是一个真正的问题。

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

这会导致需要对表进行独占访问的操作出现问题。

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

您还可以使用 Allocate Object 命令手动请求系统完全关闭表上的任何伪关闭 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,而是更改表以重用已删除的记录。

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

代替 CLRPFM,使用 SQL DELETE 语句。

于 2016-04-06T15:17:40.107 回答