我有一个脚本可以自动从备份中恢复数据库。我的脚本首先停止所有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之类的方法来确定何时能够恢复数据库。是否有解决此问题的方法,还是有更好的方法以这种方式恢复数据库?
答案 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
...
您还可以运行几个脚本来检查数据库的状态。点击此处了解更多信息: