答案 0 :(得分:1)
在我们的例子中,必须调用StoredProcedure,从jtds调用时抛出异常:
无法在事务内执行备份或还原操作。
我在https://communities.bmc.com/docs/DOC-66239上发现了什么 是exec调用需要加上“ SET IMPLICIT_TRANSACTIONS OFF;”
这是基于春季的代码段的样子:
try {
jdbcTemplate.getJdbcOperations.execute("SET IMPLICIT_TRANSACTIONS OFF;")
//noinspection ConvertExpressionToSAM // we have 1.6 code version
jdbcTemplate.getJdbcOperations.call(new CallableStatementCreator {
override def createCallableStatement(con: Connection): CallableStatement = {
val callableStatement = con.prepareCall(
s""" EXEC dbo.RestoreLatestCopy
| @ID = ?
|""".stripMargin)
callableStatement.setInt(1, getMappedRestoreId(fromDbName))
callableStatement
}
}, parameters ++ rsParams)
} catch {
答案 1 :(得分:0)
答案 2 :(得分:0)
我最终使用了以下丑陋的解决方法。如果有人能解释我如何正确地做到这一点,我仍然感兴趣;但解决方法目前会做。
数据库在Web服务器上的同一台机器上运行,因此我可以使用标准的SQL Server命令行工具来运行存储过程。触发它的Java代码是:
try {
Process process = Runtime.getRuntime().exec("sqlcmd -E -d \"example\" -Q \"EXEC dbo.procTest;\"");
process.waitFor();
} catch (IOException e) {
// Handler here
} catch (InterruptedException e) {
// Handler here
}
因此运行完全相同的存储过程 - 区别在于Web服务器没有锁定,因为 sqlcmd 没有在单个事务中运行它。是的,这很难看......但这是我所知道的唯一可行的选择!