分享

Oracle怎么显式开启事务,开始事务跟锁有什么关系,在存储过程中有时怎么开启和提交,回滚事务的

 chinablue488 2019-08-13

  为了解决用户可能碰到关于'Oracle怎么显式开启事务,开始事务跟锁有什么关系,在存储过程中有时怎么开启和提交,回滚事务的'相关的问题,突袭网经过收集整理为用户提供相关的解决办法,请注意,解决办法仅供参考,不代表本网同意其意见,如有任何问题请与本网联系。'Oracle怎么显式开启事务,开始事务跟锁有什么关系,在存储过程中有时怎么开启和提交,回滚事务的'相关的详细问题如下:如果在不同的数据库之间,是怎么实现数据的一致性...如果在不同的数据库之间,是怎么实现数据的一致性展开

===突袭网收集的解决方案如下===

解决方案1:

oracle使用语句savepoint sp_begintran开启显式事务,锁本身和事务是没有关系的,只要是数据库的操作都会产生锁。处于事务中的SQL语句只有这个事务提交(commit)之后,事务中的SQL语句影响的表记录上的锁才会释放。锁常见有共享锁(select语句产生)和排它锁(DML语句产生),如果一个表上加载有共享锁,还可以叠加共享锁,但不能叠加排它锁。如果一个表上加载有排他锁,就什么锁都不能加了,也就是说如果DML语句占用过多的时间,这些数据库效率就不高,就需要优化,当然select语句性能低了也不行。

每个存储过程可以不用显式事务,它本身就为你开启了一个隐式事务,如果需要开启显示事务,就通过savepoint sp_begintran开启,无论是不是显式还是隐式事务,你都得通过commit work提交事务,通过exception捕捉SQL语句异常,在异常发生时需要回滚事务(rollback work)。

解决方案2:

oracle使用语句savepoint sp_begintran开启显式事务,锁本身和事务是没有关系的,只要是数据库的操作都会产生锁。处于事务中的SQL语句只有这个事务提交(commit)之后,事务中的SQL语句影响的表记录上的锁才会释放。锁常见有共享锁(select语句产生)和排它锁(DML语句产生),如果一个表上加载有共享锁,还可以叠加共享锁,但不能叠加排它锁。如果一个表上加载有排他锁,就什么锁都不能加了,也就是说如果DML语句占用过多的时间,这些数据库效率就不高,就需要优化,当然select语句性能低了也不行。

每个存储过程可以不用显式事务,它本身就为你开启了一个隐式事务,如果需要开启显示事务,就通过savepoint sp_begintran开启,无论是不是显式还是隐式事务,你都得通过commit work提交事务,通过exception捕捉SQL语句异常,在异常发生时需要回滚事务(rollback work)。

oracle中如何得到执行存储过程的开始和结束时间

答:需要在存储过程中定义的时候把开始执行时间和结束时间打印出来。 举例如下: 创建存储过程: create or replace procedure p_testasv_begintime varchar2(20);v_endtime varchar2(20);v_str varchar2(10);begin v_begintime:=to_char(sysdate,'y...

oracle存储过程中update语句的提交问题

答:后面是必须跟commit的, 看下是不是打开了自动提交 show autocommit; 如果是on的话,就能解释你这个是什么情况了。 还有就是你在执行之后是不是做了用户切换,切换用户,用的是connect命令,是会提交事务的。

java oracle 批量执行sql语句和存储过程,并且要在...

答:看来你对oracle还没有入门,我通过 王二暖oracle11g教室 学习了oracle,收获很大,你也可以百度搜索一下这套视频课程,会 让你大开眼界的。 你可以参考 这套视频课程中的 java操纵oracle11g数据库,来完成。

关于oracle的事务中,如何判断一条语句是否成功执行

答:一个简单的正常提交-异常回滚 的例子代码. SQL> select * from test_main; ID VALUE ---------- -------------------- 2 TWO 3 THREE 1 ONE SQL> BEGIN 2 -- 插入2条同样的数据,使主键重复,引发错误后回滚事务. 3 INSERT INTO test_main(id, v...

oracle数据库中,怎么用事务和存储过程将一条数据...

答:CREATE OR REPLACE PROCEDURE PRC_TEST(P_NAME VARCHAR, P_DESC VARCHAR) IS BEGIN INSERT INTO TEST1(NAME, REMARK) VALUES(P_NAME, P_DESC); INSERT INTO TEST2(NAME, REMARK) VALUES(P_NAME, P_DESC); COMMIT; EXCEPTION WHEN OTHERS THEN RO...

oracle触发器怎么调用存储过程,不用传参数和传参...

答:直接调用就可以了,但是存储过程中不能有显示的事务控制,例如commit;rollback;ddl。如果必须的,需要使用自治事务。使用自治事务时尽量避免对触发器的宿主表进行操作,容易造成死锁

ORACLE 存储过程被锁,编译不了,怎么解锁?

答:可用SYS登录,然后查询如下语句: 查找存储过程OPERATIONDATA_IMP被哪些session锁住而无法编译 select * FROM dba_ddl_locks where name =upper('OPERATIONDATA_IMP'); 从而得到session_id,然后通过 select t.sid,t.serial# from v$session t w...

Oracle的函数或者存储过程是处于同一个事务里吗

答:1. 返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用.函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比...

oracle存储过程要锁表是怎么做的

答:使用select for update 或者直接lock table。 lock table有六选项,根据你的要求来做。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多