Oracle undo 表空间不可用
由于某次不小心操作,在切换表空间时没有成功,由于把undo的配置参数 undo_management值设置为MANUAL所以在启动数据库时没有报任何错误,但是给表插入数据时报错了,回滚段不可用的错误。然后查询了错误原因。
1 首先看数据库中undo信息
SQL> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string MANUAL
undo_retention integer 10800
undo_tablespace string UNDOTBS2
undo_tablespace 是UNDOTBS2,实际上已经被删除,因为参数 undo_management 为 MANUAL,所以数据库可以正常启动。
2 查看数据库undo 数据文件
select file_name,tablespace_name,online_status
from dba_data_files
where tablespace_name like '%UNDO%';
FILE_NAME TABLESPACE_NAME ONLINE_STATUS
1 /home/oracle/oradata/UNDOTBS1.dbf UNDOTBS1 ONLINE
数据库中只有一个名为UNDOTBS1 undo表空间,很明显系统里undo 配置信息有误,导致undo表空间不可用,插入数据时报错。
3 重启数据库到mount状态修改undo 配置信息
SQL> startup mount;
ORACLE instance started.
Total System Global Area 450953216 bytes
Fixed Size 2214256 bytes
Variable Size 348128912 bytes
Database Buffers 96468992 bytes
Redo Buffers 4141056 bytes
Database mounted.
SQL> alter system set undo_management='AUTO' scope=spfile;
System altered.
重启数据库到mount状态下查看undo配置信息
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS2
SQL> show parameter undo_tablespace;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace string UNDOTBS2
然后修改undo_tablespace
SQL> alter system set undo_tablespace=UNDOTBS1;
alter system set undo_tablespace=UNDOTBS1
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-01219: database not open: queries allowed on fixed tables/views only
报数据库未打开的错误,于是打开数据库
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-30012: undo tablespace 'UNDOTBS2' does not exist or of wrong type
Process ID: 72674
Session ID: 1 Serial number: 3
又遇到新的错误,应该是修改了undo_management为AUTO然后启动时要检测对应的undo_tablespace,但是undo_tablespace 对应的 UNDOTBS2不存在,所以引起了一系列问题。
根据以往经验准备关闭数据库然后查看spfile关于undo表空间的配置是否正确,正确则采用spfile启动到mount状态,不正确则修改之后再使用spfile方式启动到mount状态,关闭数据库问题又来了
SQL> shutdown abort;
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
SQL> shutdown immediate;
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
SQL> show parameter undo;
ERROR:
ORA-03114: not connected to ORACLE
不管以哪种方式关闭,都不行,也不能查询参数信息,数据库处于异常状态,于是百度查询解决办法:
首先退出sqlplus然后设置一下,指定ORACLE_SID,进而提供了实例信息就可以解决问题。
SQL> exit;
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@oracledb ~]$ set ORACLE_SID=ORCL
[oracle@oracledb ~]$ sqlplus
SQL> shutdown abort;
ORACLE instance shut down.
进入sqlplus顺利关闭数据库,然后再去查看对应的spfile,/usr/oracle/app/admin/orcl/pfile/init.ora.95201623739,vim 进去查看关于undo信息的配置如果不正确要修改,主要是undo_tablespace修改为数据库存在且可用的undo表空间,信息如下:
undo_management=AUTO
undo_retention=10800
undo_tablespace=UNDOTBS1
"init.ora.95201623739" 58L, 1877C
修改之后采用spfile启动到mount状态下
SQL> startup mount pfile=/usr/oracle/app/admin/orcl/pfile/init.ora.95201623739;
ORACLE instance started.
数据库启动成功,查看undo配置信息。正确了。
SQL> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 10800
undo_tablespace string UNDOTBS1
然后启动数据库到open状态,可以向表中插入数据了,不会再报回滚段不可用的错误了。
关于关闭数据库时遇到 ORA-24324 与ORA-01041错误,一般的解决的办法如下
- 重启监听程序;
- 重启sqlplus;
- 登陆服务器本机重启数据库;
总结,在修改undo配置信息时,先修改了undo_management 为auto,undo_tablespace没有一起修改,导致重启之后系统会根据undo_tablespace的值配置为UNDOTBS2,但是这个表空间实际上是不存在的,所以启动过程发生异常。应该一起修改undo_management 与 undo_tablespace,然后重启数据库就不会产生之后一系列问题了。
Oracle undo 表空间不可用的更多相关文章
- oracle undo表空间大小修改
redhat:清空回收站 rm -rf /home/登录用户名/.Trash 例子:rm -rf /home/.Trash-root df命令可以显示目前所有文件系统的可用空间及使用情形: 例子:d ...
- Oracle undo 表空间管理 (摘DAVID)
Oracle 的Undo有两种方式: 一是使用undo 表空间,二是使用回滚段. 我们通过 undo_management 参数来控制使用哪种方式,如果设为auto,就使用UNDO 表空间,这时必须要 ...
- [Oracle]undo表空间使用量为100%
在Toad中发现undo表空间undotbs1使用量已经达到100%,但是奇怪的是数据库并没有hang住,依然可以正常运转 通过Oracle提供的EM查看undotbs1表空间的使用,也达到了78.8 ...
- 监控和管理Oracle UNDO表空间的使用
对Oracle数据库UNDO表空间的监控和管理是我们日常最重要的工作之一,UNDO表空间通常都是Oracle自动化管理(通过undo_management初始化参数确定):UNDO表空间是用于存储DM ...
- oracle undo表空间
查询undo表空间状态 "Bytes(M)" FROM dba_undo_extents GROUP BY tablespace_name, status; Undo表空间的状态( ...
- Oracle数据库 ORA-01555 快照过旧 (undo表空间:撤销表空间)
UNDO表空间用于存放UNDO数据,当执行DML操作时,oracle会将这些操作的旧数据写入到UNDO段,以保证可以回滚或者一致读等,而临时表空间主要用来做查询和存放一些缓冲区数据.你听说UNDO也是 ...
- Oracle 11gR2 Database UNDO表空间使用率居高不下-转载
客户的数据库是Oracle Database 11.2.0.3.0 for AIX 6.1 64bit的单机数据库.客户查询DBA_FREE_SPACE发现UNDO表空间的使用率高达98%以上.客户的 ...
- undo表空间
undo表空间undo表空间的管理,主要包括创建.删除.修改.切换.其中需要注意的是不能在undo表空间创建数据库对象,还有就是只能是单文件或大文件表空间. 创建创建主要有两种方法,一种是在创建数据库 ...
- Oracle 释放过度使用的Undo表空间
故障现象:UNDO表空间越来越大,长此下去最终数据因为磁盘空间不足而崩溃: 问题分析:产生问题的原因主要以下两点: 1. 有较大的事务量让Oracle Undo自动扩展,产生过度占用磁盘空间的情况: ...
随机推荐
- SpringCloud之初识Zuul(网关)---动态路由,权限验证
通过前面的学习,使用Spring Cloud实现微服务的架构基本成型,大致是这样的: 我们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现:而服务间通过 ...
- 安利一波:Adobe 2019全家桶 破解版
之前发过一篇Photoshop破解的文章,今天把笔记本换了个系统,发现之前那个amtlib.dll替换破解的方式不适用于最新版的Adobe 2019 CC系列了,刚好看到群里有大佬分享了一个全家桶,给 ...
- Vue修改、编辑时,撤销修改内容,表格内容不变
在编辑该行的过程中,突然不想编辑了,想点击撤销按钮,将该行数据恢复到旧值,目前的做法是,在点击编辑按钮的时候转换成json字符,点击撤销按钮的时候再解析成对象,赋值给该行的数据. // 编辑editH ...
- Java基础知识点(一)
前言:本篇随笔,主要记录Java的基础知识点,不管是用于项目或者面试中,笔者认为都非常有用,所以将持续更新...... 1.Java的访问权限 Java中有四种访问权限:默认访问权限.public.p ...
- 如何生成git ssh key
公司有自己的git版本控制,自己注册账号后,管理员同意,就可以查看项目代码了,但是要克隆的话需要在本地生成git ssh key 一.进入.ssh文件夹. cd ~/.ssh 若没有.ssh文件夹,则 ...
- Linux之权限详解
如何知道你有什么权限 我能干什么?这是我最关心的问题! 切换到普通用户 [root@luffy-01 ~]# su - pizza [pizza@luffy-01 ~]$ ls /root ls: c ...
- 为什么swift是面向协议的编程--对面向对象机制的改进
主要目标是提供抽象能力和解决值类型的多态问题 Actually, Abrahams says, those are all attributes of types, and classes are j ...
- 待解决问题 :JDBC indexInsert.addBatch(); 为什么不生效 PSTM
JDBC indexInsert.addBatch(); 为什么不生效 PSTM
- 使li滚动到ul最上面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 用C# 模拟实现unity里的协程
注:需要了解C#的迭代器,不然很难理解. 之前面试有被问到unity协程的原理,以及撇开unity用纯C#去实现协程的方法.后来了解一下,确实可以的.趁这会有空,稍微总结一下. 还是结合代码说事吧: ...