- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在AS400(iSeries)上设置了一个数据源,当Cognos通过客户端访问ODBC驱动程序访问它时,它将锁定AS400上的文件。即使报告关闭,文件仍会锁定一段时间。这会导致更新数据源,重组文件,清除记录等问题。必须有一种方法可以强制ODBC驱动程序在检索到数据后删除锁...或者至少监视时间它保持住。任何方向将不胜感激。
谢谢。
Cognos 10.1.0 ....
iSeries V7R1M0
巴克
感谢您抽出宝贵的时间来评论...。但是,我向您保证我的iSeries实际上正在运行V7R1M0,并且我从未说过我拥有记录锁定。我说过文件保持锁定。我非常确定我的问题确实提出了一个特定的方案,其中Cognos通过Client Access ODBC驱动程序访问AS400文件并锁定该文件。然后将锁保持一定时间。我的问题是,是否有一种方法可以阻止Cognos保持对该文件的锁定。锁定发生后,我可以为iSeries上的随机文件访问提供错误消息,但是由于我一直在寻找一种方法来在发生这些错误之前解除锁定,所以我没有看到它的意义...但是我敢肯定我将收到一个CPF3203错误,告诉我它无法分配对象。
最佳答案
IBM i 7.1不能在AS / 400或iSeries硬件上运行。这不是语义上的含义:在Web上搜索ODBC和AS400将返回古老且无用的结果。
该问题不包括特定的错误消息,也不包括发生该错误的特定情况。我猜想您在CLRPFM
上看到了一个对象锁(不是记录锁)。如果是这样,根本原因是数据库管理器没有完全关闭游标。出于性能原因,它会对其进行软关闭(有时称为伪关闭)。
如果您有一个非SQL进程需要对表进行排他锁(例如SAVOBJ
,CLRPFM
,DLTF
,RGZPFM
等),则可以在参数集中包含ALCOBJ
命令强制关闭所有伪关闭的游标。 ALCOBJ OBJ((SOMSCHEMA/SOMETABLE *FILE *EXCL)) WAIT(1) CONFLICT(*RQSRLS)
如果我猜错了,请编辑问题以显示引发错误的IBM i端正在执行的操作以及错误的确切错误消息ID。
编辑:更好地解释锁定
任何ODBC访问,任何RPG记录级别访问,打开表进行输入的任何过程都会导致表锁定。如果I / O请求为只读,则锁定级别为* SHRRD(共享以读取)。如果I / O请求涉及更新,则锁定级别为* SHRUPD(共享以进行更新)。这是正常且理想的行为,不能禁用,因为它发生在操作系统的深处,并且存在于IBM i的DNA中。
这些对象锁允许共享访问。如果您的Cognos进程在表上具有* SHRUPD锁,那么我的RPG程序仍然可以同时打开,读取,写入和更新同一表中的记录。这就是所有现代数据库的运行方式。
通常,当出现类似问题时,会有一个服务器进程要求对表进行排他(* EXCL)锁定。典型的服务器端操作是CLRPFM,RGZPFM,SAVOBJ。如果Cognos用* SHRUPD锁打开了一个表(WRKOBJLCK会告诉您这一点),则像CLRPFM这样的服务器端进程将无法获得* EXCL锁,并将发出CPF3203-无法为文件分配对象。
有时会丢失的部分是伪接近。典型的ODBC进程可能如下所示:
ODBC连接
打开光标
获取结果集
关闭光标
ODBC断开连接
在DB2方面,人们希望在发生“关闭游标”步骤时,会释放* SHRUPD锁定。这不一定会发生,因为DB2执行伪关闭,将光标留在内存中下次Cognos进行完全相同的访问(例如,针对不同的客户)。对于大多数操作而言,这不是问题-在Cognos可以随时请求访问的白天,谁需要在表上使用* EXCL锁?但是我们的遗产并不是那么简单,我们大多数人仍然拥有服务器端进程,这些进程可以执行快速CLRPFM来从工作表中清除一批。这就是CPF3203出现的位置。
由于数据库管理器持有该锁(不是Cognos进程,它已断开连接!),因此我们需要告诉DB2在执行CLRPFM之前要执行硬关闭。 ALCOBJ CONFLICT(* RQSRLS)是我们这样做的方式。这需要在执行CLRPFM的CL程序中添加。解决此问题的另一种方法是使用SQL清除表。在7.1上,我们可以在CL程序中发出SQL命令,因此我们可以执行RUNSQL'从tempfile中删除'而不是CLRPFM TEMPFILE-作为SQL,它不需要对表进行* EXCL锁定。
编辑:RGZPFM
RGZPFM的一些背景可能是有序的。非常老的应用程序没有删除表中的记录:它们设置了应用程序需要检查的“已删除记录”字节。随着时间的推移,这些表累积了越来越多的标记为已删除或无效的记录。磁盘非常昂贵,这些记录是多余的,因此重组诞生了。通常,这是一个两步过程:将文件复制到临时副本,然后再复制回去,省略“删除”。之所以行之有效,是因为当交互式用户离开系统时,重组通常会在晚上结束,这是一天结束处理的一部分。另一个好处是使记录在物理上处于主键顺序;这提高了按键读取程序的性能。
较新的应用程序可以在该行上执行实际的物理DELETE操作,但该行仍占用空间。磁盘仍然很昂贵,因此RGZPFM诞生了。 RGZPFM仍然需要对该表进行独占访问,原因与两步CPYF相同。这些RGZPFM流程中的许多流程只是简单地继承而未考虑在具有更多磁盘的更新(更快)硬件上进行实际重组的必要性。一些应用程序执行重组,因为“这就是我们一直这样做的方式”。
现在是2014年,硬件速度非常快,磁盘价格却很便宜。可以创建表以重用已删除的记录-这是使用CREATE TABLE
创建的表的默认设置,并且极少数例外情况下不会出现性能问题-并且性能是RGZPFM的主要原因。 RGZPFM仍然有一个地方,该地方可用于具有许多已删除记录的大型表-稀疏表。如果您有一个SQL SELECT导致进行了全表扫描,那将会对性能产生影响。一般来说,这些表并不多。如果您有数百万个行表,则它可能是一个历史文件,并且看不到太多的DELETE活动。但这是针对稀疏表具有数百万行且没有根索引的少数情况的考虑。
关于ibm-midrange - iSeries数据源锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23544460/
我对 Java 并发性比较陌生(还没有阅读 JCIP,但它在我的列表中!)并且我有一个关于锁定行为的问题。具体来说,Java 是锁定对象的引用,还是锁定对象本身? 代码示例(不是 sscce,因为我不
我的团队使用 TortoiseSVN 编写版本控制代码。有时,有人使用“获取锁定”选项。是否有可能看到解决方案中的锁? 最佳答案 http://tortoisesvn.net/docs/nightly
我在使用 SVN 时遇到了一个小问题。 当我跑 svn stat我明白了: ~ some/dir 当我跑 svn commit -m "test"我明白了:svn: working copy
我启用了 jenkins 安全性,认为它会提示我创建一个帐户。我尝试在 c:/program files/jenkins 中删除和编辑我的 config.xml 文件,但我不确定如何在没有访问权限的情
实现与 S3 结合使用的简单锁定机制的推荐方法是什么? 我想做的例子: 通过对象 ID 获取锁 从 S3 读取对象 修改数据 将对象写入 S3 释放锁 理想情况下寻找基于云的锁定机制。我可以在本地使用
找到这个here : 一般来说,在以下任何情况下,请考虑在列上创建索引: 索引列上存在引用完整性约束,或者列。索引是避免全表锁的一种方法,否则,如果您更新父表主键,则需要,合并到父表中,或从父表中删除
在我的程序中,我将把每个“ block ”数据存储在一个单独的文件中。多个线程都会读取和写入各种文件,我想避免因未正确同步而可能出现的问题。本质上,我想要一个设置,其中每个文件的行为就好像它有自己的
我想使用此script作为资源,通过使用Windows API(重置管理器)与Go for Windows中的内容相同 到目前为止,我的代码是 Rstrtmgr := syscall.NewLazyD
这里的问题是:“这些选择中的哪一个对于线程安全选择的剧院具有最佳性能?” public static List lockList = initializeLocks(); public boolean
我有一个侧面菜单,单击图标时打开,单击页面或单击菜单上的项目时关闭。我正在尝试实现锁定,因此当单击锁定图标时,即使您单击菜单项或页面,菜单也不会关闭。 我能够将图标从锁定图标更改为解锁图标,但我在停止
使用 TRueType 字体编写 SDL 程序。我调用 TTF_Init() 来初始化 TTF 并使用 TTF_OpenFont( name, size ) 打开我的字体。 我有一个例程,可以使用以下
我正在尝试调试基于运行 FreeRTOS 的 STM32F3 uC 的应用程序。我已在应用程序的线程上下文中的随机位置手动将 PSP 设置为无效值(例如 0),希望触发 memManageFault/
我有以下 C# 代码: 1. List bandEdgeList; 2. 3. bandEdgeList = CicApplication.BandEdgeCache.Where(r
我正在用骰子制作游戏。这个想法是持有/锁定骰子。我把骰子做成按钮,这样现在就可以点击它们了。示例:我抛出一个“6”和一个“1”。我点击“6”,所以现在只会抛出“1”。 我对这个有点迷失了,我需要创建
我正在使用以下代码下载约 200mb 的播客并将其写入文档目录: var podcastRequest = NSURLRequest(URL: audioUrl) NSURLConnection.se
下面的类 DoStuff 启动一个线程并同步以保护监听器对象在 null 时不被访问。 现在,当从外部访问 DoStuff 类函数 setOnProgressListener() 时,我遇到了问题,因
我正在编写一个使用巨大背景 Canvas 的网站。我试图锁定浏览器调整大小处理程序以避免滚动问题(背景越界等) 这是我第一次做一个完整的后台网站。任何有关优化的建议(png 大小 580.72 KB
我是 C# 和线程的新手,我有这个问题要解决: 我有一个处理一些数据的线程,它会不时(必要时)触发我在启动线程之前设置的事件方法 (DataProcessor)。该线程位于专有 dll 中。所以我不能
我正在使用相机,我使用的是文档中给出的完全相同的示例: http://developer.android.com/resources/samples/ApiDemos/src/com/example/
我有几个座位可供用户预订。同一时间,只有一个用户可以参与预订过程,这样同一个座位就不会被多个用户预订。在我的 Java 代码中,我使用了“synchronized”关键字来完成它。这行得通。 但是,现
我是一名优秀的程序员,十分优秀!