TRANSACTION을 ROLLBACK SEGMENT에 할당하는 방법(SET TRANSACTION USE)
제품 : ORACLE SERVER
작성날짜 : 2003-04-04
TRANSACTION을 ROLLBACK SEGMENT에 할당하는 방법
==============================================
(SET TRANSACTION USE ROLLBACK SEGMENT)
Purpose
Batch job 등을 사용할 때 특별히 크게 만든 rollback segment를 사용하도록
할 수가 있다. transaction에 특정한 rbs를 지정하는 방법을 알아보자.
Explanation
Oracle은 다음과 같은 규칙에 의해 각 Transaction이 사용하는 Rollback
segment를 결정한다.
1. Active Transaction의 수가 가장 작은 Rollback Segment에 할당한다.
2. 만약 1의 조건에 만족하는 Rollback segment가 하나 이상이면, 가장
마지막에 할당된 rbs 다음의 rbs를 할당한다. 이것은 undo 기능을 더
오래 지속시키도록 해 준다.
그러나, Application이 큰 rollback segment가 필요하다면 위와 같이
자동적인 rollback segment의 할당이 아닌 Manual하게 특정 rollback
segment를 할당 가능하다.
다음의 방법을 사용한다.
1) 큰 rollback segment를 만든다. 큰 rollback segment 를 만들기
위해서는 rbs tablespace에 영역이 충분히 커야 하므로 필요할 경우
tablespace를 확장하는 작업을 한다.
<tablespace 확장>
$ sqlplus system/manager
sql> alter tablespace rbs add datafile '?/rbs1SID.dbf' size 100m;
<rollback segment 생성>
sql> create rollback segment big_rbs storage(initial 10m next 10m)
tablespace rbs;
sql> alter rollback segment big_rbs online;
2) Transaction 를 assign 한다.
<sqlplus>
SQL> set transaction use rollback segment big_rbs;
<pro*c>
exec sql commit work;
exec sql set transaction use rollback segment big_rbs;
<forms>
dbms_transaction.use_rollback_segment('big_rbs');
이와 같이 지정하면 이후에 commit 또는 rollback이 일어날 때까지
한 transaction에만 해당된다.
Similar Messages
-
Transaction taking default rollback segment
Dear al,
10.2.0.4. on solaris 10
transaction taking default rollback segment
set transaction use rollback segment rbs2;
structure of rbs2:
Create rollback segment rbs2 tablespace tempt storage (initial 1M next 1M minextents 2 maxextents 1024);
alter ROLLBACK SEGMENT RBS2 STORAGE
(MINEXTENTS 20
MAXEXTENTS UNLIMITED );
set transaction use rollback segment rbs2;
when am running the query , am getting the below error :
ERROR at line 3:
ORA-01555: snapshot too old: rollback segment number 8 with name "_SYSSMU8$"
too small
why still the transaction is referring to system rollback segment "_SYSSMU8$" where I've explicitly set the rollback segment for the transactiom ?
ANy idea ?
KAIThanks robert and
Now, after setting
undo_retention integer
2700
It failed with the below and now it took 20 minutes..
ERROR at line 4:
ORA-01555: snapshot too old: rollback segment number 9 with name "_SYSSMU9$"
too small
ORA-02063: preceding line from TABS2CALLS
Elapsed: 00:20:11.40
Please advise
Kai -
ROLLBACK SEGMENT의 MINEXTENTS를 20 이상으로 하면 좋은 이유
제품 : ORACLE SERVER
작성날짜 : 2003-06-19
ROLLBACK SEGMENT의 MINEXTENTS를 20 이상으로 하면 좋은 이유
=========================================================
PURPOSE
이 자료는 다음과 같은 주제에 대하여 소개하는 자료이다.
이 문서는 database application의 요구 사항을 충족시키기 위해 고려되어
져야 할 rollback segment tablespace 구성에 관한 내용을 담고 있다.
Creating, Optimizing, and Understanding Rollback Segments
-Rollback Segment 구성과 기록 방식
-Transaction에 Rollback Segment를 할당하는 Oracle 내부 메커니즘
-Rollback Segment 크기와 갯수
-Rollback Segment의 크기와 갯수 결정을 위한 테스트
-Rollback Segment extent의 크기와 갯수
-Rollback Segment의 minextents를 20 이상으로 하면 좋은 이유?
-Rollback Segment의 Optimal storage parameter와 Shrink
Explanation
Rollback Segment 구성과 기록 방식
Rollback segment는 extent라 불리는 연속적인 여러 개의 block으로 구성된다.
Rollback segment는 ordered circular 방식으로 extent를 쓰게 되는데,
current extent가 full이 되면 next extent로 옮겨 가며 사용하게 된다.
Transaction은 rollback segment 내의 current location에 record를 쓴 다음,
record의 size 만큼 current pointer를 옮겨 간다.
Rollback segment에 현재 record가 쓰여지고 있는 위치를 "Head"라고 한다.
또한, "Tail"이란 용어는 rollback segment에서 가장 오래된 active
transaction record의 시작 위치가 되는 부분을 말한다.
Transaction에 Rollback Segment를 할당하는 Oracle 내부 메커니즘
새로운 transaction이 rollback segment 를 요청하면, 각 rollback segment
를 이용하고 있는 active transaction 갯수를 확인하여 가장 적은 갯수의
active transaction 을 가진 rollback segment를 할당하게 된다.
Rollback segment는 transaction load를 처리하기에 충분한 크기를 가져야
하고, 필요한 만큼의 rollback segment를 사용할 수 있도록 적당한 갯수의
rollback segment를 가져야 한다.
1. 한 transaction은 단 하나의 rollback segment만을 사용할 수 있다.
2. 같은 extent에 여러 transaction이 기록할 수 있다.
3. Rollback segment의 Head는 Tail에 의해 현재 사용 중인 extent를
침범하지 않는다.
4. 링 형태로 구성되어 있는 rollback segment의 extent들은 다음 extent를
찾을 때 절대 건너 뛰는 일이 없으며, 순서를 뒤바꾸어 사용하지도 않는다.
5. Head가 next extent를 찾지 못하면, 새로운 extent를 추가로 할당하고,
그 extent를 링 안에 포함시킨다.
위와 같은 원리를 감안할 때, transaction size 뿐만 아니라 transaction
time도 상당히 중요한 고려 사항이라는 것을 알 수 있다.
Rollback Segment 크기와 갯수
Rollback segment size가 충분한지 판단하는 기준은 transaction activity에
직접적으로 영향을 받는다. 주로 일어나는 transaction activity에 근거하여
rollback segment size를 결정하여야 하고, 잘 일어나지 않는 특수한 경우의
큰 transaction이 문제라면 별도의 rollback segment로 관리되어야 한다.
Transaction 발생 중 Head가 너무 빨리 wrap around 시켜서 tail을 catch하
지 않도록 하여야 하며, 자주 변경되는 data에 대해 long-running query가
수행되었을 경우 read-consistency가 유지될 수 있도록 rollback segment
가 wrap around되지 않아야 한다.
Rollback segment 갯수를 적당히 잡아야 하는 이유는 process들 간에
contention을 방지하기 위함이고, V$WAITSTAT, V$ROLLSTAT, V$ROLLNAME
view를 통해서 contention을 확인할 수 있으며, 조회문은 다음과 같다.
sqlplus system/manager
select rn.name, (rs.waits/rs.gets) rbs_header_wait_ratio
from v$rollstat rs, v$rollname rn
where rs.usn = rn.usn
order by 1;
위의 query에 의해 조회된 rbs_header_wait_ratio 가 0.01 보다 크면,
rollback segment 갯수를 추가한다.
Rollback Segment의 크기와 갯수 결정을 위한 테스트
1. Rollback segment tablespace 생성
2. 테스트하기 위해 생성할 Rollback segment 갯수 결정
3. 같은 크기의 extent로 rollback segment 생성
extent 갯수는 최대 확장 시 10 - 30 개 정도가 되도록 extent 크기를 결정
4. Rollback segment의 minextents는 2이다.
5. 테스트할 rollback segment와 system rollback segment만 online 상태로 한다.
6. Transaction을 수행하고, 필요하면 application을 load한다.
7. Rollback segment contention을 확인한다.
8. Rollback segment가 최대 얼마까지 확장하는지 모니터링한다.
Rollback Segment extent의 크기와 갯수
Rollback segment가 자라나는 최대 사이즈를 알 수 있는데, 이 수치를
"minimum coverage size"라 한다. 만약, contention이 발생한다면 rollback
segment 갯수를 늘려 가면 테스트를 반복한다. 또한, extent 갯수가 10개
미만이나 30개 이상이 될 필요가 있다면 extent 크기를 늘리거나 줄이면서
테스트를 반복해 나가면 된다.
Rollback segment의 extent 크기를 정할 때, 각 extent는 모두 같은 크기로
생성할 것을 recommend한다.
Rollback tablespace의 크기는 extent size의 배수로 지정한다.
최적의 성능을 위한 rollback segment의 minextents는 20 이상이어야 한다.
Rollback Segment의 minextents를 20 이상으로 하면 좋은 이유?
Rollback segment는 dynamic하게 allocate되고, 더 이상 필요 없게 되었을 때
(만약, Optimal parameter가 셋팅되어 있으면) 모두 commit된 extent에
대해서는 optimal size 만큼만 남기고 release(deallocate)된다.
Rollback segment가 적은 수의 extent를 가질 수록, space 할당/해제 시
extent 수가 많을 때보다 큰 사이즈의 space가 할당되고, 해제된다.
다음과 같은 예를 들어 보자.
200M 정도의 rollback segment가 있는데, 100M 짜리 2개의 extent로 이루어져
있다고 가정해보자. 이 rollback segment에 추가로 space를 할당해야 할 일이
생겼을 때, 모든 rollback segment extent는 같은 크기를 가져야 한다는 점을
감안할 때, 100M 짜리 extent를 하나 더 할당해야 할 것이다.
이 결과 직전의 rollback segment 크기에 비하여 50% 만큼의 크기 증가분이
생겨나게 된 것인데, 실제 필요로 하는 space보다 더 많은 space가 할당되었을
것이다.
이와 반대로, 10M 짜리 extent 20개로 구성된 200M 짜리 rollback segment를
생각해보자.
여기에 추가로 space를 할당해야 할 일이 생겼을 때, 10M 짜리 extent 하나만
추가되면 되는 것이다.
Rollback segment가 20개 또는 그 이상의 extent로 구성되어 있다면 extent가
하나 더 증가할 경우가 생겼을 때, rollback segment의 전체 크기가 5% 이상은
늘어나지 않는다는 것이다.
즉, space의 할당과 해제 작업이 보다 유연하고 쉽게 일어날 수 있다.
요약하면, rollback segment의 extent 갯수를 20 이상으로 잡으면 space
할당과 해제가 "보다" 수월해진다.
실제로 extent 갯수를 20 이상으로 잡았을 때, 처리 속도가 훨씬 빨라진다는
사실이 많은 테스트 결과 밝혀졌다.
한가지 확실한 사실은, space를 할당하고 해제하는 작업은 cost가 적게 드는
작업이 아니라는 사실이다.
실제로 extent가 할당/해제되는 작업이 일어날 때, performance가 저하되는
일이 발생한다는 것이다.
Extent 하나에 대한 cost는 별 문제가 안 된다고 할지라도, rollback segment
는 끊임없이 space를 할당하고 해제하는 작업을 반복하기 때문에 작은 크기의
extent를 갖는 것이 cost 측면에서 훨씬 효율적이라는 결론이다.
Rollback Segment의 Optimal storage parameter와 Shrink
Optimal은 deallocate 시에 rollback segment 내에 optimal size 만큼의
extents를 유지하기 위해 사용하는 rollback segment storage parameter이다.
다음과 같은 명령으로 사용한다.
alter rollback segment r01 storage (optimal 1m);Optimal size는 storage 절 안에서 기술되어야 한다.
Optimal size 이상이 되면, 모두 commit된 extent에 대해서는 optimal size
만큼만 남기고 release된다.
즉, optimal에서 지정한 크기 만큼만 rollback segment를 유지하겠다는
뜻이며, 일정한 크기로 늘어났다가 다음번 tx이 해당 rbs를 취할 경우
optimal size만큼 resize하는 option이다.
rbs의 가장 최근에 사용된 extent가 다 차서 다른 extent를 요구할 때
이 optimal size와 rbs size를 비교하게 되며, 만약 rbs size가 더 크다면
active tx에 관여하지 않는 tail extent에 대하여 deallocation이 이루어진다.
특정 rollback segment가 너무 큰 space를 차지해서 다른 rollback segment가
extent를 발생할 수 있는 여유 공간을 부족하게 만들기 때문에 이를 극복하기
위해서 optimal size를 지정할 필요가 있다.
즉, optimal parameter를 지정하면 space availability 측면에서 효율적이다.
다음과 같이 shrink 명령을 수행하는데, size를 지정하지 않으면 optimal
size 만큼 shrink된다.
alter rollback segment [rbs_name] shrink to [size];Shrink 명령 수행 후, 바로 줄어들지 않는 경우가 있는데,
transaction이 있는 경우는 줄어들지 않고, transaction이 종료되면 줄어든다.
Optimal이 적용되는 시간은 session이 빠져 나가고 약 5~10 분 정도 걸린다.
적당한 OPTIMAL SIZE?
=> 20 ~ 30 extents 정도가 적당한데, batch job의 성격에 따라 size는 달라
지며 각 optimal의 합이 datafile의 size를 넘어도 전혀 상관없다.
Optimal size를 initial, next와 같게 주면 extent가 발생하는 매번 shrink가
일어나므로 좋지 않다.
RBS들의 평균 크기를 구하여 이것을 optimal 크기로 지정하여 사용하는 것을
권한다.
다음의 query를 이용하여 peak time에 rollback segment들의 평균 크기를 구한다.
select initial_extent + next_extent * (extents-1) "Rollback_size", extents
from dba_segments
where segment_type ='ROLLBACK';
이 크기의 평균값(bytes)을 rollback segment들의 optimal size로 사용할 수
있다.
주의할 사항은 너무 자주 shrink된다거나 optimal 값을 너무 작게 주면
ora-1555 : snapshot too old error가 발생할 확률이 높아지므로,
사용하지 않는 것이 좋을 수도 있고, 되도록 큰 값으로 셋팅해야 한다.
Rollback segment의 optimal size를 확인할 수 있는 view는 V$ROLLSTAT
이라는 dynamic view로서 OPTSIZE column에서 확인이 가능하다.
Example
none
Reference Documents
<Note:69464.1> -
Sql to find check Percent of Rollback Segment Used?
I have the following queries to find information about rollback segments.
I want the sql to find % of rollback segment used.
--rollsegs.sql
select SEGMENT_NAME, OWNER, TABLESPACE_NAME, SEGMENT_ID, status
from dba_rollback_segs order by segment_name;
select name, extents, writes, xacts, gets,waits, shrinks, aveactive, status
from v$rollname n, v$rollstat s
where n.usn = s.usn
order by name;
--rolbstat.sql
select name, rssize, hwmsize "High", optsize "Opt", wraps, extends, shrinks,
aveshrink "Aveshr", aveactive "Aveact"
from v$rollname n, v$rollstat s
where n.usn = s.usn
order by name;
set numformat 999999990;DrBurgs, there was a time when your session was assigned a rollback segment that rollback segment held all the updates performed by your session but by Oracle version 8.1 every transaction executed by your session could be assigned to a different rollback segment.
So every 100,000 or whatever value of N use choose as your commit point could result in a different rollback segment being used. You can use v$rollstat and v$transaction to monitor rollback segment usage while the job is running.
You stated that you had one rollback segment for every tablespace. There is no relation in Oracle between the number of tablespace and the number of rollback segments you should have.
You should choose the number of rollback segments to create based on the expected user load and how large a transaction you need to be able to support. For manually defined rollback segments set the initial extent size and the next extent size equal with pctincrease = 0. Then set optimal to the size you would like each rollback segment to be. This size should be large enough that shrinks do not happen often but small enough that one segment that expands will not result in other rollback segments being able to extend. By using uniform extent size you guarentee that every free extent is usable by any other rollback segment that needs to extend.
With a true warehouse you probably have very little update compared to your select load and the updates are probably load jobs. In this case you may need very few, very large rollback segments to handle the load.
HTH -- Mark D Powell -- -
Which rollback segment ???
rdbms 9207
is there a way to tell which rollback segments a process used after it has been executed. i have a script that will give me some good info on rbsegs during execution but that's not what i want. i have a process running for more than an hour that is using "set transaction use rollback segment rbsxl;" it does several commits and then issues the set stmnt after every commit. anyway... problem is... sometimes it blows up because it grabs a different rollback segment which are all smaller than rbsxl. sqltrace hasn't seemed to help. statspack?? oem?? any ideas??
would love to know where it's grabbing this other rbseg. even a mod to the program to output the current rbseg would be nice.... just don't know how.
thanks
-doug-Hmm...some thoughts:
1.) Since you're on 9.2, why not moveto AUM? Much easier to deal with.
2.) If you want to stick w/ conventional rollback segments, you ought to make sure they are equisized (governed by optsize) and are able to grow enough to fit your needs (based on free space in the rollback segment tablespace).
3.) If you really want to just see what's going on w/ the code, try a 10046 trace. Everything should be captured there, including all 'set transaction use rollback segment' statements, and it may help you identify if there are any commits that are not followed by a 'set transaction use rollback segment' statement. My guess is that after one of the commits, you missed a 'set transaction ...' statement.
Hope that helps,
-Mark -
Rollback segment for index creation
Hi,
I want to assign a specific (big) rollback segment to the transactions used by InterMedia Text while creating the index.
However a 'SET TRANSACTION USE ROLLBACK SEGMENT create_index' directly before the 'CREATE INDEX ...' seems not to work, as I saw that the inserts performed by InterMedia Text (e.g. into the $i and $k tables) were done using other rollback segments (e.g. RBSxx).
Is there any way to InterMedia Text to tell which rollback segments it should use for its internal operation?
Cheers,
Johanneswe can't assign the rollback segment to particular user.
For better performance place different table
spaces in different disks.
by
ramana
null -
Replacing explicit Rollback Segments by UNDO segement
Hi,
My DBA wants to turn off the explicit rollback segments currently being used and replace them by UNDO segment. I have explicit mention of these rollback segments in my C++ and Pro*C codes. What changes am I supposed to make in order to implement the UNDO segements. Do I need to remove the function or only commenting the rollback segment reference line will suffice. Please see the sample code below:
void DeleteDBI::SetTransaction()
struct sqlca sqlca;
EXEC SQL BEGIN DECLARE SECTION;
// Thread context:
sql_context ctx = dbConnection->GetContext();
EXEC SQL END DECLARE SECTION;
EXEC SQL CONTEXT USE :ctx;
EXEC SQL SET TRANSACTION USE ROLLBACK SEGMENT RBS_LARGE_02;
EXEC SQL WHENEVER SQLERROR DO SqlError(sqlca, "DeleteDBI::SetTransaction");
}It looks like you can comment the entire procedure.
However it is not a good practice to control the Rollback segment from code.
Check with ur DBA for better options in the future. -
Question abt rollback segments
hi all,
I have some doubts on oracle internal architecture. When DML statements are run, the old datablocks are written to rollback segments. But it first happens in SGA and later they will be written to the file by dbwr. Any idea when they will be written? i.e., before commit or after?
Regards
SureshThis has been running through my head all morning and I did some more tests. For the same demo I get this output:
7624441972 20060419 165120 INSERT insert into "SYS"."TAB$"("OBJ#","DATAOBJ#","TS#","FILE#","BLOCK#","BOBJ#","TAB#","COLS","CLUCOLS","PCTFREE$","PCTUSED$","INITRANS","MAXTRANS","FLAGS","AUDIT$","ROWCNT","BLKCNT","EMPCNT","AVGSPC","CHNCNT","AVGRLN","AVGSPC_FLB","FLBCNT","ANALYZETIME","SAMPLESIZE","DEGREE","INSTANCES","INTCOLS","KERNELCOLS","PROPERTY","TRIGFLAG","SPARE1","SPARE2","SPARE3","SPARE4","SPARE5","SPARE6") values ('1247473','1247473','5','3','13198',NULL,NULL,'1',NULL,'10','40','1','255','1','--------------------------------',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1','1','536870912','0','736',NULL,NULL,NULL,NULL,TO_DATE('19/04/06', 'DD/MM/RR'));
7624441972 20060419 165120 INSERT insert into "SYS"."COL$"("OBJ#","COL#","SEGCOL#","SEGCOLLENGTH","OFFSET","NAME","TYPE#","LENGTH","FIXEDSTORAGE","PRECISION#","SCALE","NULL$","DEFLENGTH","SPARE6","INTCOL#","PROPERTY","CHARSETID","CHARSETFORM","SPARE1","SPARE2","SPARE3") values ('1247473','1','1','22','0','A','2','22','0',NULL,NULL,'0',NULL,NULL,'1','0','0','0','0','0','0');
7624441972 20060419 165120 INTERNAL
7624441972 20060419 165120 INTERNAL
7624441972 20060419 165120 INTERNAL
7624441972 20060419 165120 DDL create table T
a number
7624441973 20060419 165120 UPDATE update "SYS"."SEG$" set "TYPE#" = '5', "BLOCKS" = '64', "EXTENTS" = '1', "INIEXTS" = '64', "MINEXTS" = '1', "MAXEXTS" = '2147483645', "EXTSIZE" = '64', "EXTPCT" = '0', "USER#" = '44', "LISTS" = '0', "GROUPS" = '0', "CACHEHINT" = '0', "HWMINCR" = '1247473', "SPARE1" = '131329' where "TS#" = '5' and "FILE#" = '3' and "BLOCK#" = '13198' and "TYPE#" = '3' and "BLOCKS" = '64' and "EXTENTS" = '1' and "INIEXTS" = '64' and "MINEXTS" = '1' and "MAXEXTS" = '2147483645' and "EXTSIZE" = '64' and "EXTPCT" = '0' and "USER#" = '44' and "LISTS" = '0' and "GROUPS" = '0' and "BITMAPRANGES" = '0' and "CACHEHINT" = '0' and "SCANHINT" = '0' and "HWMINCR" = '1247473' and "SPARE1" = '131329' and "SPARE2" IS NULL and ROWID = 'AAAAAIAABAAADxHAAY';
7624441975 7624441975 20060419 165120 20060419 165120 COMMIT commit;
7624441977 20060419 165127 START set transaction read write;
7624441977 20060419 165127 INSERT insert into "YJAM"."T"("A") values ('1');
7624441979 20060419 165133 INSERT insert into "YJAM"."T"("A") values ('2');
7624442016 7624442016 20060419 165322 20060419 165322 COMMIT commit;
7624442021 20060419 165334 START set transaction read write;
7624442021 20060419 165334 INSERT insert into "YJAM"."T"("A") values ('3');
7624442025 7624442025 20060419 165341 20060419 165341 COMMIT commit; (I don't know if the formatting will be OK since it's a SQL Developer copy/pase and I don't have a clear formatted output there anyway)
Field 2 is the "CSCN" which I think is the Commit SCN, since it appears only on commit.
So now, I can only agree with you Mark, that the transaction SCN is actually defined when the transaction ends. But I still think that for transaction read concistency, the SCN used through the ransaction is the one of the transaction start (START - set transaction read write).
Regards,
Yoann. -
Been reading manuals, I have few question to clarify about rollback segments ( Lets leave undo tablespace and automatic undo management aside )
1) Rollback segments can be created in a tablespace - is there a max size/limit which could be specified for a rollback segment to use within a tablespace? - From reading manuals, the storage clause doesnt mention about max size/limt for a rollback segment; is it possible for rollback segment to fill-up tablespace (ummm due to some wired query[read consistency]/transaction) ?
2) We can create a separate rollback tablespace and have multiple rollback segments.
If there are 3 user tablespaces (T1/T2/T3), 1 rollback tablespace (RT).
- I create 1 rollback segment in tablespace T1, T2, T3
- I create 2 rollback segments in rollback tablespace RT
A user with "default tablespace T1" when running a transaction, which rollback segment will be used by this user (when rollback segment is not explicitly specified)?
Oracle-Studentuser11359766 wrote:
Will the transaction spill over to the second rollback segment (i.e start using the 2nd rollback segment which is available and not being used by any other active transaction) or oracle will return an error since the first rollback segment assigned is filled up and the transaction is still active?This will be applied to both SMU and MMU.
From the same link above,
http://download.oracle.com/docs/cd/B10501_01/server.920/a96524/b_deprec.htm#634941
For the duration of a transaction, the associated user process writes rollback information only to the assigned rollback segment.I hope its self explanatory that the transaction can't roll over to any other roll back segment once its own gets out of space. In teh case of SMU also, if the undo datafile can't grow, your transaction would be stopped.
HTH
Aman.... -
SYSTEM tablespace rollback segment
Hi, i had taken a tablespace offline. so the active transactions data will go to SYSTEM rollback segment.
SYSTEM tablespace will use this rollback segments for transactions instead of undo. am i right?
now i dropped the tablespace. so how much time the data which is there in system rollback segments exists? will that data will be overrided because of other transactions on system tablespace?(think that i don't require that tablespace so i dropped it)
thanks in advanceplease anybody post the answer
-
ROLLBACK SEGMENT CONTENTION 점검
제품 : ORACLE SERVER
작성날짜 : 1997-01-21
ROLLBACK SEGMENT CONTENTION 점검
================================
롤백 세그먼트는 트랜잭션의 before image 를 저장하기 위해 사용되어진다.
사용되어지는 롤백 세그먼트 양은 수행되는 operation의 특성이나 변화된 데이타
블럭에 의존한다.
각 트랜젝션은 롤백 관련 데이타를 writing 하기위해 가장 먼저 롤백 세그먼트
헤더에 있는 트랜젝션 테이블을 액세스하고 트랜잭션 테이블에 slot 을 얻는다.
이것은 동시에 update 되는 데이타를 write 하기 위해 테이블에 순간적인 Latch를
필요로 한다.
If the database is update intensive and has a small number of rollback segments,
user transactions will wait on the latch to access the transaction table.
A large number of rollback segments on a query intensive database will
result in wastage of space.
The following statistics shows interesting information on the rollback
segments.
It is generated from the view v$rollstat.
Before : create table stats$begin_roll as
select rownum undo#, rssize, gets, waits, writes
from v$rollstat;
After : create table stats$end_roll as
select rownum undo#, rssize, gets, waits, writes
from v$rollstat;
select e.gets - b.gets trans_tbl_gets, e.waits - b.waits trans_tbl_waits,
e.writes - b.writes undo_bytes_written,
e.rssize segment_size_bytes
from stats$begin_roll b, stats$end_roll e
where e.undo# = b.undo#;
Included below is the statistics collected for this section:
TRANS_TBL_GETS TRANS_TBL_WAITS UNDO_BYTES_WRITTEN SEGMENT_SIZE_BYTES
270 0 0 290016
2742 0 441585 4025986
614 0 32685 1508486
591 0 37831 1508486
In the above output, the waits on transaction table are zero.
If the ratio of Trans_tbl_waits to Trans_tbl_gets is greater than 5%,
additional rollback segments should be added to the database.
In general, rollback segments should be the same size and created with
a large number of small extents.
Occasionally, large transactions may enlarge rollback segments.
The database administrator should periodically verify this and
recreate them with equal extents.I don't believe that a problem in your rollback segment can corrupt your backups, for checking if you have contention in the rollback segments you can run this query and review the results:
select class, count from v$waitstat where class like 'undo%';
These values should never be high
Hope this helps
Cynthia Pulido
Monterrey, Mexico -
One sytem rollback segment though AUM
Hello guys,
i know from oracle documentation and experience that there exists one rollback segment in system until the initial installation... but why?
Why can oracle not use the undo tablespace for this rollback segment if i use AUM? Can i delete this one or is it necessary after the installation too?
Maybe someone of you has an explanation for that.
Thanks and Regards
StefanHi Dim,
no... if you have a closer look... you will see one rollback segment in system ... though if you are using Automatic Undo Mangagment (UNDO Tablespace).
As i see in your profile... you are german too... have a closer look at this document:
-> http://www.ordix.de/ORDIXNews/4_2002/db_2.html
Auch im automatischen Modus des UNDO Managements befindet sich im SYSTEM Tablespace ein Rollback Segment, welches beim Erstellen der Datenbank erzeugt wirdThere is described that also one segment exists (always!) ... but why?
Regards
Stefan -
Is "SET TRANSACTION USE ROLLBACK SEGMENT" only a hint
I have two users, one makes some inserts in a table.
The other makes a select which visits many rows.
I have a big rollback-segment.
To ensure, both users use this rollback-segment I created a logon-trigger:
CREATE OR REPLACE TRIGGER a_logon AFTER LOGON
ON DATABASE
WHEN ( USER IN ( 'SCOTT', 'BOB' ) )
BEGIN
SET TRANSACTION USE ROLLBACK SEGMENT rbs_big;
END;
But I still get "snapshot to old" messages from the select, which contains the name off an other rollback-segment in the message.
The trigger really fires, i tested it by adding an insert-statement to a log-table.
What`s wrong ?The set transaction use rollback segment lasts only until you commit or rollback first time and all other transactions in that session will not be forced to that rbs anymore. Other possible solution could be that other users are accessing same tables / updating them so those sessions can't keep the read consistent image available anymore for your sessions.
-
Set Transaction Use Rollback segment
Hi everybody. Does It make sense issue a "set transaction use rollback" for a single query that do not update, insert or delete. The trouble is that I get e "SnapShot too Old" for a query that just do a query.
Thanks!No, If you are not making any modifications then you do not generate rollback (or even a transaction to my knowledge). The SNAPSHOT TOO OLD is because a different session has run through the rollback for the read consistent view you need (either because someone made changes to a table you are reading or from delayed block cleanout). Delayed block cleanout is a pretty complicated scenario so I'll leave it to the Oracle documentation to explain that. Just be aware that even if nobody has made changes to the table since you started your query you can still get SNAPSHOT TOO OLD. Thankfully, 9i helps elleviate this somewhat with the introduction of UNDO TABLESPACES.
Richard -
Rollback segment for set transaction
there is way that i can setup a rollback segment for a spacific user or specific transction.
ALTER ROLLBACK SEGMENT big_rbs ONLINE;
SET TRANSACTION USE ROLLBACK SEGMENT big_rbs;
sql .....
commit;
ALTER ROLLBACK SEGMENT big_rbs OFFLINE;
the sql is going for about hour, i was woundering during that time can some else use this rollback segment. i just want this rbs to this user, how i can do that.
thanksI guess i didn't clearify well. let say i created a rbs for specific tranction. before this transaction is start it will turn on this rbs and once this transaction is completed, it issue the command commit, and bring it back to this rbs offline. the question is durning this transaction does any other transaction can come and use this rbs instead of we have lot of other rbs.
I hope that you get my point.
Maybe you are looking for
-
I 1st installed my ipod onto my laptop but that has since broke and I have tried to install it onto my pc and it wont synch with itunes. I cant get into my music list either. Help pleae thanks
-
Most efficient way to loop through similarly named fields?
Hi, I have a 5 page document with each page containing appx. 50 similarly named fields. E.g. Viol1Num, Viol2Num, Vio3Num ... Viol50Num. I am looking for an efficient way of programming a loop to look at each field in Javascript so I can do some m
-
hi , I am using this patch p8431482_R12_GENERIC.zip for OAF page development. Previously pages in our application was working fine in jdeveloper. Now SSO is enabled to our Apps pages.from then onwards im unable to run pages in jdeveloper. can anyone
-
Insert Nodes into Hierarchy via ABAP Program
Hello, I want to create ABAP program to insert nodes into a hierarchy. I got a class CL_RSSH_HIERMAINTAIN_FRONT with method INSERT_NODES_HIERARCHY . But the method is private and cannot be used in the ABAP call. I also don't want a pop up which asks
-
Help Please - Pdf shows/ reads some white pages when opened by some people
I have made a pdf book of my artworks ( on a mac) and have a major problem. When I send it out, some people are able to read everything but others get a couple of white blank pages when they view the pdf online or download it or sometimes only either