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

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

Jun 07, 2016 pm 03:38 PM
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;
 }


}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        

   

  

        

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

oracle数据库日志会保存多久 oracle数据库日志会保存多久 May 10, 2024 am 03:27 AM

Oracle 数据库日志的保留期限取决于日志类型和配置,包括:重做日志:由 "LOG_ARCHIVE_DEST" 参数配置的最大大小决定。归档重做日志:由 "DB_RECOVERY_FILE_DEST_SIZE" 参数配置的最大大小决定。在线重做日志:不归档,在数据库重启时丢失,保留期限与实例运行时间一致。审计日志:由 "AUDIT_TRAIL" 参数配置,默认保留 30 天。

oracle数据库启动步骤顺序为 oracle数据库启动步骤顺序为 May 10, 2024 am 01:48 AM

Oracle 数据库启动顺序为:1. 检查前置条件;2. 启动监听器;3. 启动数据库实例;4. 等待数据库打开;5. 连接到数据库;6. 验证数据库状态;7. 启用服务(如果需要);8. 测试连接。

oracle数据库服务器硬件配置要求 oracle数据库服务器硬件配置要求 May 10, 2024 am 04:00 AM

Oracle 数据库服务器硬件配置要求:处理器:多核,主频至少 2.5 GHz,大型数据库建议 32 核以上。内存:小型数据库至少 8GB,中等规模 16-64GB,大型数据库或高负载工作负载高达 512GB 或更多。存储:SSD 或 NVMe 磁盘,RAID 阵列提高冗余和性能。网络:高速网络(10GbE 或更高),专用网卡,低延迟网络。其他:稳定电源、冗余组件、兼容操作系统和软件、散热和冷却系统。

oracle需要多少内存 oracle需要多少内存 May 10, 2024 am 04:12 AM

Oracle 所需内存量取决于数据库大小、活动水平和所需性能水平:用于存储数据缓冲区、索引缓冲区、执行 SQL 语句和管理数据字典缓存。具体数量受数据库大小、活动水平和所需性能水平影响。最佳实践包括设置适当的 SGA 大小、调整 SGA 组件大小、使用 AMM 和监控内存使用情况。

oracle定时任务每天都执行一次创建步骤 oracle定时任务每天都执行一次创建步骤 May 10, 2024 am 03:03 AM

要在 Oracle 中创建每天执行一次的定时任务,需要执行以下三个步骤:创建一个作业。为作业添加一个子作业,并设置其计划表达式为“INTERVAL 1 DAY”。启用作业。

用oracle数据库需要多大内存 用oracle数据库需要多大内存 May 10, 2024 am 03:42 AM

Oracle 数据库所需内存量取决于数据库大小、工作负载类型和并发用户数量。通常建议:小型数据库:16-32 GB,中型数据库:32-64 GB,大型数据库:64 GB 或更多。其他需考虑因素包括数据库版本、内存优化选项、虚拟化和最佳实践(监视内存使用情况、调整分配)。

oracle怎么读取dbf文件 oracle怎么读取dbf文件 May 10, 2024 am 01:27 AM

Oracle 可以通过以下步骤读取 dbf 文件:创建外部表,引用 dbf 文件;查询外部表,检索数据;将数据导入 Oracle 表。

oracle数据库需要多大内存 oracle数据库需要多大内存 May 10, 2024 am 02:09 AM

Oracle 数据库的内存需求取决于以下因素:数据库大小、活动用户数量、并发查询、启用的功能和系统硬件配置。确定内存要求的步骤包括:确定数据库大小、估计活动用户数量、了解并发查询、考虑启用的功能和检查系统硬件配置。

See all articles