多用户模式错误时备份还原失败

时间:2017-02-06 17:50:15

标签: progress-4gl openedge progress-db

我有一个脚本可以自动从备份中恢复数据库。我的脚本首先停止所有appserver实例,停止所有数据库,然后从备份恢复。下面是伪代码:

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命令,它就会输出以下错误:

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

等待~60秒后,再次运行prorest命令会按预期执行,并正确恢复数据库。我的猜测是,在数据库停止后,仍存在与数据库关联的进程。我想找到一个解决这个问题的方法,而不必使用诸如sleep-retry之类的方法来确定何时能够恢复数据库。是否有解决此问题的方法,还是有更好的方法以这种方式恢复数据库?

1 个答案:

答案 0 :(得分:1)

有一些超时可以发挥作用:

  

当无条件批量关闭运行(PROSHUT -by)时,会发生以下事件序列:

     

如果之后还有任何正在运行的进程:

     
      
  • 30秒 - 唤醒等待锁的客户。
  •   
  • 60秒 - 唤醒等待锁的客户。
  •   
  • 90秒 - 唤醒等待屏幕输入的客户端。
  •   
  • 5分钟 - 将关机信号重新发送给剩余的客户。
  •   
  • 10分钟 - 向剩余的客户发送终止(SIGTERM)信号。
  •   

更多信息: http://knowledgebase.progress.com/articles/Article/P3222

您可以拖尾database.lg文件并查找告诉您数据库已关闭的消息:

[2017/02/06@20:20:56.353+0100] P-14292      T-13420 I SHUT    5: (542)   Server shutdown started by Jens on CON:.
[2017/02/06@20: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/06@20:20:56.499+0100] P-10276      T-11404 I BROKER  0: (2248)  Begin normal shutdown
[2017/02/06@20:20:57.499+0100] P-10276      T-11404 I BROKER  0: (2263)  Resending shutdown request to 0 user(s).
[2017/02/06@20:21:01.692+0100] P-10276      T-11404 I BROKER  0: (15109) At Database close the number of live transactions is 0.
[2017/02/06@20:21:01.692+0100] P-10276      T-11404 I BROKER  0: (15743) Before Image Log Completion at Block 1 Offset 5300.
[2017/02/06@20:21:01.693+0100] P-10276      T-11404 I BROKER  0: (453)   Logout by Jens on CON:.
[2017/02/06@20:21:01.694+0100] P-10276      T-11404 I BROKER   : (16869) Removed shared memory with segment_id: 50528256
[2017/02/06@20:21:01.694+0100] P-10276      T-11404 I BROKER   : (334)   Multi-user session end.
[2017/02/06@20:21:02.356+0100] P-14292      T-13420 I SHUT    5: (453)   Logout by Jens on CON:.

(334)消息基本上告诉您数据库已关闭。

另一种选择可能是检查数据库锁文件(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