db2如何查看是归档模式

db2如何查看是归档模式,第1张

模拟事务,测试是否会归档

[db2inst1@seagull archive]$ ls /db2home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/

S0000000.LOG S0000001.LOG S0000002.LOG

[db2inst1@seagull archive]$ db2 "insert into staff select * from staff"

DB20000I The SQL command completed successfully.

...重复执行该语句,直到报SQL0964C错误

[db2inst1@seagull archive]$ db2 "insert into staff select * from staff"

DB21034E The command was processed as an SQL statement because it was not a

valid Command Line Processor command. During SQL processing it returned:

SQL0964C The transaction log for the database is full. SQLSTATE=57011

#活动日志目录里面先前的日志文件不见了,只剩下了first active ->current的log,个数正好小于等于logprimary(3) + logseconday(2)

[db2inst1@seagull archive]$ ls /db2home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/

S0000007.LOG S0000008.LOG S0000009.LOG S0000010.LOG S0000011.LOG

[db2inst1@seagull C0000000]$ db2 get db cfg|grep "First active log file"

First active log file = S0000007.LOG

#可以看到归档目录下已经有了归档文件,且活动日志目录里面的文件被归档后就删除了,归档设置成功!

[db2inst1@seagull C0000000]$ ls

S0000000.LOG S0000001.LOG S0000002.LOG S0000003.LOG S0000004.LOG S0000005.LOG S0000006.LOG

此时的LOGRETAIN参数实际还是OFF的,也可以归档,我觉得原因是db2有两种设置归档模式的方法:

1)一种是设置USEREXIT=ON,此时对应的LOGRETAIN必须为ON,归档由USEREXIT指定的用户程序来执行归档

2)另外一种是设置LOGARCHMETH1参数(还有一些相关参数,参考后续介绍),此参数可取值如下

a.OFF :表示非归档

b.LOGRETAIN:等价于将 LOGRETAIN 配置参数设置为 RECOVERY,如果指定此值,将自动更新LOGRETAIN参数

c.USEREXIT :且等价于将 USEREXIT 配置参数设置为 ON,如果指定此值,将自动更新USEREXIT参数

d.DISK :日志文件将在其中归档,

e.TSM :将日志文件归档在本地 TSM 服务器上

f.VENDOR :指定将使用供应商库来归档日志文件。此值后必须紧跟冒号(:)和库的名称

结论:

1)我的试验里,设置了LOGARCHMETH1=DISK:/xx/xx,就可以归档了,LOGRETAIN=OFF或者RECOVERY无所谓

2)如果执行db2 update db cfg for sample using LOGRETAIN=ON,则相应的LOGARCHMETH1从DISK:/xx/xx自动

变成了LOGRETAIN,而不管其原值是什么,此时不会自动归档,必须设置USEREXIT,或者再更新LOGARCHMETH1参数为DISK:/xx/xx

3)更改db cfg后,一定要connect reset,否则可能不起作用

4)不用模拟事务,可以利用db2 archive log for db sample 命令来强制归档,同样可以看到归档是否生效

在数据库中,日志的重要性那是大大的大,所以日志一定是要先了解的.

日志类型:

主日志(Primary logs)

预分配,可用数目由db cfg的LOGPRIMARY参数规定

辅助日志(Secondary logs)

依需要再动态分配,最大数目由db cfg的LOGSECOND参数来定.辅助日志同时会在数据库

所有连接全部关闭后被删除.

如果LOGSECOND为-1,则不限制记录日志的大小.

日志记录类型:

有两类循环日志和归档日志,可以通过"配置数据库日志记录"向导来修改数据库的日志记录类型。

(1)循环日志:

默认的日志记录策略,循环日志按顺序使用。当日志中所包含的工作已提交或回滚时,可以重用。

主日志预先分配。 而辅助日志则在需要时才分配。

循环日志有两类日志,主日志和辅助日志.

主日志预先就要配好了,辅助日志在需要时再分分配.

DB2管理程序按顺序请求 ->查找主日志 ->需要的主日志不可用 ->分配一个辅助日志.

-> 辅助日志也满了 ->再去检查下主日志能用不 ->还不可用就又分配一个新的辅助日志

-> 然后就一直重复上述检查 

->一直到有主日志文件变为可重用为止.然后就把辅助日志释放掉.

循环日志在备份恢复中的作用:

不能进行前滚恢复,但可进行崩溃恢复和版本恢复

仅支持脱机备份.

(2)归档日志

归档日志是一种日志文件的管理技术,将那些处理非活动状态的日志文件进行归档.

归档日志是非默认的.

归档日志有几个要类

1.活动日志

包含发那些尚未提交(或回滚)的事务相关信息.还包含已提交但改动还没与的的事务相关信息

restart database

rollforward

2.联机归档日志

当活动日志关闭时,将成为一个归档日志。称它们为"联机" 是因为它们和活动

日志存放在相同的子目录下。

3.脱机归档日志

这些日志文件已经从活动日志所在的目录中移开了。可以手动,也可以

通过 userexit这样的过程调用来自动进行。归档的日志文件可以

存储到磁带或其它介质上。如tsm上。

正在用的日志(活动日志) ->如果日志用完了(联机归档日志) ->再把这些不用的日志给备份或移开(脱机归档日志)

循环日志在备份恢复中的作用:

唯一支持前滚恢复和实现可恢复数据库的日志方法.

支持脱机备份和联机备份

在DB2数据库中查看与日志有关的主要参数:

userexit  是否启用用户出口

logretain 是否启用归档日志

trackmod 是否启用增量备份功能 

这些默认是off,即循环日志模式,如为"Yes"或"Recovery",则表明为归档日志模式.

Unix/Linux下的查看命令:

DB2 v9及以前版本:

db2 get db cfg for sample|grep "USEREXIT"

db2 get db cfg for sample|grep "LOGRETAIN"

db2 get db cfg for sample|grep "TRACKMOD"

DB2 v10:

db2 get db cfg for sample |grep "LOGARCHMETH1"

Windows下的查看命令:

DB2 v9及以前版本:

db2 get db cfg for sample |find /I "userexit"

db2 get db cfg for sample |find /I "logretain"

db2 get db cfg for sample |find /I "trackmod"

DB2 v10:

db2 get db cfg for sample |find /I "LOGARCHMETH1"

可更改这些参数使DB2数据库处于归档日志模式,以便支持联机备份.

更改命令:

DB2 v9及以前版本:

db2 update db cfg for sample using userexit on//启用用户出口

db2 update db cfg for sample using logretain on//启用归档日志

db2 update db cfg for sample using trackmod on//启用增量备份功能 

DB2 v10:

-- DISK : 本地磁盘

-- TSM : Tivoli Storage Manger

-- VENDOR : 第三方存储设备

db2 update db cfg for sample using LOGARCHMETH1 disk:/db2/db/log_archive

注意事项:

变更这些归档模式参数后,会提示SQL1116N错误,DB2数据库处于backup pending状态,是不能马上连接上数据库的,必须要做脱机备份一次才行.

脱机备份命令例子:

db2 backup db sample to c:\xclbkcold

可手工归档下,检查下生成的日志(前提是没数据库连接):

db2 archive log for db xcldb

db2 list history archive log all for xcldb

关于日志的管理:

查看首活动日志:

db2 connect to xcldb2

--中文环境使用这个

db2 get db cfg|find "首个活动日志文件"

--英文环境使用这个

db2 get db cfg|grep -i "First active log file"

db2 connect reset

db2 terminate

清理日志:

db2 connect to xcldb2

db2 prune logfile prior to S0000033.LOG

其中S0000011.LOG就是刚刚的首活动日志

手工归档命令:

db2 archive log for db xcldb2 //会手工产生日志


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9235644.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存