recherche
Maisonbase de donnéestutoriel mysql根据上传到suse9服务器的Oracle脚本创建Oracle数据库及执行用户

需求: 用户通过平台上传Oracle脚本(创建表、视图等但不包括直接创建表空间的脚本)到suse服务器,程序需要在Oracle数据库服务器上创建一个对应的表空间,并在该表空内根据用户的脚本来生成表、视图等。 解决办法: 思想 : 通过匹配sql模板文件,来每次创建

         需求:

      用户通过平台上传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 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;
 }


}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        

   

  

        

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Expliquez le pool de tampons InNODB et son importance pour la performance.Expliquez le pool de tampons InNODB et son importance pour la performance.Apr 19, 2025 am 12:24 AM

InnodBBufferPool réduit les E / S de disque en mettant en cache des données et des pages d'indexation, améliorant les performances de la base de données. Son principe de travail comprend: 1. La lecture des données: lire les données de BufferPool; 2. Écriture de données: Après avoir modifié les données, écrivez dans BufferPool et actualisez-les régulièrement sur le disque; 3. Gestion du cache: utilisez l'algorithme LRU pour gérer les pages de cache; 4. Mécanisme de lecture: Chargez à l'avance des pages de données adjacentes. En dimensionner le tampon et en utilisant plusieurs instances, les performances de la base de données peuvent être optimisées.

MySQL vs d'autres langages de programmation: une comparaisonMySQL vs d'autres langages de programmation: une comparaisonApr 19, 2025 am 12:22 AM

Par rapport à d'autres langages de programmation, MySQL est principalement utilisé pour stocker et gérer les données, tandis que d'autres langages tels que Python, Java et C sont utilisés pour le traitement logique et le développement d'applications. MySQL est connu pour ses performances élevées, son évolutivité et son support multiplateforme, adapté aux besoins de gestion des données, tandis que d'autres langues présentent des avantages dans leurs domaines respectifs tels que l'analyse des données, les applications d'entreprise et la programmation système.

Apprendre MySQL: un guide étape par étape pour les nouveaux utilisateursApprendre MySQL: un guide étape par étape pour les nouveaux utilisateursApr 19, 2025 am 12:19 AM

MySQL vaut la peine d'être appris car il s'agit d'un puissant système de gestion de la base de données open source adapté au stockage, à la gestion et à l'analyse des données. 1) MySQL est une base de données relationnelle qui utilise SQL pour faire fonctionner les données et convient à la gestion structurée des données. 2) Le langage SQL est la clé pour interagir avec MySQL et prend en charge les opérations CRUD. 3) Le principe de travail de MySQL inclut l'architecture client / serveur, le moteur de stockage et l'optimiseur de requête. 4) L'utilisation de base comprend la création de bases de données et de tables, et l'utilisation avancée implique de rejoindre des tables à l'aide de la jointure. 5) Les erreurs courantes incluent les erreurs de syntaxe et les problèmes d'autorisation, et les compétences de débogage incluent la vérification de la syntaxe et l'utilisation des commandes Explication. 6) L'optimisation des performances implique l'utilisation d'index, l'optimisation des instructions SQL et la maintenance régulière des bases de données.

MySQL: Compétences essentielles pour les débutants à maîtriserMySQL: Compétences essentielles pour les débutants à maîtriserApr 18, 2025 am 12:24 AM

MySQL convient aux débutants pour acquérir des compétences de base de données. 1. Installez les outils MySQL Server et Client. 2. Comprendre les requêtes SQL de base, telles que SELECT. 3. 掌握数据操作: : 创建表、插入、更新、删除数据。 4. 学习高级技巧: : 子查询和窗口函数。 5. 调试和优化: : 检查语法、使用索引、避免 Sélectionner * , 并使用 Limite。

MySQL: données structurées et bases de données relationnellesMySQL: données structurées et bases de données relationnellesApr 18, 2025 am 12:22 AM

MySQL gère efficacement les données structurées par la structure de la table et la requête SQL, et met en œuvre des relations inter-tableaux à travers des clés étrangères. 1. Définissez le format de données et tapez lors de la création d'une table. 2. Utilisez des clés étrangères pour établir des relations entre les tables. 3. Améliorer les performances par l'indexation et l'optimisation des requêtes. 4. Bases de données régulièrement sauvegarde et surveillent régulièrement la sécurité des données et l'optimisation des performances.

MySQL: fonctionnalités et capacités clés expliquésMySQL: fonctionnalités et capacités clés expliquésApr 18, 2025 am 12:17 AM

MySQL est un système de gestion de base de données relationnel open source qui est largement utilisé dans le développement Web. Ses caractéristiques clés incluent: 1. Prend en charge plusieurs moteurs de stockage, tels que InNODB et Myisam, adaptés à différents scénarios; 2. Fournit des fonctions de réplication à esclave maître pour faciliter l'équilibrage de la charge et la sauvegarde des données; 3. Améliorez l'efficacité de la requête grâce à l'optimisation des requêtes et à l'utilisation d'index.

Le but de SQL: interagir avec les bases de données MySQLLe but de SQL: interagir avec les bases de données MySQLApr 18, 2025 am 12:12 AM

SQL est utilisé pour interagir avec la base de données MySQL pour réaliser l'ajout de données, la suppression, la modification, l'inspection et la conception de la base de données. 1) SQL effectue des opérations de données via des instructions SELECT, INSERT, UPDATE, DELETE; 2) Utiliser des instructions Create, Alter, Drop pour la conception et la gestion de la base de données; 3) Les requêtes complexes et l'analyse des données sont mises en œuvre via SQL pour améliorer l'efficacité de la prise de décision commerciale.

MySQL pour les débutants: commencer la gestion de la base de donnéesMySQL pour les débutants: commencer la gestion de la base de donnéesApr 18, 2025 am 12:10 AM

Les opérations de base de MySQL incluent la création de bases de données, les tables et l'utilisation de SQL pour effectuer des opérations CRUD sur les données. 1. Créez une base de données: CreatedAtAbaseMy_First_DB; 2. Créez un tableau: CreateTableBooks (idIntauto_inCmentPrimaryKey, TitleVarchar (100) notnull, AuthorVarchar (100) notnull, publied_yearint); 3. Données d'insertion: INSERTINTOBOOKS (titre, auteur, publié_year) VA

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP