2017-02-06 12 views
0

バックアップからデータベースを復元するためのスクリプトがあります。私のスクリプトはまず、すべてのアプリケーションサーバーインスタンスを停止し、すべてのデータベースを停止してから、バックアップからリストアします。下記の擬似コードです:マルチユーザーモードのエラーでバックアップの復元に失敗する

foreach appserver: 
    asbman -name (appserver) -stop 

foreach database: 
    dbman -name (database) -stop 

proutil database.db -C enablelargefiles 
echo y | prorest database.db backup.bak -verbose 

私のスクリプトがprorestコマンドに達すると、それは次のエラー出力:〜60秒間待ってから

** The database D:\Directory\Wrk\db\database is in use in multi-user mode. (276) 

を、再びprorestコマンドを実行すると、期待通りに実行されますデータベースが正しく復元されます。私の推測では、データベースが停止した後もまだ実行中のプロセスがデータベースに関連付けられているということです。私はこの問題に対する解決策を見つけるために、スリープ再試行などの方法を使用して、データベースがいつ復元可能であるかを判断する必要がないようにしたいと考えています。この問題に対する解決策はありますか、またはこの方法でデータベースを復元するためのより良い方法がありますか?

+0

あなたはappserversと、データベースを停止した後で、すべて一時停止されていますか?彼らは瞬時にシャットダウンしません。 sleep-retryメソッドを実行する必要があります。 – TheDrooper

+0

@TheDrooper私は現在、appservers /データベースを停止した後で一時停止していません。瞬時にシャットダウンしない理由を知っていますか?または、少なくともdbmanが停止した理由は? – PrestonM

+1

* manコマンドは、アクションが実行される要求をキューに入れ、管理サーバーが要求を受け取ったことを報告します。あなたが望んでいないと言っていることを知っていますが、処理を続行しても問題ないことを確認するには、ループとステータスチェックを追加する必要があります。 –

答えて

1

が遊びに来ることができるいくつかのタイムアウトがあります。

When an unconditional batch shutdown runs (PROSHUT -by), the following sequence of events takes place:

If there are any running processes left after:

  • 30 Seconds - wake up clients waiting for locks.
  • 60 Seconds - wake up clients waiting for locks.
  • 90 Seconds - wake up clients waiting on screen input.
  • 5 Minutes - Resend the shutdown signal to remaining clients.
  • 10 Minutes - Send a terminate (SIGTERM) signal to remaining clients.
ここ

さらに詳しい情報:あなたは尾database.lgファイルをすることができ、データベースがあることを伝えるメッセージを探し http://knowledgebase.progress.com/articles/Article/P3222

シャットダウン:

[2017/02/[email protected]:20:56.353+0100] P-14292  T-13420 I SHUT 5: (542) Server shutdown started by Jens on CON:. 
[2017/02/[email protected]:20:56.499+0100] P-10276  T-11404 I BROKER 0: (15193) The normal shutdown of the database will continue for 10 Min 0 Sec if required. 
[2017/02/[email protected]:20:56.499+0100] P-10276  T-11404 I BROKER 0: (2248) Begin normal shutdown 
[2017/02/[email protected]:20:57.499+0100] P-10276  T-11404 I BROKER 0: (2263) Resending shutdown request to 0 user(s). 
[2017/02/[email protected]:21:01.692+0100] P-10276  T-11404 I BROKER 0: (15109) At Database close the number of live transactions is 0. 
[2017/02/[email protected]:21:01.692+0100] P-10276  T-11404 I BROKER 0: (15743) Before Image Log Completion at Block 1 Offset 5300. 
[2017/02/[email protected]:21:01.693+0100] P-10276  T-11404 I BROKER 0: (453) Logout by Jens on CON:. 
[2017/02/[email protected]:21:01.694+0100] P-10276  T-11404 I BROKER : (16869) Removed shared memory with segment_id: 50528256 
[2017/02/[email protected]:21:01.694+0100] P-10276  T-11404 I BROKER : (334) Multi-user session end. 
[2017/02/[email protected]:21:02.356+0100] P-14292  T-13420 I SHUT 5: (453) Logout by Jens on CON:. 

(334)メッセージは、データベースがシャットダウンされていることを基本的に示しています。

もう1つのオプションは、データベースロックファイル(database.lk)をチェックすることです。

... 
2017-02-06 20:21   2 228 224 mySportsDb.b1 
2017-02-06 20:21   1 703 936 mySportsDb.d1 
2017-02-06 20:21   32 768 mySportsDb.db 
2017-02-06 20:21   89 643 mySportsDb.lg 
2017-02-06 18:00    920 mySportsDb.lic 
2017-02-06 20:26    265 mySportsDb.lk 
... 

データベースの状態を確認するために実行できるスクリプトもいくつかあります。ここで詳細を参照してください。

http://knowledgebase.progress.com/articles/Article/P136887

+0

@ Jensdありがとう!データベースのシャットダウンにタイムアウト期間があり、その期間があるかどうかを知っていますか?例えば、私の唯一のオプションがログファイルを追跡したり、スリープしてロックファイルを検索しようとするのであれば、トレイル/サーチの最大時間はどれくらいになるでしょうか? – PrestonM

+1

@PrestonMデフォルトのタイムアウトがあります。私は答えにそれらのリンクを追加しました。これらのデータベースを捨ててしまえば、シャットダウン(プロシャット-Fまたはプロシャットバイ)を強制することはできますが、それはそれらを破壊します... – Jensd

+0

これは素晴らしい提案です。これらはテストサーバーなので、実際にはこれらのデータベースを捨ててしまいます。 – PrestonM

関連する問題