1、查看UNDO段的参数
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
------------------------------------ ----------- ----------
transactions integer 187 将来系统里面准备支持多少事务
transactions_per_rollback_segment integer 5 每一个回滚段准备支持多少事务
SQL> show parameter rollback
NAME TYPE VALUE
------------------------------------ ----------- --------
fast_start_parallel_rollback string LOW
rollback_segments string 私有的回滚段
transactions_per_rollback_segment integer 5
原理:Oracle的启动过程中,首先会去找rollback_segments中的有的回滚段,同时会去计算transactions/ transactions_per_rollback_segment=37也就是需要37个回滚段,将这两个数字加以比较,是否重组。如果重组打开数据库。如果不重组会去找公用的回滚段。如果都不满足也会照样打开数据库,不会报错,但在以后用到的时候就会出错.
2、手工建立UNDO的回滚段
1) SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
2)手工修改参数
C:\oracle\admin\demo\pfile\init.ora
undo_management=manual
3)重新启动数据库
SQL> startup pfile=C:\oracle\admin\demo\pfile\initdemo.ora
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 92276068 bytes
Database Buffers 71303168 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
打开的同时重启动一个Sqlplus窗口执行以下语句
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn sys/oracle@demo as sysdba;
已连接。
SQL> select * from tests1;
ID
----------
12
55
SQL> set wrap off
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- -----------
undo_management string MANUAL
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL> delete tests1
2 where id=12;
delete tests1*
第 1 行出现错误:
ORA-01552: 非系统表空间 'LYH' 不能使用系统回退段
4)创建回滚段
SQL> create rollback segment rbs1
2 tablespace undotbs1;
回退段已创建。
SQL> run
1 create public rollback segment prbs1
2* tablespace undotbs1
回退段已创建。
SQL> alter rollback segment rbs1 online;
回退段已变更。
SQL> show parameter rollback;
NAME TYPE VALUE
------------------------------------ ----------- -------
fast_start_parallel_rollback string LOW
rollback_segments string
transactions_per_rollback_segment integer 5
5)修改系统参数
C:\oracle\admin\demo\pfile\init.ora
undo_management=manual
rollback_segments=(‘rbs1’,’rbs2’) 如果有多个这样增加
transactions=100
transactions_per_rollback_segment=10
SQL> select * from dba_rollback_segs;
行将被截断
SEGMENT_NAME OWNER TABLESPACE_NAME
------------------------------ ------ -----------------
SYSTEM SYS SYSTEM
PRBS1 PUBLIC UNDOTBS1
RBS1 SYS UNDOTBS1
_SYSSMU10$ PUBLIC UNDOTBS1
_SYSSMU9$ PUBLIC UNDOTBS1
_SYSSMU8$ PUBLIC UNDOTBS1
_SYSSMU7$ PUBLIC UNDOTBS1
_SYSSMU6$ PUBLIC UNDOTBS1
_SYSSMU5$ PUBLIC UNDOTBS1
_SYSSMU4$ PUBLIC UNDOTBS1
_SYSSMU3$ PUBLIC UNDOTBS1
SEGMENT_NAME OWNER TABLESPACE_NAME
------------------------------ ------ -----------------
_SYSSMU2$ PUBLIC UNDOTBS1
_SYSSMU1$ PUBLIC UNDOTBS1
已选择13行。
转载于:https://blog.51cto.com/19880614/1168962