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

mysqlviewshavelimitations : 1) 그들은 upportallsqloperations, datamanipulation throughviewswithjoinsorbqueries를 제한하지 않습니다

적절한 usermanagementInmysqliscrucialforenhancingsecurityandensuringfefficientDatabaseOperation.1) USECREATEUSERTOWDDUSERS,@'localHost'or@'%'.

mysqldoes notimposeahardlimitontriggers, butpracticalfactorsdeteirefectiveuse : 1) ServerConfigurationimpactStriggerManagement; 2) 복잡한 트리거 스케일 스케일 사이드로드; 3) argertableSlowtriggerTriggerPerformance; 4) High ConconcercencyCancaUspriggerContention; 5) m

예, It 'safetostoreBlobdatainmysql, butconsidertheStefactors : 1) StoragesPace : BlobScanconSumeSignificantspace, 잠재적으로 증가하는 CostsandSlownperformance

PHP 웹 인터페이스를 통해 MySQL 사용자를 추가하면 MySQLI 확장 기능을 사용할 수 있습니다. 단계는 다음과 같습니다. 1. MySQL 데이터베이스에 연결하고 MySQLI 확장자를 사용하십시오. 2. 사용자를 생성하고 CreateUser 문을 사용하고 Password () 함수를 사용하여 암호를 암호화하십시오. 3. SQL 주입 방지 및 MySQLI_REAL_ESCAPE_STRING () 함수를 사용하여 사용자 입력을 처리하십시오. 4. 새 사용자에게 권한을 할당하고 보조금 명세서를 사용하십시오.

mysql'sblobissuilableforstoringbinarydatawithinareldatabase, whilenosqloptionslikemongodb, redis, and cassandraofferflexible, scalablesolutionsforunstuctureddata.blobissimplerbutcanslowwownperformance를 사용하는 것들보업 betterscal randaysand

TOADDAUSERINMYSQL, 사용 : CreateUser'UserName '@'host'IdentifiedBy'Password '; 여기서'showTodoitseciRely : 1) ChoosetheHostCareLyTocon trolaccess.2) setResourcelimitswithOptionslikemax_queries_per_hour.3) Usestrong, iriquepasswords.4) enforcessl/tlsconnectionswith

toavoidcommonmistakeswithstringdatatypesinmysql, stroundStringTypenuances, chooseTherightType, andManageEncodingAndCollationSettingSefectively.1) usecharforfixed-lengthstrings, varcharvariable-length, andtext/blobforlargerdata.2) setcarcatter


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

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

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Dreamweaver Mac版
시각적 웹 개발 도구