`
islong
  • 浏览: 16047 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

根据上传到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;
}


}

分享到:
评论

相关推荐

    suse 安装 oracle 脚本

    本脚本适用于suse 11,12桌面版,服务器版安装oracle 11g,12c 本脚本安装必须的rpm包,修改内核参数以满足安装需要,创建用户和组,为oracle用户设置必须的限制 本脚本为初学linux想安装oracle的程序员,以及经常...

    suse下的oracle自动备份

    通常,这包括Oracle数据库服务器软件、Oracle Grid Infrastructure以及RMAN。确保所有必要的软件包已通过zypper或YaST等工具正确安装。 接下来,配置Oracle的环境变量。在用户家目录(通常是/oracle)下创建一个名...

    suse下安装oracle

    在Linux SUSE环境下安装Oracle数据库是一项复杂而细致的工作,涉及到多个步骤和技术要点。这里我们将深入探讨这个主题,以便你能够全面理解如何在SUSE系统上成功部署Oracle。 1. **系统准备**: - **硬件需求**:...

    suse linux 10安装Oracle11g数据库

    将ISO中的安装文件解压到合适的位置,例如`/tmp/oracle`,然后使用`root`用户执行安装脚本: ```bash su - oracle cd /tmp/oracle ./runInstaller ``` 6. **配置数据库实例**: 在图形化安装界面中,按照...

    Suse11 Enterprise SP3 安装Oracle 12c RAC 图文详细教程

    在本教程中,我们将深入探讨如何在SUSE Linux Enterprise Server 11 SP3 (SLES 11 SP3) 上安装Oracle Database 12c Release 2 (12.2.0.1) Real Application Clusters (RAC)。Oracle RAC 是一种高可用性解决方案,它...

    在suse下添加oracle 11g自动备份

    - **权限问题**:确保执行备份脚本的用户具有足够的权限访问Oracle数据库及相关文件系统。 - **备份空间**:定期检查备份文件所在的磁盘空间,避免因空间不足导致备份失败。 - **备份验证**:定期验证备份文件的有效...

    Suse9安装Oracle9i.txt

    ### Suse9下安装Oracle9i的关键知识点 #### 一、环境准备与系统配置 **1.1 系统选择** - **SUSE Linux 9 (Suse9)**:本教程适用于SUSE Linux 9版本操作系统。确保您的系统是此版本。 **1.2 硬件要求** - **内存**...

    Suse 搭建ORACLE11G

    在SUSE Linux操作系统上搭建Oracle 11G数据库是一个复杂的过程,涉及到多个步骤和配置。以下是一些关键知识点和步骤的详细说明: 1. **环境准备**:在开始安装前,确保系统满足Oracle 11G的硬件和软件需求。这通常...

    Suse Enterprise 11 安装Oracle 11.2

    2. 软件包的必选项:在安装时,确保选择“开发工具”和“数据库服务器”等相关组件,这些是安装Oracle所必需的。 3. IP地址的设置:配置静态IP地址,以便服务器能够稳定地与其他系统通信。 接下来是Oracle 11g R2的...

    SUSE11静默安装Oracle11G服务器

    ### SUSE 11 静默安装 Oracle 11g R2 服务器知识点详解 #### 一、准备工作与环境搭建 **1.1 下载并准备安装文件** Oracle 11g R2 的安装涉及两个主要文件: - `linux.x64_11gR2_database_1of2.zip` - `linux.x64...

    SUSE10及其下oracle10G的安装

    5. **运行安装脚本**:执行Oracle的安装脚本,如`runInstaller`,按照提示进行配置,包括数据库类型(如RAC、单实例)、字符集选择、口令设定等。 6. **创建数据库**:安装完成后,使用`dbca`(Database ...

    SuSE11sp3下Oracle 11g集群部署及维护手册

    根据给定文件的标题、描述、标签和部分内容,以下是SuSE11sp3下Oracle 11g集群部署及维护手册中涵盖的知识点: 1. 环境要求: - Oracle 11g集群部署适用于SuSE Linux Enterprise Server (SLES) 11 Service Pack 3 ...

    在suse linux下安装oracle

    1. **运行安装脚本**:以`oracle`用户身份,执行解压后的安装脚本,如`./runInstaller`。 2. **接受许可协议**:阅读并接受Oracle软件的许可协议。 3. **配置选项**:在安装向导中,选择产品组件、安装类型(如企业...

    suse11安装oracle11g及集群配置

    安装完成后,需要以 root 用户身份执行两个脚本来配置 Oracle 的环境变量: 1. **orainstRoot.sh**:用于更改 `/opt/oracle/oraInventory` 目录的权限。 - 命令示例:`#/opt/oracle/oraInventory/orainstRoot.sh...

    SuSE11下安装oracle10g

    - **配置用户组和权限**:为了确保 Oracle 数据库的正常运行,需要创建一个名为 `oinstall` 的用户组,并为该组创建一个用户,例如 `oracle` 用户,赋予其必要的权限。 2. **安装 Oracle 10g**: - **上传安装...

    suse11下安装oracle11g的教程 100%安装成功

    - 安装完成后,使用DBCA(Database Configuration Assistant)创建数据库实例,或者手动执行SQL脚本创建。 8. **初始化参数文件**: - 配置`init.ora`或`spfile`,以适应服务器的硬件配置和应用需求。 9. **监听...

    Oracle数据库在linux suse下安装与配置文档

    Oracle数据库在Linux SUSE下的安装与配置是一项技术性较强的工作,涉及到多个步骤和注意事项。以下是对这个主题的详细阐述。 **一、Oracle数据库安装环境准备** 1. **安装环境说明** - 服务器操作系统选用的是...

    suselinux安装oracle

    4. **shell登录脚本**:修改`oracle`用户的`~/.bash_profile`或`~/.bashrc`文件,配置Oracle的环境变量,如`ORACLE_HOME`、`PATH`、`LD_LIBRARY_PATH`等。 5. **配置环境变量**:在`/etc/profile`文件中设置全局的...

Global site tag (gtag.js) - Google Analytics