db2归档⽇志与循环⽇志
DB2 数据库⽀持两种不同的⽇志模式:循环(Circular)和归档(Archival)。当新数据库创建时,系统默认的⽇志模式为循环。如果业务需求要求更⾼级的功能,您可以将⽇志模式从循环修改为归档。
DB2 将⼀直尝试将⽇志条⽬写⼊主要⽇志⽂件集,也就是数据库活动时间⾃动分配的⽇志⽂件。如果某个事务将所有主要⽇志⽂件消耗怠尽(所有主要⽇志⽂件都被标记为 unavailable),则数据库管理员将分配⼀个次要⽇志⽂件。当这个⽂件变满时,数据库管理员将再次检查主要⽇志⽂件的状态是否为 unavailable。如果是,则再分配⼀个次要⽇志⽂件并继续在其中写⼊条⽬。该过程将不断重复,直到所有次要⽇志⽂件都分配并写满。如果没有主要⽇志⽂件可供写⼊ Redo 条⽬,并且已经分配最⼤数量的次要⽇志⽂件,则应⽤程序将收到以下错误消息:
SQL0964C The transaction log for the database is full.
希望您曾经遇到过这种错误。但是,如果遇到此错误,则应该根据需要增加主要和次要⽇志⽂件(或者它们的⼤⼩)的数量。在理想情况下,主要⽇志⽂件的数量或⼤⼩应该⾜够保存最⼤的事务。分配次要⽇志⽂件相当消耗资源,因为它将在运⾏时执⾏。因此,我们应该将需要在⾼峰⼯作负荷期间分配的次要⽇志⽂件数量降到最低。要更新主要或次要⽇志⽂件的数量,可以发起以下命令:
UPDATE DB CFG FOR db_name USING LOGPRIMARY value
UPDATE DB CFG FOR db_name USING LOGSECOND value
注意:如果出现此问题,则应该分析造成整个⽇志⽂件空间变满的原因是什么。它可能是由失控查询或⽤户错误造成的,因此增加⽇志⽂件的数量或⼤⼩只能在表⾯上解决问题。⽐如说,假设某个⽤户发起了⼀个 DELETE FROM tab1 语句,且 TAB1 是⼀个相当⼤的表。虽然这⼀语句看上去没什么问题,每⾏⽣成⼀条删除⽇记记录,但是如果未经过配置处理它可以轻易地将⽇志空间填满。
循环⽇志
当循环⽇志⽣效时,事务数据将通过循环的⽅式写⼊主要⽇志⽂件。当存储于某个⽇志⽂件中的所有记录都不再需要⽤于恢复时,该⽇志⽂件将被重⽤,并且可以在以后再次成为活动⽇志⽂件。这意味着在循环⽇志模式中,⽇志⽂件的内容最终将被新⽇志条⽬重写。由于⽇志⽂件的内容被重写覆盖了,因此我们只能将数据库恢复到最后⼀次完整的数据库备份。不能使⽤循环⽇志执⾏时间点(point-in-time)恢复。
归档⽇志
在归档⽇志模式中,redo log 条⽬将写⼊主要⽇志⽂件。但是,与循环⽇志不同,这些⽇志⽂件永远都不可重⽤。当存储于某个⽇志⽂件中的所有记录都不再需要⽤于恢复时,该⽇志⽂件将被标记为⾮活动
⽽不是可重⽤。这意味着它的内容永远都不会被覆盖。当第⼀个主要⽇志⽂件变满时,系统将分配⼀个新的⽇志⽂件,这样主要⽇志⽂件的配置数量(LOGPRIMARY 数据库参数)将⼀直可⽤。db2数据库安装
与单个事务相关的所有条⽬必须在活动⽇志空间中保持⼀致。如果长时间运⾏的事务所需要的⽇志空间⼤于主要⽇志⽂件可以提供的空间,则可能会分配并使⽤次要⽇志⽂件。在归档⽇志模式中,通过结合使⽤数据库备份映像和⽇志⽂件,我们可以将数据库恢复到具体的时间点。有关此流程的详细描述请参见下⽂。
何修改⽇志模式
创建新的 DB2 数据库时,默认的⽇志模式为循环⽇志。如果希望将⽇志模式从循环修改为归档,可以执⾏以下步骤:
在磁盘上创建⼀个⽂件夹(⽐如说 e:\db_name\archive),磁盘上必须有⾜够的空间存储归档⽇志⽂件。保证归档⽂件⽬标⽂件夹与活动⽇志⽂件⽬标⽂件夹分开。
终⽌与数据库的连接:
TERMINATE
更新归档⽇志⽂件⽬标⽂件夹(为归档⽇志⽂件指定路径可以将归档⽇志模式打开)。
UPDATE DB CFG FOR db_name USING LOGARCHMETH1 "Disk:e:\db_name\archive"
重新连接到数据库:
CONNECT TO db_name
连接失败并显⽰以下错误消息:
SQL1116N A connection to or activation of database db_name cannot be made because of backup pending: SQLSTATE=57019
出现错误消息的原因是,⽇志模式已经从循环更改为归档,并且需要执⾏完全数据库备份。数据库处于循环⽇志模式时执⾏的备份并不充分,因此当切换模式后需要执⾏新备份。
使⽤以下命令执⾏完全数据库备份:
BACKUP DATABASE db_name TO d:\db_name\backup
尝试再次连接到数据库。这次应该能够成功。
CONNECT TO db_name
事务是逻辑⼯作单元。每⼀个事务在事务⽇记⽂件中都存储有相应的⽇志记录。每个事务都有⼀个相应的 Redo Log 条⽬。Redo Log 条⽬将写⼊当前的活动⽇志⽂件。当活动⽇志⽂件变满时,它将被标记为 unavailable。此时,DB2 将接着此活动⽇志⽂件另外创建⼀个⽇志⽂件,并继续在其中写⼊⽇志条⽬。当前活动⽇志⽂件变满时,DB2 将重复这⼀循环过程。当事务完成后(发起 COMMIT 或 ROLLBACK 语句),相应的⽇志条⽬将被释放,因为不再需要将它们⽤于恢复数据库。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论