2015-07-10 68 views
2

假设有一个应用程序在尝试从数据库读取的非停止循环中。 我曾尝试以下,但它不工作:如何在使用DB2时脱机备份DB2数据库

db2 CONNECT TO SAMPLE 
db2 QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS 
db2 TERMINATE 
db2 DEACTIVATE DB SAMPLE 
db2 BACKUP DATABASE SAMPLE 

看来,如果(DEACTIVATE DB)不会做任何事情,因为在一个循环的应用程序可以从数据库中仍读。

尝试备份时,我不断收到错误“数据库当前正在使用”。

回答

0

您必须确保没有应用程序连接到数据库(db2列表应用程序)。此外,您必须确保数据库不活动(db2列表活动数据库)。

记住一个静止或强制应用程序,是一个异步任务。这意味着你执行它们中的任何一个,但是当控件返回时,它并不意味着应用程序已经被断开连接。

典型情况是回滚批处理,当回滚需要几分钟时。 。

+0

当我做“QUIESCE DATABASE”时,它说“数据库已经是QUIESCED”。我无法停止非停止循环的应用程序,因此,在执行“强制连接所有”后,它将断开连接数秒,但随后又恢复为活动状态。 – genericMetal

+0

这意味着应用程序连接的授权ID具有“QUIESCE CONNECT”特权,允许它连接到静默数据库。最常见的情况是,当应用程序使用实例所有者ID或类似的连接时,这本身就是一个坏主意。有没有简单的方法 - 你必须在网络层面阻止连接,例如通过更改实例端口(需要重新启动)或设置防火墙规则来阻止应用程序IP地址。 – mustaccio

0

QUIESCE DATABASE不会阻止未来新的连接,我相信至少有两个选择:

  1. 使用QUIESCE INSTANCE <instance> USER <username> RESTRICTED ACCESS IMMEDIATE FORCE CONNECTIONS。这将强制所有现有连接并限制新连接的访问​​。只有在USER中指定的用户才能够连接。据推测,这将是您的管理帐户。

  2. 如果这是一个没有去,或者如果你是无法阻止USER从产生新的连接,您可能希望(暂时)UNCATALOG DB和/或为了防止新的连接禁用DB2COMM注册表变量。

HTH。

+0

我的意思是'UNCATALOG',然后''CATALOG''使用不同的名称 - 用于'BACKUP'的目的。 –