我们的ERP系统是混合型。实际数据是SQL,但包含用户信息,配置文件,权限,安全性等的表在Visual FoxPro中。
我需要获得对VFP数据库的独占访问权限。我使用程序本身从系统中删除所有人,它表明每个人都不在系统中。我得到以下代码的以下响应:
set excl on
open data l:\M2MDATA\Util\util.dbc excl
我得到的答案是:拒绝文件访问。我进入了服务器管理器,没有人在我们的VFP目录中打开任何文件。
VFP中是否有一个命令可以让我确定打开文件的人/用户和/或杀死FoxPro中任何会话的方法?
我试过谷歌搜索但没有运气。
答案 0 :(得分:6)
您可能希望从Sysinternals(Microsoft)查看Process Explorer。
http://technet.microsoft.com/en-us/sysinternals/default.aspx
您可以使用查找|文件句柄或DLL菜单选项并放入DBC文件的名称。 Process Explorer将告诉您进程ID和打开文件的进程。
如果要在网络(文件服务器或对等)上共享文件,请转到“服务器”并运行“计算机管理”。深入查看共享文件夹>打开文件,您应该希望看到网络上其他用户在计算机上打开的文件列表。
瑞克
答案 1 :(得分:3)
正如Jeff所提到的,有一件事可能是当一个人的机器发生崩溃,并且他们与网络断开连接时。服务器仍然认为文件是在一些低级句柄打开。然后,当用户重新连接时,所有先前的设置似乎自动神奇地释放,返回系统,然后一切似乎都没问题。另外,检查来自服务器的计算机管理,共享驱动器,以及可能实际打开文件的人,即使他们可能有非正常的断开连接。
作为在桌面上预先测试此类排他性的替代方法,您可能想尝试对.DBC运行查询,因为它也只是一个表本身...像
这样的东西nStatus = 0
try
use L:\M2MData\Util\Util.dbc shared
** Ok so far, now try exclusive
nStatus = 1
use L:\M2MData\Util\Util.dbc EXCLUSIVE
nStatus = 2
catch to loTrapMsg
messagebox( "Can't get exclusive use of DBC" )
endtry
if nStatus = 2
** you have exclusive use of it as a simple TABLE
** Now, what do you want to do
use
open database L:\M2MData\Util\Util.dbc EXCLUSIVE
endif
答案 2 :(得分:2)
某些程序在数据库打开时会丢失(留下僵尸锁),或者数据库是通过未释放资源的网络共享连接的。
在这种情况下,我通常会重新启动数据库所在的服务器,或者卸载/重新安装数据库所在的磁盘(如果在SAN或网络磁盘上)。
答案 3 :(得分:2)
在Microsoft的支持站点上查看服务器机会锁定和缓存打开设置。您可能需要将文章描述的EnableOplocks设置为0,将CachedOpenLimit设置为0。此外,访问时病毒扫描也因此而臭名昭着。
除了提到的优秀的SysInternals Process Explorer工具之外,我还使用了一个名为UnLocker的工具,它允许您右键单击服务器上的任何文件并查看锁定过程。
还有另一个名为“handle”的SysInternals工具,该工具在提示符下运行,并提供有关哪些进程处理给定文件或文件的大量信息。
答案 4 :(得分:2)
你可以试试这个:
重新启动服务器(如果可能)。现在没有人使用它。
获取链接到DBC的表列表,并编写一个脚本以单独打开每个表。任何打开失败了吗?
其中一个表可能会反向链接到另一台服务器上的表。
只是一些想法。
答案 5 :(得分:1)
之前我收到了该消息,问题很简单,运行Windows资源管理器并尝试打开文件所在的文件夹。如果您无法访问该文件夹,那么visual foxpro也是如此。我假设您正在使用共享文件夹,因为您提到您正在使用驱动器L. cmiiw:)
答案 6 :(得分:1)
我有同样的问题(没有对DBC的独占访问),但另一个原因。
我们正在通过低级命令(FOPEN,FSEEK,FPUTS,FCLOSE,FCREATE)处理文本文件中的协议访问和某些活动。自2000年4月1日起,我们正在这样做,没有任何问题。
在“严重的不利网络事件”之后,我们的系统仍在运行,但速度超快。每个协议动作大约需要5分钟。 FoxPro显然在5分钟内重试了低级程序并最终跳过它们(没有任何通知,顺便说一下)。
文本文件绝不是数据库本身的一部分。尽管如此,DBC无法通过机器上的僵尸锁(关闭电源)访问,这也是文本文件的僵尸锁的所有者。只有在删除了thext文件的锁定帽后才能释放DBC锁定。
不知道,这是如何联系的,但事后,一切都很好,仍然是。服务器是Novell Netware,我不熟悉。
答案 7 :(得分:1)
可能值得确保您可以将其打开以进行共享访问,以确保它不是权限问题。