还原测试环境的两种方法

一、测试环境

数据库:Oracle10g

前台:Dojo

二、恢复测试环境的三种方法:

1、采用虚拟机,将Web应用及数据库都放到虚拟机上,通过快照的方式恢复测试环境(最好)

2、开启数据库的

三、实现方式

1.Ant方式(以编程方式动态调用Ant文件)

 

(1)新建Java文件,内容如下:

package com.neusoft.server;
import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;

/** 
 * <p>Description: [还原数据库]</p>
 * @author  <a href="mailto: [email protected]">xxxx</a>
 * @version $Revision$ 
 */ 
public class FlashBack {
	private Project project;
	private File buildFile;
	private ProjectHelper helper;

	/**
	 * <p>Discription:[构造器方法描述]</p>
	 * @coustructor 方法.
	 */
	public FlashBack() {
		buildFile = new File("build.xml");
		project = new Project();
		DefaultLogger consoleLogger = new DefaultLogger();
		consoleLogger.setErrorPrintStream(System.err);
		consoleLogger.setOutputPrintStream(System.out);
		consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
		project.addBuildListener(consoleLogger);
		project.fireBuildStarted();
		project.init();
		helper = ProjectHelper.getProjectHelper();
	}
	
	/**
	 * <p>Discription:[闪回数据库]</p>
	 * @param time
	 * @return
	 * @author:[xxxx]
	 * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	public boolean flashBack(String time) {
	    //验证时间格式
	    Pattern p = Pattern.compile("\\d{4}-\\d{2}-\\d{2}:\\d{2}:\\d{2}:\\d{2}");  
	    Matcher m = p.matcher(time);  
	    boolean tag = false;
	    if(m.matches())
	    {
	    	try {
				project.setProperty("time", time);
				helper.parse(project, buildFile);
				project.executeTarget(project.getDefaultTarget());
				project.fireBuildFinished(null);
				tag = true;
			} catch (BuildException e) {
				project.fireBuildFinished(e);
				e.printStackTrace();
			}
	    }
		return tag;
	}
}

 

(2)新建Ant文件,内容如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<project name="flashBack" default="startVM" basedir="." xmlns:ora="antlib:net.sf.incanto">
	<!-- 虚拟机镜像文件目录-->
	<property name="vmware.dir" value=" E:\\UbuntuVM\\Ubuntu.vmx">
	</property>
	<!-- 虚拟机快照名称,名称之间不允许包含空格-->
	<property name="snapshot" value="Snapshot3">
	</property>
	<!-- 方式1:通过执行SQL语句还原数据库 -->
	<target name="runSql">
		<ora:sqlplus logon="/NOLOG" silent="true" failonerror="true">
			<![CDATA[
        	--首先以DBA身份连接数据库;
        	conn system/tiger as sysdba;
        	--关闭数据库;
        	shutdown immediate;
        	--进入MOUNT状态;
        	startup mount;
        	--开始闪回数据;
        	flashback database to timestamp  to_date('${time}','yyyy-mm-dd:hh24:mi:ss'); 
        	--打开数据库;
        	alter database open resetlogs;
        	--退出;
        	exit;  
            ]]>
		</ora:sqlplus>
	</target>
	<!-- 方式2:通过调用虚拟机的Vmrun命令,还原虚拟机快照-->
	<target name="revertSnap">
		<exec executable="cmd.exe">
			<arg line="/c vmrun -t ws revertToSnapshot ${vmware.dir} ${snapshot}" />
		</exec>
	</target>
	<target name="startVM" depends="revertSnap">
		<exec executable="cmd.exe">
			<arg line="/c vmrun -t ws start ${vmware.dir}" />
		</exec>
	</target>
</project>

参考资料:

 

以编程方式调用 Apache Ant

 

http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0502_gawor/0502_gawor.html

 

2.批处理方式(描述:使用批处理文件调用SQL文件)

(1)新建FlashBack.bat文件,内容如下:

@echo off 
sqlplus /nolog @runSql.sql

(2)新建runSql.sql文件,内容如下:

--首先以DBA身份连接数据库;
conn system/tiger as sysdba;
--关闭数据库;
shutdown immediate;
--进入MOUNT状态;
startup mount;
--开始闪回数据;
flashback database to timestamp  to_date('2011-08-09:16:53:01','yyyy-mm-dd:hh24:mi:ss'); 
--打开数据库;
alter database open resetlogs;
--退出;
exit;  

你可能感兴趣的:(测试)