首页 > 数据库 > Oracle > 深入浅出undo记载03
这里自己无意中做了个测试:之前修改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/ ,如需转载,请注明出处,否则将追究法律责任。