随着System i开发人员开始使用SQL创建他们的数据库对象,许多i5 / OS开发人员都在为如何最好地管理交织到i5 / OS SQL接口中的架构和日志对象而苦苦挣扎。 另外,由于i5 / OS日记与其他DB2服务器中使用的日志记录机制不同,因此其他平台(例如,DB2 for AIX)的其他IBM DB2开发人员在首次使用System i时也面临类似的挑战。
在DB2 for i5 / OS上,模式用于对相关的数据库对象进行分组。 DB2 for i5 / OS模式实际上是DB2对象和i5 / OS对象的集合。 实际上,DB2 for i5 / OS实际上将模式对象称为旧版本上的一个集合。 当执行CREATE SCHEMA语句时,将创建以下对象(请参见图1 ):
模式中对象的这种集合提供了用于存储相关DB2对象和日记对象的容器,这些对象对于恢复对这些DB2对象的数据库更改是必需的。
图1.空模式的iSeries Navigator视图
图书馆
库是对象的逻辑“容器”,是对象存储的地方。 DB2对象名称在此容器内必须唯一。 这些作为模式的一部分而创建的经过筛选的DB2目录视图是一组描述表,视图,索引,过程,函数,触发器和约束的视图。 这些视图基于库QSYS和QSYS2中目录表的基本集构建,并且仅包含有关该模式中包含的对象的信息。
日记帐和日记帐接收者对象
DB2 i5 / OS版通过称为journaling的过程将更改记录到表中。 i5 / OS日记通过将信息发送到日记接收器来记录数据库对象的更改。 因此,日记帐接收器类似于DB2日志文件。 在模式中创建表时,在执行CREATE SCHEMA
语句期间,该表将自动日记到由DB2 for i5 / OS创建的日记对象。
即使DB2自动为表对象启动日记功能,管理日记和日记接收者对象也是用户的责任。 可以想象,包含数据库更改的这些日志接收器对象可能会变得非常大,因此除非您有无限的磁盘空间,否则忽略自动创建的日志接收器不是一种选择。 但是,不应随意删除日记帐接收器对象以节省磁盘空间。 此外,即使可以停止表的日志记录,也不建议这样做,因为访问非日志记录对象的应用程序无法指定隔离级别,并且应用程序无法发出提交和回滚。
大多数i5 / OS客户将日记帐接收器用作数据库备份和恢复过程的核心部分。 一种方法是每周一次保存表备份介质的完整副本,然后每晚将更改保存到表(例如日记帐接收器)中以备份介质,然后每周重复一次此过程。 备份日记帐接收器后,便可以删除日记帐接收器对象。 在《 IBM System i信息中心》的《 备份和恢复指南》中找到有关保存和删除日记帐接收者对象的正确步骤的更多信息。
图2.日记界面
您还将注意到,随着时间的推移,多个日记帐接收器对象将出现在DB2 for i5 / OS模式中。 这是因为DB2 i5 / OS版使用系统管理的接收器选项(例如, CHGJRN CL命令上的MNGRCV MNGRCV(*YES)
创建日志对象。 图2中的图形日记帐管理界面表示一个系统管理的日记帐接收器,在“收件人:”部分中选中了系统单选按钮。 使用此选项,每次重新启动系统时(例如,对系统进行IPLing时),并且每当附加的接收器达到其大小阈值时,DB2都会自动创建一个新的日志接收器。 当前的日记帐接收器已分离,并创建了一个新的日记帐接收器。 分离日记帐接收器时,备份它比较容易。 同样,必须先卸下接收器,然后才能将其删除。 因此,您可以看到此选项如何使日记帐接收者的管理更加容易。
还可以通过选择“不再需要时删除接收器”单选按钮(参见图2 )或通过在CHGJRN CL命令上指定DLTRCV(*YES)
来简化日志清理。 该系统管理的选项允许i5 / OS自动删除不再与活动数据库事务关联的日志接收者。 使用此选项之前,应查阅《 备份和恢复指南》以确保此选项不会影响您的系统备份过程。 管理日记帐性能不在本文讨论的范围之内,但是您可以参考《 争取最佳日记帐性能》 (SG24-6486,IBM红皮书)。
由于DB2 i5 / OS版没有表空间的概念,并且可以跨磁盘自动划分和平衡DB2对象,因此从管理员的角度来看,日志和日志接收者对象将是唯一需要空间管理的架构对象。 唯一的其他空间管理任务是确保系统上有足够的可用磁盘空间。
移动架构
由DB2自动创建的日志和日志接收者对象也是将模式移至新系统或其他模式(例如,从测试移至生产环境)时需要解决的关键组件。 将表移至新架构(通过复制或还原操作)后,该表仍将与原始架构中的日记关联-它不会自动开始使用新架构中的日记。 因此,将表从一个模式迁移到另一个模式时,重置DB2表的日志是必要的步骤。
将模式移至其他模式或系统的首选方法是重新运行原始SQL创建脚本。 如果SQL创建脚本不可用,则可以使用“生成SQL”任务使用iSeries Navigator对其进行反向工程。 只需右键单击架构对象,然后选择“ Generate SQL”任务即可为架构中的所有对象构建一个SQL创建脚本。 由于表对象是在新架构中创建的,因此它们将自动记录到新日记帐中。
很多时候,重新创建所有DB2对象都是不可行的,因为源对象包含大量数据。 在这种情况下可以使用的另一种方法是i5 / OS保存和恢复命令。
如果模式名称在源系统和目标系统上相同,则可以使用以下步骤:
- 源系统上的CL命令: SAVLIB MYSCHEMA ACCPTH(* YES)
- 目标系统上的CL命令: CLRLIB MYSCHEMA
- 目标系统上的CL命令: RSTLIB MYSCHEMA OPTION(* ALL)
由于日志和日志接收者对象在源系统和目标系统上具有相同的名称,因此将自动记录已还原模式MYSCHEMA中的DB2对象。
当模式名称不同时,需要执行其他步骤来确保在还原操作之后正确记录了DB2对象。 如果我有一个带有两个表DEPARTMENT和EMPLOYEE的名为SRC的模式,那么可以使用以下步骤使用保存和还原方法将模式SRC移入模式TRG。
- CL命令: SAVLIB SRC ACCPTH(* YES)
请记住,架构的i5 / OS容器是一个库。 如果架构中存在任何索引
The ACCPTH(*YES)
选项将保存实际的索引树对象-这将消除必须在还原操作中重建的索引。 - SQL:建立模式TRG
这将使用自动创建的日志和系统目录视图创建目标架构对象。
注:如果使用CHGJRN CL命令或iSeries导航器将日志对象更改为其默认设置。 这些自定义将需要在TRG架构中的日记对象上执行。
- CL命令 :
CRTDTAARA DTAARA(TRG/QDFTJRN) TYPE(*CHAR) LEN(40) VALUE('TRG QSQJRN ')
CHGDTAARA DTAARA(TRG/QDFTJRN (21 20)) VALUE('*ALL *RSTOVRJRN')
QDFTJRN数据区是一个特殊的数据区,由restore命令自动处理。 restore命令将查询此数据区域的内容,以确定是否已请求任何特殊日志处理。 没有此数据区域,restore命令将不执行任何日记处理。 结果是DB2对象将不再在新模式中记录日志,因为默认情况下,它们仍与原始模式中的日志关联。 * RSTOVRJRN值指示还原命令,以在还原每个对象后将DB2对象记录到指定的日志(TRG / QSQJRN)。 在i5 / OS的V5R4中添加了对QDFTJRN数据区域的支持。 您可以在iSeries信息中心的QDFTJRN数据区域中找到更多详细信息。
- CL命令: RSTLIB SRC OPTION(* NEW)RSTLIB(TRG)
* NEW选项将仅还原TRG模式中尚不存在的SRC对象。 除了DB2自动创建的对象(期刊,日记帐接收者和目录视图)之外,这种类型的还原实质上还可以还原所有内容。 由于QDFTJRN数据区域的内容,在还原操作完成之后,将正确记录DB2对象。
注意:如果用户已明确记录了架构中的逻辑文件或索引对象,则在还原后,必须使用ENDJRNAP和STRJRNAP CL命令终止和重新启动这些对象上的日志。
- 将新配置的架构保存到备份介质,这样就不必再次执行这些配置步骤!
结论
现在,您应该对构成DB2 for i5 / OS SQL Schema对象的对象(库,目录视图,日记帐和日记帐接收器)以及这些i5 / OS对象之间的相互关系有一个清晰的了解。 另外,与在其他服务器上登录相比,对DB2 for i5 / OS日记的了解应该简化日记接收器对象的管理-尤其是支持日记系统管理的选项。
最重要的是,从长远来看,您还应该通过了解移动模式的首选方法并确保在此迁移期间正确维护日志配置,来提高DB2 i5 / OS版的管理效率。
V5R4之前版本的说明
在V5R4之前的i5 / OS发行版上,不支持QDFTJRN数据区域。 因此,必须手动执行以下步骤,以确保在还原操作之后正确记录了DB2对象:
- 记录当前在TRG中记录的DB2对象的列表。
由于i5 / OS日志CL命令仅接受短DB2对象标识符,因此在此步骤中将需要记录DB2 for i5 / OS的简称 (请参阅DB2 for i5 / OS长标识符和短标识符文章)。
- CL命令: ENDJRNPF * ALL SRC / QSQJRN
新模式TRG中的DB2对象当前与原始模式中的日志关联。 通过结束所有表的日记记录来消除此关联。 如果在还原模式TRG的系统上不存在模式SRC,则还原操作将终止与原始模式的日志关联。 因此,当模式SRC和TRG驻留在不同的系统上时, 不需要ENDJRNPF * ALL命令。
- 每个表的CL命令:
STRJNRPF TRG/DEPT TRG/QSQJRN IMAGES(*BOTH) OMTJRNE(*OPNCLO) STRJRNPF TRG/EMPLOYEE TRG/QSQJRN IMAGES(*BOTH) OMTJRNE(*OPNCLO)
STRJRNPF
当前不支持*ALL
选项,例如ENDJRNPF
命令。 因此,需要为每个DB2表对象执行命令,以将这些表与模式TRG中的日志和日志接收者对象相关联。
翻译自: https://www.ibm.com/developerworks/data/library/techarticle/0305milligan/0305milligan.html