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

2024-05-06 00:32

本文主要是介绍ORA-01097错误解决办法及探索shutdown immediate,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


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 不会自动的帮会话提交事务或者回滚事务。

【Shutdown】同一会话存在未提交事务时使用immediate选项无法关闭数据库 


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


这篇关于ORA-01097错误解决办法及探索shutdown immediate的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963064

相关文章

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

MySQL错误代码2058和2059的解决办法

《MySQL错误代码2058和2059的解决办法》:本文主要介绍MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,... 目录1. 前置理解2.报错现象3.解决办法(敲重点!!!)1. php前置理解2058和2059的错误

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总