由于某次不小心操作,在切换表空间时没有成功,由于把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 表空间不可用的更多相关文章

  1. oracle undo表空间大小修改

    redhat:清空回收站 rm -rf  /home/登录用户名/.Trash 例子:rm -rf /home/.Trash-root df命令可以显示目前所有文件系统的可用空间及使用情形: 例子:d ...

  2. Oracle undo 表空间管理 (摘DAVID)

    Oracle 的Undo有两种方式: 一是使用undo 表空间,二是使用回滚段. 我们通过 undo_management 参数来控制使用哪种方式,如果设为auto,就使用UNDO 表空间,这时必须要 ...

  3. [Oracle]undo表空间使用量为100%

    在Toad中发现undo表空间undotbs1使用量已经达到100%,但是奇怪的是数据库并没有hang住,依然可以正常运转 通过Oracle提供的EM查看undotbs1表空间的使用,也达到了78.8 ...

  4. 监控和管理Oracle UNDO表空间的使用

    对Oracle数据库UNDO表空间的监控和管理是我们日常最重要的工作之一,UNDO表空间通常都是Oracle自动化管理(通过undo_management初始化参数确定):UNDO表空间是用于存储DM ...

  5. oracle undo表空间

    查询undo表空间状态 "Bytes(M)" FROM dba_undo_extents GROUP BY tablespace_name, status; Undo表空间的状态( ...

  6. Oracle数据库 ORA-01555 快照过旧 (undo表空间:撤销表空间)

    UNDO表空间用于存放UNDO数据,当执行DML操作时,oracle会将这些操作的旧数据写入到UNDO段,以保证可以回滚或者一致读等,而临时表空间主要用来做查询和存放一些缓冲区数据.你听说UNDO也是 ...

  7. Oracle 11gR2 Database UNDO表空间使用率居高不下-转载

    客户的数据库是Oracle Database 11.2.0.3.0 for AIX 6.1 64bit的单机数据库.客户查询DBA_FREE_SPACE发现UNDO表空间的使用率高达98%以上.客户的 ...

  8. undo表空间

    undo表空间undo表空间的管理,主要包括创建.删除.修改.切换.其中需要注意的是不能在undo表空间创建数据库对象,还有就是只能是单文件或大文件表空间. 创建创建主要有两种方法,一种是在创建数据库 ...

  9. Oracle 释放过度使用的Undo表空间

    故障现象:UNDO表空间越来越大,长此下去最终数据因为磁盘空间不足而崩溃: 问题分析:产生问题的原因主要以下两点: 1. 有较大的事务量让Oracle Undo自动扩展,产生过度占用磁盘空间的情况: ...

随机推荐

  1. Windows下mysql服务的安装与卸载

    安装 mysqld -install 也可以指定mysql安装服务的文件 my.ini文件配置好后就可以在cmd中安装mysqld服务了,在cmd中运行命令:mysqld --install MySQ ...

  2. Nginx使用教程(六):使用Nginx缓存之FastCGI缓存

    启用FastCGI缓存 <br\>编辑必须启用缓存的虚拟主机配置文件. nano /etc/nginx/sites-enabled/vhost 将以下行添加到server{}指令之外的文件 ...

  3. 深入理解Zuul之源码解析

    转载:http://blog.csdn.net/forezp/article/details/76211680 Zuul 架构图 在zuul中, 整个请求的过程是这样的,首先将请求给zuulservl ...

  4. WPF DataGrid 列宽填充表格方法

    WPF中使DataGrid 列宽填充表格方法,设置ColumnWidth属性为ColumnWidth="*"即可. 源码: <DataGrid AutoGenerateCol ...

  5. 计划任务执行bat

    @echo offtaskkill /f /t /im ControlKJmen.exetaskkill /f /t /im KJMen.exetaskkill /f /t /im DisplayLo ...

  6. tomcat 安装配置部署到nginx+tomcat+https

    目录 1 Tomcat简介 2.下载并安装Tomcat服务 2.2 部署java环境 2.3 安装Tomcat 2.4 Tomcat目录介绍 (关注点 bin conf logs webapps) 2 ...

  7. Python学习笔记(3)-字符串

    创建字符串 一对单引号或双引号 >>> 'hello world' 'hello world' >>> "hello world" 'hello ...

  8. ROS的launch文件

    ROS中可以把很多的命令以描述的形式写成launch文件,然后用roslaunch命令执行launch文件.它的使用方法如下: roslaunch [package] [filename.launch ...

  9. rabbitMQ常用方法说明 – 6中工作模式及关键点

    首先,RabbitMQ解决什么问题? 1)信息的发送者和接收者如何维持连接,如果一方的连接中断,这期间的数据如何防止丢失? 2)如何降低发送者和接收者的耦合度? 3)如何让Priority高的接收者先 ...

  10. docker 3 docker安装

    centos docker安装 docker支持以下centos版本: centos 7 (64-bit) centos 6.5 (64-bit)或更高的版本 前提条件 目前,centos仅发行版中的 ...