Oracle 执行前自动提交DDL语句的变通方法
我为我的网站保留了两个密码(就网站用户所知,实际上是相同的密码,但使用两种不同的算法和盐进行了哈希和盐析)。一个是WebUsers表中的位置,即用户登录网站时验证密码的位置。另一个是oracle用户的密码,每个网站用户对应一个oracle用户Oracle 执行前自动提交DDL语句的变通方法,oracle,Oracle,我为我的网站保留了两个密码(就网站用户所知,实际上是相同的密码,但使用两种不同的算法和盐进行了哈希和盐析)。一个是WebUsers表中的位置,即用户登录网站时验证密码的位置。另一个是oracle用户的密码,每个网站用户对应一个oracle用户 在执行更改密码过程时,我必须在事务中更改WebUsers表以及oracle中的密码。问题是,DDL语句[alter user…]必须在执行任何操作之前提交。如果[alter user…]失败,并且在异常处理代码中我回滚了事务,则不会回滚WebUsers表中
在执行更改密码过程时,我必须在事务中更改WebUsers表以及oracle中的密码。问题是,DDL语句[alter user…]必须在执行任何操作之前提交。如果[alter user…]失败,并且在异常处理代码中我回滚了事务,则不会回滚WebUsers表中的更改。有什么解决办法吗?在Oracle下,在一个原子事务中不可能有DML和DDL 在Oracle中,DDL总是在运行DDL之前显式地导致提交 通常在这类场景中,您应该首先执行最有可能失败的步骤,即在您的情况下,DDL“Alter User” 然后运行您的DML,只有在DDL成功的情况下才运行,但同样存在DML失败的问题,然后无法回滚DDL,此时您只需运行另一个DDL即可恢复第一个DDL所做的更改 我们的想法是,第二步比第一步更容易失败
这种模式也被使用,比如说,你必须处理JMS+JDBC,而且,您不能使用JTA事务将JMS+JDBC活动包装在一个事务中。如果DDL失败,您不能将旧的哈希值存储在变量中,然后用旧的值再次更新WebUsers表吗?为什么您要将密码保存在Oracle和表中?您的身份验证不能合并,从而完全消除问题,这有什么原因吗?