ITPub博客

首页 > Linux操作系统 > Linux操作系统 > transactions_per_rollback_segment一个让人容易误解的参数!

transactions_per_rollback_segment一个让人容易误解的参数!

原创 Linux操作系统 作者:warehouse 时间:2007-12-22 00:00:00 0 删除 编辑

其实TRANSACTIONS_PER_ROLLBACK_SEGMENT 的作用仅仅是用于判断public rollback segment是否在startup时需要online而起作用,不能决定一个rollback segment上到底最多有多少个事务。rollback segment上最多能有多少个事务是由rollback segment header block上的事务表( TRN TBL)所决定的,当然最多能有多少个 TRN TBL肯定和db_block_size有关。TRANSACTIONS_PER_ROLLBACK_SEGMENT 在undo_management=auto时已经不起作用了。


doc:

TRANSACTIONS_PER_ROLLBACK_SEGMENT specifies the number of concurrent transactions you expect each rollback segment to have to handle. The minimum number of rollback segments acquired at startup is TRANSACTIONS divided by the value for this parameter. For example, if TRANSACTIONS is 101 and this parameter is 10, then the minimum number of rollback segments acquired would be the ratio 101/10, rounded up to 11.

You can acquire more rollback segments by naming them in the parameter ROLLBACK_SEGMENTS.

测试如下:

C:>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 12月 22 22:43:09 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> connect/ as sysdba
已连接。
SQL> show parameter trans

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
star_transformation_enabled string FALSE
transactions integer 500
transactions_per_rollback_segment integer 5
SQL> show parameter undo

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1

SQL> alter system set transactions=100 scope=spfile;

系统已更改。

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

系统已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter undo

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string MANUAL
undo_retention integer 900
undo_tablespace string UNDOTBS1

SQL> edit
已写入 file afiedt.buf

1 declare
2 v_string varchar2(100) ;
3 begin
4 for i in 1..10 loop
5 v_string := 'create rollback segment rbs'||i||' tablespace undotbs1';
6 execute immediate v_string;
7 end loop;
8* end;
SQL> /

PL/SQL 过程已成功完成。

SQL> edit
已写入 file afiedt.buf

1 declare
2 v_string varchar2(100) ;
3 begin
4 for i in 1..20 loop
5 v_string := 'create public rollback segment prbs'||i||' tablespace undo
tbs1';
6 execute immediate v_string;
7 end loop;
8* end;
SQL> /

PL/SQL 过程已成功完成。

SQL> show parameter rollback

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fast_start_parallel_rollback string LOW
rollback_segments string
transactions_per_rollback_segment integer 5
SQL> show parameter trans

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
star_transformation_enabled string FALSE
transactions integer 100
transactions_per_rollback_segment integer 5

SQL> alter system set transactions_per_rollback_segment=10 scope=spfile;

系统已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
--下面查询清楚的发现只有10个public rollback segment处于online,是因为transactions=100/ transactions_per_rollback_segment=10 =10因此10个rollback segment处于online,要想让其他public rollback segment在startup时也online,可以使用rollback_segments参数。

SQL> select segment_name , owner , status from dba_rollback_segs where status='O
NLINE';

SEGMENT_NAME OWNER STATUS
------------------------------ ------ ----------------
SYSTEM SYS ONLINE
PRBS1 PUBLIC ONLINE
PRBS2 PUBLIC ONLINE
PRBS3 PUBLIC ONLINE
PRBS4 PUBLIC ONLINE
PRBS5 PUBLIC ONLINE
PRBS6 PUBLIC ONLINE
PRBS7 PUBLIC ONLINE
PRBS8 PUBLIC ONLINE
PRBS9 PUBLIC ONLINE
PRBS10 PUBLIC ONLINE

已选择11行。
--切记别加单引号,那样就认为银号中的字符串是一个rollback segment了
SQL> alter system set rollback_segments=rbs1,rbs2,rbs3,rbs4,rbs5,rbs6,rbs7,rbs8,
rbs9,rbs10,prbs1,prbs2,prbs3,prbs4,prbs5,prbs6,prbs7,prbs8,prbs9,prbs10,prbs11,p
rbs12,prbs13,prbs14,prbs15,prbs16,prbs17,prbs18,prbs19,prbs20 scope=spfile;

系统已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 58721636 bytes
Database Buffers 104857600 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> select segment_name , owner , status from dba_rollback_segs where status='
ONLINE';

SEGMENT_NAME OWNER STATUS
------------------------------ ------ ----------------
SYSTEM SYS ONLINE
RBS1 SYS ONLINE
RBS2 SYS ONLINE
RBS3 SYS ONLINE
RBS4 SYS ONLINE
RBS5 SYS ONLINE
RBS6 SYS ONLINE
RBS7 SYS ONLINE
RBS8 SYS ONLINE
RBS9 SYS ONLINE
RBS10 SYS ONLINE

SEGMENT_NAME OWNER STATUS
------------------------------ ------ ----------------
PRBS1 PUBLIC ONLINE
PRBS2 PUBLIC ONLINE
PRBS3 PUBLIC ONLINE
PRBS4 PUBLIC ONLINE
PRBS5 PUBLIC ONLINE
PRBS6 PUBLIC ONLINE
PRBS7 PUBLIC ONLINE
PRBS8 PUBLIC ONLINE
PRBS9 PUBLIC ONLINE
PRBS10 PUBLIC ONLINE
PRBS11 PUBLIC ONLINE

SEGMENT_NAME OWNER STATUS
------------------------------ ------ ----------------
PRBS12 PUBLIC ONLINE
PRBS13 PUBLIC ONLINE
PRBS14 PUBLIC ONLINE
PRBS15 PUBLIC ONLINE
PRBS16 PUBLIC ONLINE
PRBS17 PUBLIC ONLINE
PRBS18 PUBLIC ONLINE
PRBS19 PUBLIC ONLINE
PRBS20 PUBLIC ONLINE

已选择31行。

--需要注意的是不能通过下面方法把rollback_segments参数的值去掉,否则instance不能启动,而应当使用reset,这里感觉oracle的设计有些死板或者说问题。
SQL> alter system set rollback_segments='' scope=spfile;

系统已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 58721636 bytes
Database Buffers 104857600 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
ORA-01092: ORACLE 实例终止。强制断开连接


SQL> show parameter rollback_segments
ERROR:
ORA-03114: 未连接到 ORALCE

--通过拷贝spfile中的参数构造initorcl.ora来启动数据库
C:>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 12月 22 23:20:08 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> connect/ as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 58721636 bytes
Database Buffers 104857600 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> create spfile from pfile;

文件已创建。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 58721636 bytes
Database Buffers 104857600 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> alter system set rollback_segments=rbs1,rbs2,rbs3,rbs4,rbs5,rbs6,rbs7,rbs8,
rbs9,rbs10,prbs1,prbs2,prbs3,prbs4,prbs5,prbs6,prbs7,prbs8,prbs9,prbs10,prbs11,p
rbs12,prbs13,prbs14,prbs15,prbs16,prbs17,prbs18,prbs19,prbs20 scope=spfile;

系统已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 58721636 bytes
Database Buffers 104857600 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL>

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

请登录后发表评论 登录
全部评论

注册时间:2007-12-07

  • 博文量
    716
  • 访问量
    5083657