ORA-01097错误解决办法及探索shutdown immediate

简介: <p><br></p> <p></p> <div style="font-size:13.3333px; line-height:26px; word-wrap:break-word; text-align:center; font-family:微软雅黑"> <span style="font-size:14px; line-height:27.2px; word-wrap:bre


ORA-01097错误解决办法及探索shutdown immediate

很晚了要关机睡觉了,先把oralce 数据库关闭,结果出现下面的错误。
SQL> shutdown immediate
ORA-01097: cannot shutdown while in a transaction - commit or rollback first
提示说在一个事物未提交或者回滚前不能shutdown.我才想到我对一个测试用的表,进行了 下面的更新而没有提交。
SQL> update test01
  2  set (id,name)
  3  = ( select 102,'huawei' from dual)
  4  where id=100;
1 row updated.
现在来提交下。
SQL> commit
  2  ;
Commit complete.
再次尝试关闭数据库OK 了。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
虽然这个错误很简单,但是不能放过每一次学习的机会,趁此学些下shutdown immediate。 正如它的名字使用这种方式关闭数据库是比较快速的。并且在下次重启的时候不需要做实例 恢复。
使用shutdown immediate 会经历以下的情景。
1、不允许对数据库发起新的连接,会话不能发起新的事务。
2、没有提交的事务要先提交或者回滚。(正如你所看到了oracle 不会自动的完成该项工作 所以你需要自己来提交或者回滚事务)不过出现这种情况,可能会延迟关闭数据库的时间 具体取决于事务的长度与数量。
3、 oracle 数据库会主动的断开与用户的连接。
第二天开机以后我模拟了昨天关机的情景,是为了想证明oracle 会不会自动的帮我们做提交 或者回滚。先往测试表中插入一条记录,不提交。
SQL> insert into test01 
  2  values (103,'newland');
1 row created.
尝试关机。
SQL> shutdown immediate
ORA-01097: cannot shutdown while in a transaction - commit or rollback first
再关
SQL> shutdown immediate
再关。。。
ORA-01097: cannot shutdown while in a transaction - commit or rollback first
再关。。。。。。。
SQL> shutdown immediate
ORA-01097: cannot shutdown while in a transaction - commit or rollback first
显然oracle 不会自动的帮会话提交事务或者回滚事务。


这是一个事实,当同一会话存在未提交事务时使用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 first

OK,错误提示“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 contact


ERROR:
ORA-03114: not connected to ORACLE

4.体验无敌的abort方式关闭数据库
1)启动数据库
sys@ora10g> startup;
ORACLE instance started.

Total System Global Area  209715200 bytes
Fixed Size                  2071640 bytes
Variable Size             125830056 bytes
Database Buffers           75497472 bytes
Redo Buffers                6316032 bytes
Database mounted.
Database opened.

2)重新模拟同一会话中未提交事务
sys@ora10g> select * from t;

         X
----------
         1

sys@ora10g> delete from t;

1 row deleted.

3)确认immediate选项无法关闭数据库
sys@ora10g> shutdown immediate;
ORA-01097: cannot shutdown while in a transaction - commit or rollback first

4)使用abort选项关闭数据库
sys@ora10g> shutdown abort;
ORACLE instance shut down.
sys@ora10g>

可见abort选项的“闪电断电式”关闭数据库的方法是毫无任何羁绊的!

5.小结
这里给出的是一个现象和事实。从中可以体会出不同关闭数据库方式的细微差别(这里仅仅讨论了immediate和abort选项)。


目录
相关文章
|
6月前
|
关系型数据库 MySQL Apache
XAMPP启动报错: Apache shutdown unexpectedly or MySQL shutdown unexpectedly
XAMPP启动报错: Apache shutdown unexpectedly or MySQL shutdown unexpectedly
53 0
|
SQL Oracle 关系型数据库
ORA-01012: not logged on 解决办法
<br><br><p style="line-height:23px; padding-top:0px; padding-bottom:0px; margin-top:8px; margin-bottom:8px; letter-spacing:0.5px; font-size:13px; color:rgb(51,51,51); font-family:微软雅黑,Verdana,sans
5019 0
|
SQL Oracle 关系型数据库
ORA-01033: ORACLE initialization or shutdown in progress的两种解决方法
ORA-01033: ORACLE initialization or shutdown in progress通常是由于ORACLE数据库文件损坏引起的,以下是出现的问题及解决方法: 现象一: sysdba可以登录,但是在使用中就出现“数据库未打开,仅允许在固定表/视图中查询”,而normal用户无法登录使用,出现ORA-01033: ORACLE initialization or shutdown in progress 的错误。
1886 0
OGG REPA进程 Error ORA-01031报错处理
OGG REPA进程 Error ORA-01031报错处理
387 0
OGG REPA进程 Error ORA-01031报错处理
|
Oracle 关系型数据库 数据库
ORA-01033:ORACLE initialization or shutdown in progress解决方法
ORA-01033:ORACLE initialization or shutdown in progress解决方法
|
Oracle 关系型数据库
|
关系型数据库 数据库 Oracle
|
SQL Oracle 网络协议