使用IBM SQL Nav锁定文件创建的AS400 DB2视图

使用IBM SQL Nav锁定文件创建的AS400 DB2视图,db2,locking,views,ibm-midrange,sql-navigator,Db2,Locking,Views,Ibm Midrange,Sql Navigator,我已经搜索了好几天,试图找到一个解决方案,但都找不到,所以我决定联系社区。我是一名Windows程序员,不熟悉AS400中的DBA编程和命令 我创建了几个视图,它们只是生产表的select语句。它们是用IBMSQLNavigator创建的,我喜欢用它来做大多数事情,因为我对AS400不太熟悉,无法直接从数据库的绿色屏幕上完成。我收到一位董事的投诉,说我用我创造的观点给他造成了一些问题。他说我的视图正在锁定表,AS400将不允许他在使用文件时重新组织文件 他说如果他是DBA,他不会允许我做我做的事

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

我创建了几个视图,它们只是生产表的select语句。它们是用IBMSQLNavigator创建的,我喜欢用它来做大多数事情,因为我对AS400不太熟悉,无法直接从数据库的绿色屏幕上完成。我收到一位董事的投诉,说我用我创造的观点给他造成了一些问题。他说我的视图正在锁定表,AS400将不允许他在使用文件时重新组织文件

他说如果他是DBA,他不会允许我做我做的事。这些年来,我创建了数千个视图,但使用的是SQL Server而不是AS400,这让我不知所措。“不允许我创建SQL视图”在我看来似乎是一个在数据库中处理此问题方面经验不足的人

我想通过在sql navigator中创建视图来获得一些基本帮助,以防止表被锁定以进行重新组织等。我使用iSeries SQL Navigator创建了该视图,并在创建后简单地调整了该视图的权限。我是否做错了什么,是否需要采取措施防止锁定


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

创建视图不会创建锁

但是,直接或通过视图读取表的操作与MS SQL Server中的操作相同

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

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

这会导致需要以独占方式访问表的操作出现问题

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

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

ALCOBJ OBJ((MYLIB/MYTABLE *FILE *EXCL)) CONFLICT(*RQSRLS)
有关伪关闭游标的更多信息,请参阅此IBM文档

两种选择

  • 确保运营部门愿意等待。。
    • CHGPF文件(mylibb/MYTABLE)WAITFILE(1)
    • CHGJOB(30)
  • 如上所述,使用ALCOBJ手动强制关闭伪关闭游标
  • 最后,考虑到每个人下午5点回家时停止使用1980命令。 不需要使用RGZPFM,而是将表更改为重用已删除的记录

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

    使用和SQL DELETE语句代替CLRPFM。

    创建视图不会创建锁

    但是,直接或通过视图读取表的操作与MS SQL Server中的操作相同

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

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

    这会导致需要以独占方式访问表的操作出现问题

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

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

    ALCOBJ OBJ((MYLIB/MYTABLE *FILE *EXCL)) CONFLICT(*RQSRLS)
    
    有关伪关闭游标的更多信息,请参阅此IBM文档

    两种选择

  • 确保运营部门愿意等待。。
    • CHGPF文件(mylibb/MYTABLE)WAITFILE(1)
    • CHGJOB(30)
  • 如上所述,使用ALCOBJ手动强制关闭伪关闭游标
  • 最后,考虑到每个人下午5点回家时停止使用1980命令。 不需要使用RGZPFM,而是将表更改为重用已删除的记录

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

    使用和SQL DELETE语句代替CLRPFM。

    我想知道是否可以执行将视图作为只读的查询。那会把锁打开吗?我不能用AS400信息攻击我的主管,因为我不能告诉你们,这会被视为我在暗中破坏他。我想使用ASP.NET方法来避免记录锁定问题。1。IIRC物理文件重组需要独占文件访问,这意味着即使是打开的只读访问也会阻止它。2.检查您的控制器是指
    RGZPFM
    命令还是删除/重命名physica