* @Description:数据库备份
* @return ModelAndView
* @Author:yty
*/
@PostMapping(value = "/databaseSave")
public Object databaseSave(HttpServletRequest request,HttpSession session) {
Process process = null;
try{
ResourceBundle bundle = ResourceBundle.getBundle("sysConfig");
// 配置文件,文件存放地址
String path = bundle.getString("database.path");
File saveFile = new File(path);
if (!saveFile.exists()) {// 如果目录不存在
saveFile.mkdirs();// 创建文件夹
}
//保存此条数据
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss");//设置日期格式
String date = df.format(new Date());
Map<String, Object> map = new HashMap<String, Object>();
map.put("table", "t_sys_database");
Map<String, Object> params = new HashMap<String, Object>();
params.put("dataname", "kfqjy_"+date);
SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
params.put("createtime_date", df1.format(new Date()));
map.put("params", params);
sysService.save(map);
//备份sql
String sql = "exp kfqjy/kfqjy@orcl file="+path+"/kfqjy_"+date+".dmp";
//启动 执行程序
process = Runtime.getRuntime().exec(sql);
try{
//此处让线程延时3秒,让数据库成功备份之后,摧毁process
Thread.sleep(3000);
process.destroy();
}catch (InterruptedException e){
e.printStackTrace();
}
}catch(Exception e){
e.printStackTrace();
return ResultUtils.error(1, "备份失败!请重试!");
}
return ResultUtils.success("备份成功!", "");
}
/**
* @Description:数据库还原
* @return ModelAndView
* @Author:yty
*/
@PostMapping(value = "/databaseReset")
public Object databaseReset(HttpServletRequest request,HttpSession session) {
Process process = null;
try{
ResourceBundle bundle = ResourceBundle.getBundle("sysConfig");
// 配置文件,文件存放地址
String path = bundle.getString("database.path");
String fileName = request.getParameter("fileName");
String newpath = path+"/"+fileName+".dmp";
Map<String, Object> map = new HashMap<String,Object>();
//删除表
String sql = " declare vsql varchar2(200); " +
" cursor c1 is " +
" select 'drop table '||table_name||' cascade constraints' v_name " +
" from user_tables;" +
" BEGIN " +
" for i in c1 loop" +
" vsql:=i.v_name;" +
" execute immediate vsql;" +
" end loop;" +
" end;";
map.put("sql", sql);
sysService.getMapBySql(map);
//删除视图
/*sql = "declare cursor cur is select 'drop view ' || view_name as a from user_views; " +
" begin" +
" for i in cur loop" +
" execute immediate i.a;" +
" end loop;" +
" end;";
map.put("sql", sql);
sysService.getMapBySql(map);*/
//还原sql
String resetsql = "imp kfqjy/kfqjy@127.0.0.1:1521/orcl file="+newpath+" full=y ignore=y";
//启动 执行程序
process = Runtime.getRuntime().exec(resetsql);
try{
Thread.sleep(3000);
process.destroy();
}catch (InterruptedException e){
e.printStackTrace();
}
//this.expSql(map);
}catch(Exception e){
e.printStackTrace();
return ResultUtils.error(1, "还原失败!请重试!");
}
return ResultUtils.success("还原成功!", "");
}
/**
* 删除文件,可以是文件或文件夹
*
* @param fileName
* 要删除的文件名
*/
@PostMapping(value = "/deleteFile")
public void deleteFile(HttpServletRequest request) {
ResourceBundle bundle = ResourceBundle.getBundle("sysConfig");
// 配置文件,文件存放地址
String path = bundle.getString("database.path");
String fileName = request.getParameter("fileName");
String newpath = path+"/"+fileName+".dmp";
File file = new File(newpath);
if(file.exists()&&file.isFile()){
file.delete();
}
}