我们在Windows和VFP9 SP2的1803版上遇到了多用户网络文件共享的一些大问题。以下是我们看到的一些问题:
写入数据库的空白记录。系统将在所有字段中写入包含值的完整记录,但表中的记录为空白。
在表关闭之前写入但不会为其他用户显示的记录。如果会话A打开一个表并添加5条记录,会话B将看到额外的5条记录,但它们将是空白的,或者看起来包含来自其中前一条记录的数据。会话A关闭表后,数据将显示在其他会话中。
记录将附加到表格中,最终只会创建以前记录的副本。
这些似乎都是某种缓存或延迟写入的问题。
在过去的几天里,我已经在数十个安装中非常一致地看到了这些问题的各种组合。唯一的解决方案是让用户回滚到以前的Windows版本。
我们已尝试在客户端和服务器计算机上禁用oplock,并且未启用验证脱机文件,但尚未找到解决方案。
还有其他人见过类似的东西吗?建议?如果我们不弄明白,这可能是一场灾难。
答案 0 :(得分:3)
所以这就是我们所发现的。这些问题似乎是由KB4103721更新到Windows 1803引起的。我们能够通过删除该更新作为临时解决方案来解决问题。
我们现在发现通过禁用某些SMB缓存参数。
打开powershell管理提示。 (右键单击开始按钮)
执行以下两个命令:
set-smbclientconfiguration -DirectoryCacheLifetime 0
set-smbclientconfiguration -FileInfoCacheLifetime 0
然后您可以运行
get-smbclientconfiguration
验证是否已设置值。
答案 1 :(得分:0)
我通过锁定表解决了这个问题,如果无法锁定表,那么请等到表可用于锁定。有时它会减慢进程,但数据不会丢失。代码在这里
t2 = [INSERT INTO table (fields_list_here) VALUES (fields_value_here)]
IF FLOCK() && RLOCK
&t2
UNLOCK
ELSE
do while .t.
IF not FLOCK() &&RLOCK()
WAIT WINDOW "Attempting to lock. Please wait ..." NOWAIT
IF INKEY() = 27 && The loop may be too fast you may not escape. Try putting a parameter "inkey(.1)"
WAIT WINDOW "Aborting lock operation." NOWAIT
exit
ENDIF
ELSE
&t2
UNLOCK
EXIT
ENDIF
ENDDO
ENDIF