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

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











Oracle에 필요한 메모리 양은 데이터베이스 크기, 활동 수준 및 필요한 성능 수준(데이터 버퍼 저장, 인덱스 버퍼, SQL 문 실행 및 데이터 사전 캐시 관리에 필요)에 따라 다릅니다. 정확한 양은 데이터베이스 크기, 활동 수준 및 필요한 성능 수준에 따라 달라집니다. 모범 사례에는 적절한 SGA 크기 설정, SGA 구성 요소 크기 조정, AMM 사용 및 메모리 사용량 모니터링이 포함됩니다.

Oracle 데이터베이스 서버 하드웨어 구성 요구 사항: 프로세서: 기본 주파수가 2.5GHz 이상인 멀티 코어, 대규모 데이터베이스의 경우 32개 이상의 코어가 권장됩니다. 메모리: 소규모 데이터베이스의 경우 최소 8GB, 중간 크기의 경우 16~64GB, 대규모 데이터베이스 또는 과도한 작업 부하의 경우 최대 512GB 이상. 스토리지: SSD 또는 NVMe 디스크, 중복성 및 성능을 위한 RAID 어레이. 네트워크: 고속 네트워크(10GbE 이상), 전용 네트워크 카드, 지연 시간이 짧은 네트워크. 기타: 안정적인 전원 공급 장치, 이중 구성 요소, 호환 가능한 운영 체제 및 소프트웨어, 열 방출 및 냉각 시스템.

Oracle 데이터베이스에 필요한 메모리 양은 데이터베이스 크기, 작업 부하 유형 및 동시 사용자 수에 따라 다릅니다. 일반 권장 사항: 소형 데이터베이스: 16~32GB, 중형 데이터베이스: 32~64GB, 대형 데이터베이스: 64GB 이상. 고려해야 할 다른 요소로는 데이터베이스 버전, 메모리 최적화 옵션, 가상화 및 모범 사례(메모리 사용량 모니터링, 할당 조정)가 있습니다.

7월 23일 이 웹사이트의 뉴스에 따르면 ASUS는 AMD EPYC 4004 시리즈 프로세서로 구동되는 다양한 서버 및 워크스테이션 수준 제품을 출시했습니다. 이 사이트의 참고 사항: AMD는 지난 5월 AM5 플랫폼과 Zen4 아키텍처 EPYC 4004 시리즈 프로세서를 출시하여 최대 16코어 3DV 캐시 사양을 제공했습니다. ASUSProER100AB6 서버 ASUSProER100AB6은 EPYC Xiaolong 4004 시리즈 프로세서가 장착된 1U 랙 장착형 서버 제품으로 IDC 및 중소기업의 요구 사항에 적합합니다. ASUSExpertCenterProET500AB6 워크스테이션 ASUSExpertCenterProET500AB6은

2025 년에 Global Digital Virtual Currency Trading Platform은 2025 년에 트랜잭션 볼륨, 보안 및 사용자 경험과 같은 지표를 기반으로 전 세계 10 대 디지털 가상 통화 거래 플랫폼을 권위있게 발표합니다. OKX는 강력한 기술 강점과 글로벌 운영 전략으로 1 위를 차지했으며 Binance는 높은 유동성과 낮은 수수료와 밀접한 관련이 있습니다. Gate.io, Coinbase 및 Kraken과 같은 플랫폼은 각각의 장점과 함께 최전선에 있습니다. 이 목록에는 Huobi, Kucoin, Bitfinex, Crypto.com 및 Gemini와 같은 거래 플랫폼이 각각 고유 한 특성을 지니고 있지만 투자는 신중해야합니다. 플랫폼을 선택하려면 보안, 유동성, 수수료, 사용자 경험, 통화 선택 및 규제 준수와 같은 요소를 고려해야합니다.

상위 10 개 디지털 통화 거래 플랫폼 : 1. OKX, 2. BINANCE, 3. GATE.IO, 4. HUOBI GLOBAL, 5. KRAKEN, 6. COINBASE, 7. KUCOIN, 8. BITFINEX, 9. CRYPTO.COM, 10. GEMINI, 자체 특성을 보유하고 있으며,이 교환은 보안, 요소, 보안, 사용자를 기반으로하는 플랫폼을 선택할 수 있습니다.

상위 10 개의 가상 통화 거래 플랫폼 순위 (2025 년 최신) : BINANCE : 글로벌 리더, 높은 유동성 및 규제가 주목을 끌었습니다. OKX : 대규모 사용자 기반, 여러 통화를 지원하며 레버리지 거래를 제공합니다. Gate.io : 다양한 화폐 통화 지불 방법을 갖춘 선임 교환으로 다양한 거래 쌍 및 투자 제품을 제공합니다. BITGET : 파생 상품 교환, 높은 유동성, 낮은 수수료. HUOBI : 다양한 통화 및 거래 쌍을 지원하는 오래된 교환. 코인베이스 : 잘 알려진 미국 교환으로 엄격하게 규제되었습니다. Phemex 등.

이 기사는 10 개의 디지털 거래 앱을 권장한다. 플랫폼을 선택할 때 보안, 유동성, 거래 수수료, 통화 선택, 사용자 인터페이스, 고객 서비스 지원 및 규제 준수와 같은 요소를 고려하고 위험을 신중하게 평가하고 맹목적으로 추세를 따르지 않아야합니다.
