根据上传到suse9服务器的Oracle脚本创建Oracle数据库及执行用户脚本

         需求:

      用户通过平台上传Oracle脚本(创建表、视图等但不包括直接创建表空间的脚本)到suse服务器,程序需要在Oracle数据库服务器上创建一个对应的表空间,并在该表空内根据用户的脚本来生成表、视图等。

        解决办法:

        思想通过匹配sql模板文件,来每次创建唯一的数据库表空间,然后通过linux的shell脚本来连接到数据库服务器执行用户的脚本文件,最终由java程序来执行该shell脚本文件,并根据shell产生的日志判断是否执行成功,如不成功则调用删除的方法进行删除表空间的操作。

       1,编写创建Oracle表空间的SQl模板文件(createdbspace.sql)

        createdbspace.sql内容如下:

--%1--dba用户名(配置文件)
--%2--dba密码(配置文件)
--%3--实例名(配置文件)
--%4--表空间名称(传参)
--%5--表空间目录(配置文件)
--%6--初始空间大小(配置文件)
--%7--空间增长大小(配置文件)
--%8--最大空间大小(传参)
--%9--创建用户名(传参)
--%10--创建用户密码(传参)
--%a--临时表空间(配置文件)


create tablespace 4% datafile '5%/4%.dbf' size 6% M REUSE AUTOEXTEND ON NEXT 7% M MAXSIZE 8% M DEFAULT STORAGE ( INITIAL 64K NEXT 4M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 )
;

create user 9% identified by 10% default tablespace 4% temporary tablespace a% profile default
;

grant connect,resource to 9%
;

revoke unlimited tablespace from 9%
;

alter user 9% quota unlimited on 4%
;
commit
;
exit;

 

      

       2,编写相应安装所需执行的shell脚本(install.sh)

          install.sh内容如下:

#!/bin/sh

#实例名
sid=1%

#新创建的数据库用户名
system=2%

#新创建的数据库密码
systemPass=3%

#log日志目录
logpath=4%

#log日志名
logfile=5%

#执行的sql名称
sqlfile=7%

#创建表空间的脚本目录
sqlspacepath=8%

#执行表空间的sql名称
sqlspacefile=9%


#dba数据库用户名
dbasystem=b%

#dba数据库密码
dbasystemPass=c%

#创建日志目录
mkdir $logpath   2>/dev/null

echo start install dbspace script ... >$logfile

#在数据库脚本末尾追加exit,保证脚本执行完成后退出
echo 'exit;' >>$sqlfile

#oracle环境变量
. /home/oracle/.bash_profile 2>>$logfile

#创建表空间和用户脚本
sqlplus $dbasystem/$dbasystemPass@$sid @$sqlspacepath/$sqlspacefile   >>$logfile
echo start install db script  >>$logfile

#执行数据库脚本
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
sqlplus $system/$systemPass@$sid @$sqlfile      >>$logfile
export NLS_LANG=AMERICAN_AMERICA.utf8

echo end install db script. >>$logfile

 

     

       3, 有安装就可以删除所以还要编写一个删除表空间的sql脚本(dropspace.sql)

         dropspace.sql内容如下:

 

drop user 1% cascade;
drop tablespace 2% including contents and datafiles cascade constraints  ;
commit;
exit;

 

        4,编写相应的执行删除任务的shell脚本(unistall.sh)

           unistall.sh内容如下:

#!/bin/sh

#实例名
sid=1%

#log日志目录
logpath=4%

#log日志名
logfile=5%

#删除表空间的脚本目录
sqlspacepath=8%

#删除表空间的sql名称
sqlspacefile=9%

#dba数据库用户名
dbasystem=b%

#dba数据库密码
dbasystemPass=c%

#创建日志目录
mkdir $logpath   2>/dev/null

echo start delete dbspace script ... >$logfile

#oracle环境变量
. /home/oracle/.bash_profile 2>>$logfile

#创建表空间和用户脚本
sqlplus $dbasystem/$dbasystemPass@$sid @$sqlspacepath/$sqlspacefile               >>$logfile

echo end delete db script . >>$logfile

 

 

       5,相应的java源程序(其中像上传、下载、继承的类等代码段是内部封装的看不出所以然但本身对此程序需要实现的功能并无大碍)

         SqlInstall .java源文件内容:

 public class SqlInstall extends DynamicObjectBaseDS implements ISqlInstall{
 IUcmServerDS ucmServerDS =null;
 IUcmContentBufDS ucmContentBufDS=null;
 IUcmContentDS ucmContentDS=null;
 
 //获取ftp配置信息
 static String ftpip =ApplicationGlobalResource.getInstance().getValueByKey(
 "paasfile.ftpip");
 static String ftpport =ApplicationGlobalResource.getInstance().getValueByKey(
 "paasfile.ftpport");
 //FTP端口
 static int port = Integer.parseInt(ftpport);
 //FTP用户名
 static String ftpusername = ApplicationGlobalResource.getInstance()
 .getValueByKey("paasfile.ftpusername");
 //FTP密码
 static String ftppassword = ApplicationGlobalResource.getInstance()
 .getValueByKey("paasfile.ftppassword");
 
 //sh脚本上传的文件夹
 static String shfilepath = ApplicationGlobalResource.getInstance()
 .getValueByKey("dbspace.shfilepath");
 
 //sh脚本上传的文件夹
 static String spaceshfilepath = ApplicationGlobalResource.getInstance()
 .getValueByKey("dbspace.scriptoutPath");
 
 //dba用户名(配置文件)
 static String dbaname= ApplicationGlobalResource.getInstance()
 .getValueByKey("dbspace.dbaname");
 //dba密码(配置文件)
 static String dbapwd=ApplicationGlobalResource.getInstance()
 .getValueByKey("dbspace.dbapwd");
 //服务名(配置文件)
 static String dbasid=ApplicationGlobalResource.getInstance()
 .getValueByKey("dbspace.dbasid");
 //数据库IP(配置文件)
 static String dbIP=ApplicationGlobalResource.getInstance()
 .getValueByKey("dbspace.dbIP");
 //数据库端口(配置文件)
 static String dbport=ApplicationGlobalResource.getInstance()
 .getValueByKey("dbspace.dbport");
 //数据库类型(配置文件)
 static String dbtype=ApplicationGlobalResource.getInstance()
 .getValueByKey("dbspace.dbtype");
 //数据库版本(配置文件)
 static String dbversion=ApplicationGlobalResource.getInstance()
 .getValueByKey("dbspace.dbversion");
 //数据库实例名(配置文件)
 static String dbainstanceid=ApplicationGlobalResource.getInstance()
 .getValueByKey("dbspace.dbainstanceid");
 
 
 /**
  * 获得参数生成创建表空间的SQL脚本,并上传至服务器
  * @param spacename  表空间名称
  * @param spacesize  表空间大小
  * @param createuser 新创建的用户
  * @param createpwd  新创建的密码
  * @return 创建的文件名
  */
 public String createdbSpaceSql(String spacename,String spacesize,String createuser,String createpwd){

  //表空间存放目录(配置文件)
  String spaceposition=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.spaceposition");
  //初始空间大小(配置文件)
  String spaceinitsize=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.spaceinitsize");
  //空间增长大小(配置文件)
  String spacestepsize=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.spacestepsize");
  //临时表空间(配置文件)
  String tempspace=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.tempspace"); 
  
  //创建表空间的脚本上传目录
  String sqlspacepath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.shfilepath");
  
  
  //创建表空间模板文件本地读取路径
  String sqlspaceinPath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.sqlspaceinPath");  
  //创建表空间文件输出本地路径
  String sqlspaceoutPath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.scriptoutPath");
    
  // 解读模板文件,并生成sql脚本文件
  SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss");
  String date = sdf2.format(new Date());
  String number=String.valueOf((int)(Math.random()*1000));
  String filefullname="create"+date+number;
  
  File file = new File(sqlspaceinPath);//表空间模板文件
  File shfile = new File(sqlspaceoutPath + "/"+filefullname + ".sql");  // 创建文件流按照模板匹配后的创建表空间文件路径
  
  PrintStream ps = null;
  InputStreamReader isr = null;
  BufferedReader br = null;
  
  try {
   ps = new PrintStream(shfile,"UTF-8");
   isr = new InputStreamReader(new FileInputStream(file),"UTF-8");
   br = new BufferedReader(isr);
   String st = br.readLine();
   while (st != null) {
    //脚本变量替换
    st = st.replaceAll("1%",dbaname);
    st = st.replaceAll("2%",dbapwd);
    st = st.replaceAll("3%",dbasid);
    st = st.replaceAll("4%",spacename);
    st = st.replaceAll("5%",spaceposition);
    st = st.replaceAll("6%",spaceinitsize);
    st = st.replaceAll("7%",spacestepsize);
    st = st.replaceAll("8%",spacesize);
    st = st.replaceAll("9%",createuser);
    st = st.replaceAll("10%",createpwd);
    st = st.replaceAll("a%",tempspace);
    ps.println(st);
    st = br.readLine();
   }
  } catch (Exception e) {
   e.printStackTrace();
   return "";
  } finally {
   //关闭
   try {
    if (br != null) {
     br.close();
    }
    if (isr != null) {
     isr.close();
    }
    if (ps != null) {
     ps.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  //获得生成的sql的文件名
  String filename=shfile.getName();
  

  //返回文件名
  return filename;
 }
 
 
 
 
 /**
  * 根据参数创建可执行的sh脚本,并且上传
  * @param sid 实例名
  * @param username 数据库用户名
  * @param password 数据库密码
  * @param sqlfile 执行的数据库脚本文件名
  * @param sqlspacefile 执行数据库创建表空间的文件名
  * @param logfile LOG文件名,由系统生成
  * @return
  */
 public   String createInstallSh(String createuser,String createpwd,String sqlfile,String sqlspacefile,String logfile){
  //log日志目录
  String logpath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.logpath");
  
  //创建表空间的sh脚本目录
  String sqlspacepath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.shfilepath");
  //sh模板文件读取路径
  String shinPath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.shspaceinPath");
  //sh文件输出路径
  String shoutPath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.scriptoutPath");
  
  // 解读模板文件,并生成sh脚本文件
  SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss");
  String date = sdf2.format(new Date());
  String number=String.valueOf((int)(Math.random()*1000));
  String filefullname="install"+date+number;
  File file = new File(shinPath);
  // 创建文件流
  File shfile = new File(shoutPath + filefullname + ".sh");
  PrintStream ps = null;
  InputStreamReader isr = null;
  BufferedReader br = null;
  try {
   ps = new PrintStream(shfile,"UTF-8");
   isr = new InputStreamReader(new FileInputStream(file),"UTF-8");
   br = new BufferedReader(isr);
   String st = br.readLine();
   while (st != null) {
    //脚本变量替换    
    st = st.replaceAll("1%",dbasid);
    st = st.replaceAll("2%",createuser);
    st = st.replaceAll("3%",createpwd);
    st = st.replaceAll("4%",logpath);
    st = st.replaceAll("5%",logpath+"/"+logfile);   
    st = st.replaceAll("7%",sqlfile);
    st = st.replaceAll("8%",sqlspacepath);
    st = st.replaceAll("9%",sqlspacefile);    
    st = st.replaceAll("b%",dbaname);
    st = st.replaceAll("c%",dbapwd);
    ps.println(st);
    st = br.readLine();
   }
  } catch (Exception e) {
   e.printStackTrace();
   return "";
  } finally {
   //关闭
   try {
    if (br != null) {
     br.close();
    }
    if (isr != null) {
     isr.close();
    }
    if (ps != null) {
     ps.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  
  //获得生成的sh文件的文件名
  String filename=shfile.getName();
  
  System.out.println("赋权前文件大小:"+new File(filename).length());
  //给文件赋权 
  this.chmodrun(filename);
  System.out.println("赋权后文件大小:"+new File(filename).length());

  //返回文件名
  return filename;
 };


 public String createCheckLogSh(String logfile){

  //sh模板文件读取路径
  String shinPath=ApplicationGlobalResource.getInstance().getValueByKey("dbspace.checklogsh");
  //sh文件输出路径
  String shoutPath=shfilepath;
  
  // 解读模板文件,并生成sh脚本文件
  SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss");
  String date = sdf2.format(new Date());
  String number=String.valueOf((int)(Math.random()*1000));
  String filefullname="checkLog"+date+number;
  
  File file = new File(shinPath);
  File shfile = new File(shoutPath + filefullname + ".sh");
  PrintStream ps = null;
  InputStreamReader isr = null;
  BufferedReader br = null;
  try {
   ps = new PrintStream(shfile,"UTF-8");
   isr = new InputStreamReader(new FileInputStream(file),"UTF-8");
   br = new BufferedReader(isr);
   String st = br.readLine();
   while (st != null) {
    //脚本变量替换    
    st = st.replaceAll("1%",logfile);
    ps.println(st);
    st = br.readLine();
   }
  } catch (Exception e) {
   e.printStackTrace();
   return "";
  } finally {
   //关闭
   try {
    if (br != null) {
     br.close();
    }
    if (isr != null) {
     isr.close();
    }
    if (ps != null) {
     ps.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  
  //获得生成的sh文件的文件名
  String filename=shfile.getName();
  
  System.out.println("赋权前文件大小:"+new File(filename).length());
  //给文件赋权 
  this.chmodrun(filename);
  System.out.println("赋权后文件大小:"+new File(filename).length());

  //返回文件名
  return filename;
  
 }
 
 /**
  * 获得参数生成删除表空间的SQL脚本,并上传至服务器
  * @param spacename  表空间名称
  * @param createuser 新创建的用户
  * @return 创建的文件名
  */
 public String dropdbSpaceSql(String spacename,String createuser){
 
  //删除表空间的脚本上传目录
  String sqlspacepath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.shfilepath");
  
  //删除表空间模板文件读取路径
  String sqlspaceinPath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.dropspacesql");
  //创建表空间文件输出路径
  String sqlspaceoutPath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.scriptoutPath");
    
  // 解读模板文件,并生成sh脚本文件
  SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss");
  String date = sdf2.format(new Date());
  String number=String.valueOf((int)(Math.random()*1000));
  String filefullname="drop"+date+number;
  File file = new File(sqlspaceinPath);
  // 创建文件流
  File shfile = new File(sqlspaceoutPath + "/"+filefullname + ".sql");
  PrintStream ps = null;
  InputStreamReader isr = null;
  BufferedReader br = null;
  try {
   ps = new PrintStream(shfile,"UTF-8");
   isr = new InputStreamReader(new FileInputStream(file),"UTF-8");
   br = new BufferedReader(isr);
   String st = br.readLine();
   while (st != null) {
    //脚本变量替换
    st = st.replaceAll("1%",createuser);
    st = st.replaceAll("2%",spacename);
    ps.println(st);
    st = br.readLine();
   }
  } catch (Exception e) {
   e.printStackTrace();
   return "";
  } finally {
   //关闭
   try {
    if (br != null) {
     br.close();
    }
    if (isr != null) {
     isr.close();
    }
    if (ps != null) {
     ps.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  //获得生成的sh文件的文件名
  String filename=shfile.getName();  

  //返回文件名
  return filename;
 }
 
 
 
 
 /**
  * 根据参数创建删除表空间的sh脚本,并且上传
  * @param sid 实例名
  * @param username 数据库用户名
  * @param password 数据库密码
  * @param sqlfile 执行的数据库脚本文件名
  * @param sqlspacefile 执行删除数据库创建表空间的文件名
  * @return
  */
 public   String dropInstallSh(String sqlspacefile,String logfile){
  //log日志目录
  String logpath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.logpath");
  //删除表空间的脚本目录
  String sqlspacepath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.shfilepath");
  //sh模板文件读取路径
  String shinPath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.dropspacesh");
  //sh文件输出路径
  String shoutPath=ApplicationGlobalResource.getInstance()
  .getValueByKey("dbspace.scriptoutPath");
  
  // 解读模板文件,并生成sh脚本文件
  SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss");
  String date = sdf2.format(new Date());
  String number=String.valueOf((int)(Math.random()*1000));
  String filefullname="uninstall"+date+number;
  File file = new File(shinPath);
  // 创建文件流
  File shfile = new File(shoutPath + filefullname + ".sh");
  PrintStream ps = null;
  InputStreamReader isr = null;
  BufferedReader br = null;
  try {
   ps = new PrintStream(shfile,"UTF-8");
   isr = new InputStreamReader(new FileInputStream(file),"UTF-8");
   br = new BufferedReader(isr);
   String st = br.readLine();
   while (st != null) {
    //脚本变量替换    
    st = st.replaceAll("1%",dbasid);
    st = st.replaceAll("4%",logpath);
    st = st.replaceAll("5%",logpath+"/"+logfile);
    st = st.replaceAll("8%",sqlspacepath);
    st = st.replaceAll("9%",sqlspacefile);    
    st = st.replaceAll("b%",dbaname);
    st = st.replaceAll("c%",dbapwd);
    ps.println(st);
    st = br.readLine();
   }
  } catch (Exception e) {
   e.printStackTrace();
   return "";
  } finally {
   //关闭
   try {
    if (br != null) {
     br.close();
    }
    if (isr != null) {
     isr.close();
    }
    if (ps != null) {
     ps.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  
  //获得生成的sh文件的文件名
  String filename=shfile.getName();
  //给文件赋权
  this.chmodrun(filename);

  //返回文件名
  return filename;
};

 
 
 
 
    /**
  * 上传到ftp
  * @param url
  * @param port
  * @param username
  * @param password
  * @param path
  * @param filename
  * @param input
  * @return
  * @throws Exception
  */
 public  boolean upload(String url, int port, String username,
   String password, String path, String filename, InputStream input)
   throws Exception {
  boolean success = false;
  FTPClient ftp = new FTPClient();
  try {
   int reply;
   ftp.connect(url, port);// 连接FTP服务器
   // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
   ftp.login(username, password);// 登录
   reply = ftp.getReplyCode();
   if (!FTPReply.isPositiveCompletion(reply)) {
    ftp.disconnect();
    // throw new Exception("----------->>>连接ftp服务器失败");
   }
   ftp.changeWorkingDirectory(path);
   
   ftp.storeFile(filename, input); //上传文件

   input.close();
   ftp.logout();
   success = true;
  } catch (Exception e) {
   e.printStackTrace(); 
  } finally {
   if (ftp.isConnected()) {
    try {
     ftp.disconnect();
    } catch (IOException ioe) {
    }
   }
  }
  return success;
 }
 
 
   /**
    * 执行unix shell脚本
    * @param infile String shell脚本名(包含路径)
    * @return int shell脚本的执行结果
    */
   public boolean run(String infile) {   

  //如果配置文件不为true的时候为不需要创建或者删除表空间
    String dbspaceisuse=ApplicationGlobalResource.getInstance().getValueByKey(
  "dbspace.dbspaceisuse");
  if(!dbspaceisuse.equals("true")){
   return true;
  }
   
  
    infile=shfilepath+infile;
    System.out.println("文件全路径:"+infile);
     int retCode = 0;
     try {
       Runtime rtime = Runtime.getRuntime();
       Process child = rtime.exec("sh " +infile);

       retCode=child.waitFor();
       System.out.println("end exec. ret="+retCode);
     }
     catch (Exception e) {
       System.out.println("exec failed");
       e.printStackTrace();
       return false;
     }
     return true;
   }
  
  
  
   /**
    * 执行unix 赋权脚本
    * @param infile String shell脚本名(包含路径)
    * @return int shell脚本的执行结果
    */
   public int chmodrun(String infile) {   

  //如果配置文件不为true的时候为不需要创建或者删除表空间
    String dbspaceisuse=ApplicationGlobalResource.getInstance().getValueByKey(
  "dbspace.dbspaceisuse");
  if(!dbspaceisuse.equals("true")){
   return 1;
  }
   
    infile=spaceshfilepath+infile;
    System.out.println("要修改权限的文件全路径:"+infile);
     int retCode = 0;
     try {
       Runtime rtime = Runtime.getRuntime();
       Process child = rtime.exec("chmod 777 " +infile);

       retCode=child.waitFor();
       System.out.println("chmod 777="+retCode);
     }
     catch (Exception e) {
       System.out.println("chmod 777 failed");
       e.printStackTrace();
     }
     return retCode;
   }
  
   /**
    * 根据日志判断数据库脚本是否执行成功(执行前先创建SHELL脚本,注意UTF-8格式)
    * @param logfile String 日志路径,shfile执行查询sh脚本 0--创建成功,1--创建失败
    */
 
   public  int sqlrun(String logfile, String shfile) { 
    int i=0;
   //如果配置文件不为true的时候为不需要创建或者删除表空间
     String dbspaceisuse=ApplicationGlobalResource.getInstance().getValueByKey("dbspace.dbspaceisuse");
   if(!dbspaceisuse.equals("true")){
    return i;
   }
            String shFilePath=this.shfilepath+shfile;
      try {
       Process p = null;
       InputStream fis = null;
       InputStreamReader isr = null;
       BufferedReader br = null;
       String cmd="sh "+shFilePath;
       System.out.println("cmd:"+cmd);
       p = Runtime.getRuntime().exec(cmd);
       fis = p.getInputStream();
       isr = new InputStreamReader(fis);
       br = new BufferedReader(isr);

       String line = "";      
       while ( (line = br.readLine()) != null)
       {
        System.out.println("line的值"+line);
         if(line.equals("0"))
         {
        System.out.println("删除任务开始");
           Runtime.getRuntime().exec("rm -f "+logfile);
           System.out.println("删除任务结束");         
         } else{
          i=1;
         }      
       }
      }               
      catch (Exception e) {
        System.out.println("exec failed");
        e.printStackTrace(); 
        i=1;
      } 
      return i;
    }  

   
  

   /**
    * 统一对外调用创建接口
    * @param appid
    * @param spacesize 空间大小
    * @param sqlfile 执行的SQL脚本路径
    * @return
    */
  public boolean createdbSpace(String appindex,String appid,String spacesize,String sqlfile ){
   //自增长序列
   Long serverindex = (Long) super.getPrimaryKeyGenerator().getPrimarykey("ucm_server");
   //空间名称
   String spacename="zxin_dbfile_"+serverindex;
   //创建的用户名
   String createuser="zxdbm_app_"+serverindex;
   //创建的密码
   String createpwd="zxin_app_"+String.valueOf((int)(Math.random()*1000)); 
   //生成的执行文件日志
   String logfile="zxin_createdblog_"+serverindex;
   //存放到数据库中的数据库脚本执行日志
   String logfilepath=ApplicationGlobalResource.getInstance().getValueByKey("dbspace.logpath")+logfile;

  String sqlspacefile=this.createdbSpaceSql(spacename, spacesize, createuser, createpwd);//创建表空间需要的sql文件
  System.out.println("创建表空间脚本文件名:"+sqlspacefile);
  if(sqlspacefile.length() ==0){
   return false;
  }
  //此处要判断执行是否成功    sqlfile为用户上传上来的数据库脚本文件
  String infile=this.createInstallSh(createuser, createpwd, sqlfile, sqlspacefile,logfile);//创建执行表空间创建、数据库脚本执行的sh文件
     System.out.println("sh脚本文件名:"+infile);
  if(infile.length() ==0){
   return false;
  }
   
  //执行sh脚本创建表空间和SQL脚本
  boolean boo=this.run(infile); 
  if (boo==false){
   return false;
  }
  
  //创建有关日志的shell脚本,
  String shfile="";
  shfile=this.createCheckLogSh(logfilepath);
  
  //判断脚本是否执行成功
  int c=this.sqlrun(logfile, shfile);  
  
     try{
      //在数据库ucm_server表中增加记录
      UcmServer us=new UcmServer();
      us.setInipaddress(appid);
      us.setServername(spacename);
      us.setServicekey(spacesize);
      us.setFtpaccount(createuser);
      us.setFtppassword(createpwd);
      us.setSrvtypeshortname(dbainstanceid);     
      us.setOutipaddress(dbIP);
      us.setFtpport(dbport);
      us.setFtppath(dbversion);
      us.setDescription(dbtype);     
      ucmServerDS.insertUcmServer(us);
     
      //当创建失败的时候,记录到应用日志中
      if(c==1){
    //更新应用表中的数据库脚本日志路径
       UcmContentBuf ucb=new UcmContentBuf();
       ucb.setContentindex((Long.valueOf(appindex)));
       ucb.setAppsysurl(logfilepath);
       ucmContentBufDS.updateUcmContentBuf(ucb);
       return false;
      }

     
      return true;
     }catch(Exception ex){
      ex.printStackTrace();
      return false;
     }    
  
   }
  
 
 /**
  * 统一对外调用的删除DBSPACE接口
  * @param appid
  * @param state 0--申请同步前,数据在BUF表中 1--当数据在应用表中
  * @return
  */
   public boolean dropdbSpace(String appindex, String appid,int state){

    try{
    System.out.println("appindex:"+appindex);
    System.out.println("appid:"+appid);
         //根据appid找到空间名,所对应的用户名
        UcmServer us=new UcmServer();
        us.setInipaddress(appid);    
      
        List<UcmServer> uslist=ucmServerDS.getUcmServerByCond(us);    
        String spacename=uslist.get(0).getServername();
        String createuser=uslist.get(0).getFtpaccount();
        Long serverindex=uslist.get(0).getServerindex();
       
        us.setServerindex(serverindex);
       
       //生成的执行文件日志
        String logfile="zxin_dropdblog_"+serverindex;      
       //存放到数据库中的数据库脚本执行日志
     String logfilepath=ApplicationGlobalResource.getInstance().getValueByKey("dbspace.logpath")+"/"+logfile;
     
    
     String spacefile=this.dropdbSpaceSql(spacename, createuser);
     System.out.println("删除表空间脚本文件名:"+spacefile);
     if(spacefile.length() ==0){
      return false;
     }
     
     String infile=this.dropInstallSh(spacefile,logfile);
        System.out.println("执行删除sh脚本文件名:"+infile);
     if(infile.length() ==0){
      return false;
     }
     
     this.run(infile);

     //删除数据库信息
     ucmServerDS.removeUcmServer(us);
     
       if(state==1){        
          //更新应用表中的数据库脚本日志路径
          UcmContent uc=new UcmContent();
          uc.setContentindex((Long.valueOf(appindex)));
         uc.setAppsysurl(logfilepath); 
         ucmContentDS.updateUcmContent(uc);
       }else{
    //更新BUFFER应用表中的数据库脚本日志路径
       UcmContentBuf ucb=new UcmContentBuf();
       ucb.setContentindex((Long.valueOf(appindex)));
       ucb.setAppsysurl(logfilepath);
       ucmContentBufDS.updateUcmContentBuf(ucb);
       }
       return true; 
    }catch(Exception e){
     e.printStackTrace();
     return false;
    }
 
   }


 public void setUcmServerDS(IUcmServerDS ucmServerDS) {
  this.ucmServerDS = ucmServerDS;
 }

 


 public void setUcmContentBufDS(IUcmContentBufDS ucmContentBufDS) {
  this.ucmContentBufDS = ucmContentBufDS;
 }

 


 public void setUcmContentDS(IUcmContentDS ucmContentDS) {
  this.ucmContentDS = ucmContentDS;
 }


}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        

   

  

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值