一、测试环境
数据库: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: xxxx@xxxxxx.com">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" failοnerrοr="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;