Sun StorEdge Instant Image™ 应用程序/版本的测试最佳操作
背景:
软件工程师们开发新的应用程序时,总希望有"活"的数据来做测试。但是使用真实的"活数据"总是会对在线事务处理造成影响,至今未找到使人满意的折衷方案,因此应用程序的测试工作十分困难。
应用程序/版本的现有测试方法
目前,软件工程师们通过"克隆"真实存在的数据库的方法来测试应用程序。所谓"克隆",就是将数据库备份到磁带上,并存放在其他地方。一个数据库的"冷备份"要求在相当长的一段时间内用户不能使用该数据库。按现在的数据库平均规模和磁带技术来计算,一次备份需要好几个小时。因此,这种方法现在也不很常用,而且冷备份之后的"活"数据也已经不新鲜了。 目前常用的一种方法是"热备份"。这种方式允许在线事务继续进行,但要求在几小时中数据库处于"备份"状态,在备份状态时在线事务处理的性能会受到影响。另外,一旦备份完成,并存在测试区时,它会被覆盖,各种事务不得不卷回。 还有一种可采用的方法就是做一个新的数据库,其数据模型与在线数据库相似,但里面存放的数据不同。这种方法对在线事务影响不大,缺点是应用程序是在一个不同于在线数据库的新库上接受测试的,因此不是基于"真实"的数据。
测试应用程序/新版本的新方法
有一种新的技术可以加快应用程序的开发----"即时点(point-in-time)"拷贝技术,它频繁地对真实的生产数据"拍快照"以获得数据,作为测试应用程序的输入数据。这种技术既可以满足测试的需求,又不影响在线事务处理的进行,能缩短开发周期,大大加快应用程序的开发速度。
一般性的操作问题
必须自动或手动创建操作过程以使用即时点拷贝技术。例如,什么时候拍快照,拍快照的频率,以及当快照完成时通知第二层的应用程序,这些都是需要解决的操作问题。 一般情况下,创建即时点的时刻必须达到数据库的数据一致性,这是为了保证快照的"像"的逻辑一致性(比如,不能在一次事务处理过程中拍快照)。 创建一份即时点拷贝以供测试应用程序时访问的操作过程如下: 1保证该时刻主数据的一致性(将所有数据冲到磁盘上); 2创建数据的一份即时点拷贝; 3在即时点拷贝上运行被测试的应用程序; 4必要时重新同步,根据主数据更新即时点拷贝。
术语
主卷----存放某个或某组应用程序的原始数据的物理磁盘设备;
像卷----存放拷贝数据的物理磁盘设备,其中的数据可以是改变了的即时点数据,也可能是主卷原始数据的完全镜像;
位图----一个文件或物理磁盘分区,InstantImage软件用之来维护主卷与像卷数据之间关系的当前状态;
独立拷贝----一个完成了的独立拷贝是存放在像卷上的主卷的一个即时点拷贝,也就是拍快照时刻的主卷的备份。建立一个独立拷贝之后,InstantImage软件立刻启动一个后台进程,处理从主卷到像卷的数据块拷贝操作。在拷贝过程中,InstantImage软件认为像卷处于"非独立"状态,并对所有访问像卷的操作进行控制;
非独立拷贝----主卷的一个即时点视图。一旦建立了一个非独立拷贝,备份程序立刻可以使用它。拷贝建立之后,像卷要不断根据主卷中被修改的块维护原始数据,对没有改动的块上的数据存取直接来自于主卷,只有位图上指明主卷与像卷内容不匹配时才访问像卷;
卷对----一个卷对包括一个主卷和相应的像卷。每个卷对配有一个位图。用户可以建立任意多个卷对,只要存储空间允许,InstantImage软件没有对卷对数量做其它限制。
操作细节
本节将详细介绍如何制作在线数据库的即时点拷贝,并使之对在线事务影响最小。在开始之前,请确认您是以超级用户身份登录的。
1.计算需要复制的原(raw)卷的最大数量。 必须有另一片至少是相同容量的存储空间存放即时点拷贝。将现有的磁盘组和卷复制到另一磁盘组中。在线卷,也就是主卷,必须是Solaris环境支持的RAID(廉价磁盘冗余阵列);像卷不必一定是相同的RAID,但容量至少要和主卷一样大。
2.保证InstantImage软件对主卷和像卷都有访问权限。 a.编辑文件/etc/opt/SUNWspsv/sv.cf,加入主卷和像卷名。卷名后必须出现关键字raw或cache:如果你的机器上没有安装StorageFastWriteCache,就使用raw,否则使用cache。
3为InstantImage软件分配空间,以便其跟踪记录主卷与像卷之间的差异 对主卷上的每1G空间,InstantImage软件需要8K+8K空间。每个InstantImage卷对(包括一个主卷和一个像卷)要对应一个位图。这个文件必须预先分配给适当的空间。
4将数据库或文件系统置成某特定状态 最简单的方式是关闭数据库。或者,也可以将数据库设置为"备份"状态,并持续几秒时间,不过这样做会需要额外的步骤来启动shadow。对于UFS文件系统,可以使用lockfs(1M)命令,关于lockfs(1M)的详细使用请参考手册。
5.在根目录下启动即时点拷贝操作
6拷贝必要的数据库ASCII文件 将所有需要的数据库ASCII文件复制一份,例如init.ora、config.ora等。一份文件给主卷,一份给像卷。例如 #cpOracledb1cntlfile1Oracleshadowcntfile1 #cpOracledb1cntfile2Oracleshadowcntfile2.
7将数据库恢复为在线状态 将原来的数据库恢复成在线,事务处理可以继续。关闭(或处于备份状态、lockf)的时间不能长于1分钟。
8.必要时要修改脚本来启动像数据库 可能需要修改脚本来启动像数据库,指定新的控制文件和路径。这些可以借助link很快完成。
9.将像数据库设置为在线状态 现在像数据库可以在任何时候设置成在线状态,不必要等待Instant Image软件的镜像操作全部完成。Instant Image软件会记录合适的数据在什么地方,并满足相应的访问要求。如果要求的数据在像卷上,就读像卷;如果要读的数据还没有拷贝到像卷,Instant Image软件会从主卷上搜索所需数据。如果有写操作对主卷操作,Instant Image软件 要先将未修改的数据拷贝到像卷,以保证像的即时性。
10.重新同步 Instant Image软件会记录在主卷和像卷上发生的所有的改动,因此更新像卷时不必重新拷贝整个数据库,而只需要拷贝那些改动过的地方,并更新控制文件。 重新同步的步骤如下: 将数据库置成某特定状态; 拷贝必要的数据库ASCII文件,例如控制和登录文件; 执行Instant Image命令以更新像卷 现在主卷数据库又可以处理在线事务了。更新工作完成后像卷数据库也可以启动工作。Instant Image软件使用如下命令可以控制更新的进展情况: #iiadm-i. 如果这个过程是在一个脚本文件中运行的,可以使用iiadm-w命令,使Instant Image软件等待更新工作完成之后才允许其他命令。 上述过程可以根据需要无限地不断重复。 对文件系统的应用程序可以采用类似的方法。
由于Instant Image软件是在生设施层工作的,因此,如果应用程序位于文件系统,请采取如下步骤: ·暂停应用程序; ·关闭像卷/文件系统; ·使用lockfs-wmount_point命令冲掉页cache; ·创建即时点拷贝,同上; ·使用命令lockfs-umount_point对文件系统解锁; ·启动像卷文件系统。 这个过程中没有必要关闭应用程序或主卷文件系统。
如果以后你要加入新的表、文件系统或卷,请参照本《最佳操作指南》,按其中的步骤操作。