C’est dommage, je n’ai pas relevé où j’ai lu ça: « RAC gère plusieurs copies du même bloc dans son cache global ! ». Bien sur et alors ? c’est vrai d’une instance non cluster aussi. Voici un exemple pour illustrer ce point:
show parameter cluster_database
NAME TYPE VALUE
-------------------------- ------- -----
cluster_database boolean FALSE
cluster_database_instances integer 1
create table t(c number)
tablespace users;
insert into t values (1);
commit;
select rowid, c
from t;
ROWID C
------------------ -
AAADKPAAEAAAAEGAAA 1
set serveroutput on
declare
v_rowid_type number;
v_object_number number;
v_relative_fno number;
v_block_number number;
v_row_number number;
v_rowid varchar2(30):='&rowid';
begin
dbms_rowid.rowid_info(v_rowid,
v_rowid_type,
v_object_number,
v_relative_fno,
v_block_number,
v_row_number);
dbms_output.put_line('RowID : '||v_rowid);
dbms_output.put_line('Type : '||v_rowid_type);
dbms_output.put_line('Object: '||v_object_number);
dbms_output.put_line('FNO : '||v_relative_fno);
dbms_output.put_line('Block : '||v_block_number);
dbms_output.put_line('RowNum: '||v_row_number);
end;
/
Enter value for rowid: AAADKPAAEAAAAEGAAA
RowID : AAADKPAAEAAAAEGAAA
Type : 1
Object: 12943
FNO : 4
Block : 262
RowNum: 0
update t set c=2;
select FILE#,BLOCK#,STATUS, DIRTY,DIRECT
from v$bh
where FILE#=4
and BLOCK#=262;
FILE# BLOCK# STATUS D D
----- ------ ------ - -
4 262 cr N N
4 262 xcur Y N
Mais vous vous dites peut-être que un bloc « consistent read » et un bloc « current » c’est logique? effectuer des modifications dans d’autres session ou manipulez « set transaction read only » et le hint « parallel » et vous obtiendrez bientot:
select FILE#,BLOCK#,STATUS, DIRTY,DIRECT
from v$bh
where FILE#=4
and BLOCK#=262;
FILE# BLOCK# STATUS D D
----- ------ ------ - -
4 262 cr N N
4 262 cr N N
4 262 xcur Y N
Bon… nettoyez:
drop table t purge;
FILE# BLOCK# STATUS D D
----- ------ ------ - -
4 262 free N N
4 262 free N N
4 262 free N N