ITPub博客

首页 > 数据库 > Oracle > 深入浅出undo记载03

深入浅出undo记载03

原创 Oracle 作者:dotaddjj 时间:2011-12-31 22:07:56 0 删除 编辑

这里自己无意中做了个测试:之前修改undo表空间为手工管理

Sql>alter system set undo_management=manual scope=spfile

Sql>startup force

。。。。。

SQL> insert into xiaoyu.test03 select * from xiaoyu.test03;

insert into xiaoyu.test03 select * from xiaoyu.test03

ORA-01552: 非系统表空间 'USERS' 不能使用系统回退段

SQL> select * from v$rollname;

USN NAME

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

0 SYSTEM

……

SQL> show parameter undo;

NAME TYPE VALUE

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

undo_management string MANUAL

undo_retention integer 900

undo_tablespace string undotbs_test

SQL> select * from v$version where rownum=1;

BANNER

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

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

之前网友说过系统表空间可以被用于非系统级事务,看来至少在oracle 10g中就已经不可用了,由于oracle中现在此时只有系统回滚段,事务无法运行。手工管理回滚表空间下,oracle默认不会创建回滚段和上线,而事务也不能占用系统回滚段。不过自动管理模式下,回滚段会自动创建并上线,在10G自动管理模式下,手工创建的回滚段是无效的,而且也不会显示在数据字典视图中。

9I下undo_suppress_errors参数表示在AUM下手工创建回滚段是否返回出错信息,true为不返回出错信息,false返回出错信息,10g中该参数已经丢弃。

SQL> alter system set undo_management=auto scope=spfile;

System altered

SQL> show paramter undo;

SQL> show parameter undo;

NAME TYPE VALUE

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

undo_management string AUTO

undo_retention integer 900

undo_tablespace string undotbs_test

SQL> select * from v$rollname;

USN NAME

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

0 SYSTEM

13 _SYSSMU13$

14 _SYSSMU14$

15 _SYSSMU15$

16 _SYSSMU16$

17 _SYSSMU17$

18 _SYSSMU18$

19 _SYSSMU19$

20 _SYSSMU20$

21 _SYSSMU21$

22 _SYSSMU22$

11 rows selected

正常关闭数据库undo表空间出现问题:

记得曾经有网友说过启动数据库时丢失了回滚段表空间的数据文件,但是又没有备份信息,由于是undo表空间存储的都是回滚段信息,可以考虑重建undo表空间。

Sql>shutdown immediate;

物理删除undo表空间所在数据文件datafile 7

SQL> startup;

ORACLE 例程已经启动。

Total System Global Area 373293056 bytes

Fixed Size 1249080 bytes

Variable Size 234881224 bytes

Database Buffers 134217728 bytes

Redo Buffers 2945024 bytes

数据库装载完毕。

ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件

ORA-01110: 数据文件 7: 'D:UNDOTBS_TEST02.DBF'

SQL> show parameter undo;

NAME TYPE

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

VALUE

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

undo_management string

AUTO

undo_retention integer

900

undo_tablespace string

undotbs_test02

SQL> alter database datafile 7 offline drop;

数据库已更改。

SQL> alter database open;

数据库已更改。

此时选择新建undo表空间,切换undo表空间

SQL>create undo tablespace undotbso datafile ‘d:oracleprocduct10.2.0oradataxiaoyuundotbs01.dbf’ size 50M;

Sql> alter system set undo_tablespace=’undotbs’

SQL> drop tablespace undotbs_test02 including contents;

需要等待原undo表空间的回滚段中的事务全部提交,事务称为非激活后才能删除原undo表空间,不然会出现下述错误信息,可以查看v$rollstat视图的xact字段看回滚段上活动的事务数量

drop tablespace undotbs_test02 including contents

ORA-30013: 还原表空间 ' undotbs_test02' 当前正在使用中

。

Undo表空间过大:

在oracle 9i开始选择AUM管理时,通常undo表空间缺省会选择autoextentd on 自动扩展而导致undo表空间过度扩展而不能回收,占用空间过多,可以考虑重建undo表空间,修改缺省undo表空间,也可以在同平台迁移数据库时,考虑不迁移过大的undo表空间而选择重建切换。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1057009/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    220
  • 访问量
    1662977