데이터 베이스 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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

오라클을 열 수 없다면해야 할 일 오라클을 열 수 없다면해야 할 일 Apr 11, 2025 pm 10:06 PM

Oracle에 대한 솔루션은 개설 할 수 없습니다. 1. 데이터베이스 서비스 시작; 2. 청취자를 시작하십시오. 3. 포트 충돌을 확인하십시오. 4. 환경 변수를 올바르게 설정하십시오. 5. 방화벽이나 바이러스 백신 소프트웨어가 연결을 차단하지 않도록하십시오. 6. 서버가 닫혀 있는지 확인하십시오. 7. RMAN을 사용하여 손상된 파일을 복구하십시오. 8. TNS 서비스 이름이 올바른지 확인하십시오. 9. 네트워크 연결 확인; 10. Oracle 소프트웨어를 다시 설치하십시오.

Oracle Cursor를 닫는 문제를 해결하는 방법 Oracle Cursor를 닫는 문제를 해결하는 방법 Apr 11, 2025 pm 10:18 PM

Oracle Cursor Closure 문제를 해결하는 방법에는 다음이 포함됩니다. Close 문을 사용하여 커서를 명시 적으로 닫습니다. For Update 절에서 커서를 선언하여 범위가 종료 된 후 자동으로 닫히십시오. 연관된 PL/SQL 변수가 닫히면 자동으로 닫히도록 사용 절에서 커서를 선언하십시오. 예외 처리를 사용하여 예외 상황에서 커서가 닫혀 있는지 확인하십시오. 연결 풀을 사용하여 커서를 자동으로 닫습니다. 자동 제출을 비활성화하고 커서 닫기를 지연시킵니다.

Oracle Loop에서 커서를 만드는 방법 Oracle Loop에서 커서를 만드는 방법 Apr 12, 2025 am 06:18 AM

Oracle에서 FOR 루프 루프는 커서를 동적으로 생성 할 수 있습니다. 단계는 다음과 같습니다. 1. 커서 유형을 정의합니다. 2. 루프를 만듭니다. 3. 커서를 동적으로 만듭니다. 4. 커서를 실행하십시오. 5. 커서를 닫습니다. 예 : 커서는 상위 10 명의 직원의 이름과 급여를 표시하기 위해주기별로 만들 수 있습니다.

Oracle View를 내보내는 방법 Oracle View를 내보내는 방법 Apr 12, 2025 am 06:15 AM

Oracle View는 Expitility : Oracle 데이터베이스에 로그인하여 내보낼 수 있습니다. 뷰 이름 및 내보내기 디렉토리를 지정하여 EXP 유틸리티를 시작하십시오. 대상 모드, 파일 형식 및 테이블 스페이스를 포함한 내보내기 매개 변수를 입력하십시오. 내보내기를 시작하십시오. IMPDP 유틸리티를 사용하여 내보내기를 확인하십시오.

Oracle 로그가 가득 차면해야 할 일 Oracle 로그가 가득 차면해야 할 일 Apr 12, 2025 am 06:09 AM

Oracle Log 파일이 가득 차면 다음 솔루션을 채택 할 수 있습니다. 1) 오래된 로그 파일 청소; 2) 로그 파일 크기를 늘리십시오. 3) 로그 파일 그룹을 늘리십시오. 4) 자동 로그 관리를 설정합니다. 5) 데이터베이스를 다시 이용하십시오. 솔루션을 구현하기 전에 데이터 손실을 방지하기 위해 데이터베이스를 백업하는 것이 좋습니다.

비즈니스 세계에서 오라클의 역할 비즈니스 세계에서 오라클의 역할 Apr 23, 2025 am 12:01 AM

Oracle은 데이터베이스 회사 일뿐 만 아니라 클라우드 컴퓨팅 및 ERP 시스템의 리더이기도합니다. 1. Oracle은 데이터베이스에서 클라우드 서비스 및 ERP 시스템에 이르기까지 포괄적 인 솔루션을 제공합니다. 2. OracleCloud는 AWS와 Azure에 도전하여 IAA, PAAS 및 SAAS 서비스를 제공합니다. 3. E-BusinessSuite 및 FusionApplications와 같은 Oracle의 ERP 시스템은 기업이 운영을 최적화하는 데 도움이됩니다.

HDFS에서 CentOS를 구성하는 데 어떤 단계가 필요합니까? HDFS에서 CentOS를 구성하는 데 어떤 단계가 필요합니까? Apr 14, 2025 pm 06:42 PM

Centos 시스템에서 Hadoop 분산 파일 시스템 (HDF)을 구축하려면 여러 단계가 필요합니다. 이 기사는 간단한 구성 안내서를 제공합니다. 1. 초기 단계에서 JDK를 설치할 준비 : 모든 노드에 JavadevelopmentKit (JDK)을 설치하면 버전이 Hadoop과 호환되어야합니다. 설치 패키지는 Oracle 공식 웹 사이트에서 다운로드 할 수 있습니다. 환경 변수 구성 : /etc /프로파일 파일 편집, Java 및 Hadoop 설정 설정 시스템에서 JDK 및 Hadoop의 설치 경로를 찾을 수 있습니다. 2. 보안 구성 : SSH 비밀번호가없는 로그인 SSH 키 : 각 노드에서 ssh-keygen 명령을 사용하십시오.

Oracle 데이터베이스를 중지하는 방법 Oracle 데이터베이스를 중지하는 방법 Apr 12, 2025 am 06:12 AM

Oracle 데이터베이스를 중지하려면 다음 단계를 수행하십시오. 1. 데이터베이스에 연결하십시오. 2. 즉시 종료; 3. 셧다운은 완전히 중단됩니다.

See all articles