【赛迪网-it技术报道】通过db查询的2个数据库间,scn会被同步:
测试的具体过程:
1.首先获得本地的scn
[oracle@jumper oracle]$ sqlplus "/ as sysdba"
sql*plus: release 9.2.0.4.0 - production on tue nov 7 21:07:56 2006
copyright (c) 1982, 2002, oracle corporation. all rights reserved.
connected to:
oracle9i enterprise edition release 9.2.0.4.0 - production
with the partitioning option
jserver release 9.2.0.4.0 - production
sql> select dbms_flashback.get_system_change_number scn from dual;
scn
----------
5287824
|
2.通过db link进行scn查询
sql> set serveroutput on
sql> set feedback off
sql> declare
2 r_gname varchar2(40);
3 l_gname varchar2(40);
4 begin
5 execute immediate
6 'select global_name from global_name@hsbill' into r_gname;
7 dbms_output.put_line('gname of remote:'||r_gname);
8 select global_name into l_gname from global_name;
9 dbms_output.put_line('gname of locald:'||l_gname);
10 end;
11 /
gname of remote:hsbill.hurray.com.cn
gname of locald:eygle
sql> declare 2 r_scn number; 3 l_scn
number; 4 begin 5 execute immediate 6 'select
dbms_flashback.get_system_change_number@hsbill from dual'
into r_scn; 7 dbms_output.put_line
('scn of remote:'||r_scn); 8 select dbms_flashback.
get_system_change_number into l_scn from dual; 9
dbms_output.put_line('scn of locald:'||l_scn); 10
end; 11 /scn of remote:18992092078scn of locald:18992092078
|
大家可以看到,通过db link查询后,两个数据库的scn被同步。
手工执行checkpoint,此时可以发现数据库的checkpoint scn被增进:
sql> col scn for 999999999
sql> select file#,checkpoint_change# scn from v$datafile;
file# scn
---------- -----------------
1 5287605
2 5287605
3 5287605
4 5287605
sql> alter system checkpoint;
system altered.
sql> select file#,checkpoint_change# scn from v$datafile;
file# scn
---------- -----------------
1 18992092162
2 18992092162
3 18992092162
4 18992092162
|
以上的这种机制其实是为了满足分布式事务(distributed transaction)的需要,只不过在此处是通过db link被触发的。