欢迎投稿

今日深度:

UNDO表空间损坏导致数据库无法OPEN,undoopen

UNDO表空间损坏导致数据库无法OPEN,undoopen


在数据库undo表空间文件损坏,或者undo表空间文件缺失的情况下,无法打开数据库。 这两种情况都可以视为一种情况处理,解决方法一样。
场景:在23:10的时候新建一个undo表空间undotbs02,并切换至该undo表空间。              UNDO表空间损坏导致数据库无法OPEN - AllenLi - Allen的博客             此时再闪回数据库至23:10。             由于闪回数据库时使用的是undotbs02,而23:10时使用的是undotbs01,             会造成undo表空间缺失,无法打开数据库。(注:闪回数据库之后需要resetlogs)             UNDO表空间损坏导致数据库无法OPEN - AllenLi - Allen的博客             UNDO表空间损坏导致数据库无法OPEN - AllenLi - Allen的博客             从上面的错误就可以看出来,此时undotbs02不存在,无法打开数据库。             解决思路很简单:新建一个undo表空间,然后将undo_tablespace 指向新的undo表空间。             但是....新建表空间只能在数据库open状态下才能进行。             所以:             因为Oracle system 表空间还有回滚段,因此我们先可以让Oracle使用system表空间回滚段             打开数据库,然后就可以新建表空间了。             UNDO表空间损坏导致数据库无法OPEN - AllenLi - Allen的博客             UNDO表空间损坏导致数据库无法OPEN - AllenLi - Allen的博客             新建表空间:             UNDO表空间损坏导致数据库无法OPEN - AllenLi - Allen的博客
           启动数据库。
           这时可以新建一个undo表空间,然后将undo_tablespace参数指向过去            注:一定要把undo_management 参数修改为AUTO            UNDO表空间损坏导致数据库无法OPEN - AllenLi - Allen的博客            UNDO表空间损坏导致数据库无法OPEN - AllenLi - Allen的博客
          通过以上步骤就可以完成undo表空间损坏或缺失导致的数据库无法打开问题。      
总结:       需要注意的问题:          1.  在闪回数据库之后,打开数据库时需要使用 alter database open resetlogs;   命令重置重置日志          2.  要闪回数据库,数据库要装载但不能打开(mount状态下闪回数据库)           3.  记得将undo_management 参数修改回来。使用:alter system set undo_management=auto scope=spfile; 
    下面是利用system表空间回滚段新建undo表空间的步骤:          1.  将数据库启动到mount          2.  alter system  set undo_management=manual scope=spfile;     --   设置undo表空间的管理方式           3.  shutdown immediate;          4.  startup  然后新建一个undo表空间 undotbs03;          5.  修改undo_tablespace 参数指向新建的undo表空间 undotbs03;      ** 6.  记得将undo_management 参数修改回来。                alter system set  undo_management=auto scope=spfile;          7.  SQL> alter system set undo_management=manual scope=spfile;                  auto表示:该表空间是由Oracle来管理的(自动分配给不同事物使用)                  manual表示:该表空间的block是通过freelist来管理如何存储数据的。       8. 打开数据库    **  9. 打开数据库后一定要把undo_management 参数修改回来。             alter system set undo_management=auto scope=spfile;

oracle undo表空间被删除,数据库不可以启动,问怎恢复

首先,undo表空间满是正常的,oracle自然会重用或者扩展它,一般不用管它。
然后,现在要解决的话,需要先把undo tablespace设置成手动,启动数据库,创建新的undo tablespace。把新的设置成默认的。
假设你的库现在是mounted状态
1 创建PFILE(如果已有就是更新)
SQL>create pfile from spfile;
2 关闭数据库
SQL>shutdown immediate
3 在你的$ORACLE_HOME/dbs目录下面找个叫做
init<数据库>.ora的文件,把其中有undo_management=AUTO的一行改成
undo_management=MANUAL
如果没有就在文件末尾填一行
4 以sysdba身份连接数据库
SQL>connect "/ as sysdba"
用刚才改过的文件启动数据库
SQL> startup pfile=<刚才的文件全路径和名字>
这步是最关键的,如果成功,后面就没问题了
5 drop掉原来的表空间
SQL> drop tablespace <原来的undo表空间名字> including contents;
6 创建新的undo表空间
SQL> create UNDO tablespace undotbs2 datafile '/u01/app/oracle/oradata/orcl/undotbs02.dbf' size 100M autoextend on;
7 关闭数据库,
SQL>shutdown immediate
在开始那个init文件里设置UNDO_MANAGEMENT=AUTO
和 UNDO_TABLESPACE=UNDOTBS2
8 再做一次第四步
9 更新spfile
SQL>create spfile from pfile;
10 关闭数据库,正常重新启动
SQL>shutdown immediate
SQL>startup
11 去网上教你删undo那个地方骂它。非常想当然的做法。没有任何理由这么做
12 让你的工程师去学oracle 培训

以上步骤的中的第5步可能会出问题。我不确认。。。 但是即使第5步不成功,问题应该也不大
 

oracle什决定UNDO表空间的大小

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

undo表空间用于存放undo数据,当执行DML操作(insert、update、delete)时,oracle会将这些操作的旧数据写入到undo段。

undo数据的作用

1.回退事务

当执行DML操作修改数据后,旧数据被存放在undo段中。只要数据为提交、回滚段未写满或者回滚段为超时的情况下,旧数据都能被回滚回来。

2.读一致性

通过DML操作后的数据没有提交之前,其他用户读取的数据都是回滚段里面的旧数据。

使用undo参数

1.undo_management

该初始化参数用于指定undo数据的管理方式。如果要使用自动管理模式,必须设置为auto,如果使用手工管理模式必须设置该参数为manual,使用自动管理模式时,oracle会使用undo表空间管理,使用手工管理模式时,oracle会使用回滚段管理undo数据。需要注意,使用自动管理模式时,如果没有配置初始化参数UNDO_TABLESPACE,oracle会自动选择第一个可用的UNDO表空间存放UNDO数据,如果没有可用的UNDO表空间,oracle会使用SYSTEM回滚段存放UNDO记录,并在ALTER文件中记载警告。

2,UNDO_TABLESPACE

该初始化参数用于指定例程所要使用的UNDO表空间,使用自动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间.

在RAC(Real Application Cluster)结构中,因为一个UNDO表空间不能由多个例程同时使用,所有必须为每个例程配置一个独立的UNDO表空间.

3,UNDO_RETENTION

该初始化参数用于控制UNDO数据的最大保留时间,其默认值为900秒,从9i开始,通过配置该初始化参数,可以指定undo数据的保留时间,从而确定倒叙查询特征(Flashback Query)可以查看到的最早时间点.

手工管理回滚段的规划:

SQL> show parameter undo;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management string AUTO

undo_retention integer 900

undo_tablespace string UNDOTBS1

SQL> show parameter transactions;

NAME TYPE VALUE

------------------------------------ ----------......余下全文>>
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/4381.html NewsArticle UNDO表空间损坏导致数据库无法OPEN,undoopen 在数据库undo表空间文件损坏,或者undo表空间文件缺失的情况下,无法打开数据库。 这两种情况都可以视为一种情况处理,解决方法一样。 场...
评论暂时关闭