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表定时程序结束!");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值