java执行数据库命令行_java程序执行命令行,解锁数据库表
有些表鎖的時間長或其他原因,在plsql中不能解鎖,只能用命令行解鎖。
有些功能跨平臺系統的交互偶爾會鎖表,就需要自動解鎖。
下面是解鎖的代碼:
package com.lg.BreakOracleUtils;
import com.lg.DB.DBProjp;
import com.lg.database.DbManager;
import com.lg.database.DbsConnection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class BreakOracleLock
{
private static final Log logger = LogFactory.getLog(BreakOracleLock.class);
public static void breakOracleLock() { logger.info("解鎖xx表定時程序已經啟動了!");
DbsConnection connect = null;
try
{
DBProjp db = new DBProjp();
DbManager dbm = new DbManager();
connect = dbm.getConnection(db.url, db.userName, db.passWord);
String sql = "select b.username, b.sid, b.serial#, logon_time, spid, c.object_name\n from v$locked_object a, v$session b, v$process p, all_objects c\n "+
" where a.session_id = b.sid\n and b.paddr = p.addr\n and a.object_id = c.object_id\n and (c.object_name like '表名%' or c.object_name like '表名%' )\n "
+" and b.username in ('數據庫名' , '數據庫名') \n and logon_time<=(sysdate-30/24/60)\n order by b.logon_time";
///設置鎖表時間30分鐘,即表的鎖定時間小于當前時間30外,具體表的具體業務分析鎖表的時間,自己設定
/
List list = connect.select(sql);
if ((list != null) && (list.size() > 0)) {
Map m = (Map)list.get(0);
String spid = (String)m.get("spid");
String cmdStr = "orakill orcl " + spid;
logger.info("解鎖xx表執行命令:" + cmdStr + ",表名:" + m.get("object_name"));
Process localProcess = Runtime.getRuntime().exec(cmdStr);
}
connect.release();
} catch (Exception e) {
logger.info("解鎖xx表定時程序失敗!" + e.getMessage());
try {
if (connect != null)
connect.release();
}
catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
logger.info("解鎖xx表定時程序結束!");
}
}
總結
以上是生活随笔為你收集整理的java执行数据库命令行_java程序执行命令行,解锁数据库表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【蓝桥杯每日一练】 斐波那契数列
- 下一篇: 没有bug队——加贝——Python 5