[ORACLE] v$rollstat vs. dba_rollback_segs

Hallo Frank,

im Internet (http://www.dbatoolbox.com/WP2001/beginners/DBA_Check…) habe ich gelesen, dass die Ermittlung der Stati der Rollback Segmente nicht so einfach ist, denn „That view’s STATUS field (gemeint ist dba_rollback_segs) is less accurate than v$rollstat…“.

Daher habe ich folgendes Skript zum Vergleich der beiden Views geschrieben. In meiner Instance kann ich derzeit keinen Unterschied feststellen. Aber vielleicht könnt ihr es ja bei Gelegenheit mal testen, um die oben zitierte Aussage bewerten zu können.

Vielen Dank dafür.

Gruß der Janus.

SELECT c.segment\_name AS "Segment Name"
 ,b.status AS "v$rollstat"
 ,c.status AS "sys.dba\_rollback\_segs"
FROM v$rollname a
 ,v$rollstat b
 ,sys.dba\_rollback\_segs c
WHERE a.usn = b.usn 
 AND c.segment\_name = a.name(+)
/

Hi Janus,
ich hab Deine Abfrage aus Jux durchgeführt. Bei 13 unterschiedlichen Instanzen verschiedener Natur ergab sich keine Differenz.

Weißt Du Genaueres über den beschiebenen Unterschied? Den kannte ich auch nicht.

Gruß

J.

Hallo José,

Über dba_rollback_segs schriebt der liebe Mann:

That view’s STATUS field […] lacks the PENDING OFFLINE and FULL statuses, showing them as OFFLINE and ONLINE respectively.

Zumindest das PENDING OFFLINE/ONLINE Szenario ist relativ leicht nachzuvollziehen: Man nehme eine Instance, führe irgendein Statement aus, das auch wirklich Daten verändert (nicht committen oder rollbacken! [
select r.name RB_SEGMENT,
rs.status STATUS,
nvl(s.username, ‚NO TRANS‘) DB_USER,
s.osuser OS_USER,
s.terminal TERMINAL,
trunc(d.bytes/1024)||’ K’ SIZE_K,
trunc(DECODE(sign((d.max_extents-d.extents)*d.next_extent-sum(f.bytes)),1,sum(f.bytes),(d.max_extents-d.extents)*d.next_extent)/1024)||’ K’ AVAILABLE_SPACE
from v$lock l, v$session s, v$rollname r, v$rollstat rs, dba_segments d, dba_free_space f
where l.sid=s.sid(+)
and trunc(l.id1/65536) = r.usn
and l.type = ‚TX‘
and l.lmode = 6
and d.segment_name = r.name
and d.segment_type=‚ROLLBACK‘
and f.tablespace_name=d.tablespace_name
and rs.usn=r.usn
group by
r.name, rs.status, s.username, s.osuser, s.terminal, d.bytes, d.max_extents, d.extents, d.next_extent
order by
r.name;

setze dieses Statement mittels

alter rollback segment [NAME] offline;

auf offline (aus einer anderen Session, DDL statement!) und prüfe dann den Unterschied noch einmal.

Mit FULL wird’s allerdings etwas schwieriger, da finde ich auch kaum was in der Oracle-Doku dazu. Allerdings, wer Metalink Zugang hat, der möge sich Doc 257223.995 an, da versucht sich Oracle diesbezüglich rauszuwinden :wink:

Gruß,
TheBeast

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

(nicht committen oder rollbacken! [

Hi tomh,

Noch besser finde ich dann die Vergangenheitskonstruktionen. Up-ge-datet und ge-inserted (Kollege behauptet standhaft, daß das in-ge-sertet heißen muß) geht ja noch, roll-ge-backt oder ge-rollbackt ist kaum noch erträglich, aber ganz aus isses dann bei commit: ge-commitet? co-ge-mittet? mitgecomet? :wink:

Gruß,
TheBeast

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]