2

私たちのERPシステムはハイブリッドです。実際のデータはSQLですが、ユーザー情報、プロファイル、権限、セキュリティなどを含むテーブルはVisualFoxProにあります。

VFPデータベースへの排他的アクセスを取得する必要があります。プログラム自体を使用してシステムから全員を削除しましたが、これは全員がシステムから外れていることを示しています。次のコードに対して次の応答があります。

set excl on
open data l:\M2MDATA\Util\util.dbc excl

私が得た応答は次のとおりです。ファイルアクセスが拒否されました。サーバーマネージャーにアクセスしましたが、VFPディレクトリでファイルを開いている人は誰もいません。

ファイルを開いているのは誰か/何であるか、および/またはFoxPro内で開いているセッションを強制終了する方法を判別できるコマンドがVFPにありますか?

グーグルしてみましたが運が悪かったです。

4

8 に答える 8

6

Sysinternals(Microsoft)のProcessExplorerを確認することをお勧めします。

http://technet.microsoft.com/en-us/sysinternals/default.aspx

検索|を使用できます ファイルハンドルまたはDLLメニューオプションを選択し、DBCファイルの名前を入力します。プロセスエクスプローラーは、プロセスIDとファイルを開いているプロセスを教えてくれます。

ネットワーク(ファイルサーバーまたはピアツーピア)でファイルを共有している場合は、「サーバー」に移動してコンピューターの管理を実行します。[共有フォルダー]>[ファイルを開く]にドリルダウンすると、ネットワーク上の他のユーザーがコンピューターで開いたファイルのリストが表示されるはずです。

リック

于 2009-08-28T02:32:31.613 に答える
4

ジェフが述べたように、1つのことが、ある人のマシンでクラッシュし、ネットワークから切断された場合です。サーバーは、ファイルが低レベルのハンドルで開いていると考えています。次に、ユーザーが再接続すると、以前のすべての設定が自動的に解放され、システムに戻って、すべて正常に表示されます。さらに、コンピューターの管理下にあるサーバー、共有ドライブ、およびファイルが実際に開いている可能性のあるユーザーを確認します。

テーブルでこのような排他性を事前にテストする代わりに、.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 
于 2009-08-27T00:32:18.253 に答える
2

一部のプログラムがデータベースを開いている間(ゾンビロックを残している)にクラッシュしたか、データベースがリソースを解放していないネットワーク共有を介して接続されている可能性があります。

このような場合、私は通常、データベースが配置されているサーバーを再起動するか、データベースが存在するディスクをマウント解除/再マウントすることになります(SANまたはネットワークディスク上の場合)。

于 2009-08-26T19:58:50.450 に答える
2

サーバーのOpportunisticLockingおよびCachedOpen設定については、Microsoftのサポートサイトを参照してください。記事で説明されているように、EnableOplocksを0に、CachedOpenLimitを0に設定する必要がある場合があります。また、オンアクセスウイルススキャンは、この種のことで有名です。

前述の優れたSysInternalsProcessExplorerツールに加えて、サーバー上の任意のファイルを右クリックしてロックプロセスを確認できるUnLockerというツールを使用しています。

'handle'と呼ばれる別のSysInternalsツールもあります。これはプロンプトで実行され、特定の1つまたは複数のファイルに対してどのプロセスがハンドルを持っているかに関する多くの情報を提供します。

于 2009-09-02T09:41:12.953 に答える
2

あなたはこれを試すことができます:

  1. サーバーを再起動します(可能な場合)。現在、誰もそれを使用していません。

  2. DBCにリンクされているテーブルのリストを取得し、各テーブルを個別に排他的に開くスクリプトを記述します。開いたもののいずれかが失敗しますか?

  3. おそらく、テーブルの1つが別のサーバー上のテーブルにバックリンクされています。

いくつかのアイデア。

于 2009-09-28T02:59:12.693 に答える
1

私は以前にそのメッセージを受け取りましたが、問題は単純です。Windowsエクスプローラーを実行して、ファイルが置かれているフォルダーを開こうとします。フォルダにアクセスできない場合は、Visualfoxproもアクセスできます。ドライブLを使用しているとおっしゃっているので、共有フォルダを使用していると思います。cmiiw:)

于 2009-10-19T12:16:39.037 に答える
1

同じ問題が発生しました(DBCへの排他的アクセスがありません)が、別の理由があります。

低レベルのコマンド(FOPEN、FSEEK、FPUTS、FCLOSE、FCREATE)を介して処理されるテキストファイルで、アクセスと特定のアクティビティをプロトコル化します。2000年4月1日から問題なく行っています。

「重大な有害なネットワークイベント」の後、私たちのシステムはまだ実行されていましたが、非常に高速でした。プロトコル化されたすべてのアクションには約5分かかりました。FoxProは明らかに、5分間に低レベルの手順を再試行し、最終的にそれらをスキップしました(通知なしに、ところで)。

テキストファイルは、データベース自体の一部ではありません。それにもかかわらず、DBCは、テキストファイルへのゾンビロックの所有者でもあるマシン(電源オフ)からのゾンビロックではアクセスできませんでした。DBCロックは、xtファイルのロックハットが削除された後にのみ解放できました。

これがどのように接続されているかはわかりませんが、その後、すべてが再び正常になり、現在も正常です。サーバーはNovellNetwareであり、私はあまり好きではありません。

于 2010-05-18T09:52:58.653 に答える
1

権限の問題ではないことを確認するために、共有アクセス用に開くことができることを確認する価値があるかもしれません。

于 2011-10-11T21:33:04.213 に答える