这是一个事实,当同一会话存在未提交事务时使用immediate选项无法关闭数据库。简单看一下这个现象。1.模拟未提交事务这里为了简便,会话session1直接在sys用户下创建表t进行测试。sys@ora10g> create table t (x number);Table created.sys@ora10g> insert into t values (1);1 row created.2.使用immediate选项关闭数据库sys@ora10g> shutdown immediate;ORA-01097: cannot shutdown while in a transaction - commit or rollback firstOK,错误提示“ORA-01097”已经给出,提示信息解释的非常清楚。因此在同一个会话session1中如果存在未提交的事务使用immediate选项是没有办法关闭数据库的。3.在其他会话中存在未提交事务时可被immediate选项关闭1)首先我们提交上面第一个会话session1中的事务。sys@ora10g> commit;Commit complete.2)另外开启一个session2在开一个会话session2同样模拟一个未提交的事务sys@ora10g> create table t2 (x number);Table created.sys@ora10g> insert into t2 values (2);1 row created.这里不要提交事务。3)回到session1中执行具有immediate选项的关闭数据库命令回到第一个窗口执行关闭数据库的操作sys@ora10g> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.可见此时关闭动作可以成功完成。可以进一步确认第二个会话session2已经被强制杀死。这也是immediate选项本应具有的能力。sec@ora10g> select * from t;select * from t*ERROR at line 1:ORA-03135: connection lost contactERROR:ORA-03114: not connected to ORACLE4.体验无敌的abort方式关闭数据库1)启动数据库sys@ora10g> startup;ORACLE instance started.Total System Global Area 209715200 bytesFixed Size 2071640 bytesVariable Size 125830056 bytesDatabase Buffers 75497472 bytesRedo Buffers 6316032 bytesDatabase mounted.Database opened.2)重新模拟同一会话中未提交事务sys@ora10g> select * from t;X----------1sys@ora10g> delete from t;1 row deleted.3)确认immediate选项无法关闭数据库sys@ora10g> shutdown immediate;ORA-01097: cannot shutdown while in a transaction - commit or rollback first4)使用abort选项关闭数据库sys@ora10g> shutdown abort;ORACLE instance shut down.sys@ora10g>可见abort选项的“闪电断电式”关闭数据库的方法是毫无任何羁绊的!5.小结这里给出的是一个现象和事实。从中可以体会出不同关闭数据库方式的细微差别(这里仅仅讨论了immediate和abort选项)。Good luck.secooler11.01.08-- The End --
oracle会话未提交 退出后,【Shutdown】同一会话存在未提交事务时使用immediate选项无法关闭数据库...
最新推荐文章于 2023-02-23 18:38:35 发布