更新时间:2022-09-11 15:22:45
[20151201]Manual Remastering of Objects.txt
--rac下对象存在master问题,如果一个实例下经常访问这个对象,oracle会让这个实例重新remaster 这个对象。
--简单的测试如何实现:
1.测试环境建立:
SCOTT@xxxx1> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SCOTT@xxxx1> select * from dba_objects where owner='SCOTT' and object_name='EMP';
OWNER OBJECT_NAME SUBOBJECT_ OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS T G S NAMESPACE EDITION_NAME
------ -------------------- ---------- ---------- -------------- ------------------- ------------------- ------------------- ------------------- ------- - - - ---------- --------------
SCOTT EMP 87108 87108 TABLE 2013-08-24 12:04:21 2013-08-24 12:04:21 2013-08-24:12:04:21 VALID N N N 1
SCOTT@xxxx1> select * from GV$GCSPFMASTER_INFO where data_object_id=87108;
no rows selected
--现在没有人访问过这张表。
--执行如下语句多次 select * from scott.emp;
SCOTT@xxxx1> select * from GV$GCSPFMASTER_INFO where data_object_id=87108;
no rows selected
--估计要等1会。
--实际上我通过脚本执行了上千次,通过那个视图来观察现在是那个实例remaster呢?
2.使用oradebug执行Manual Remastering of Objects。
SYS@xxxx1> oradebug setmypid
Statement processed.
SYS@xxxx1> oradebug lkdebug -m pkey 87108
Statement processed.
--注意这里使用的是data_object_id.
SYS@xxxx1> select * from GV$GCSPFMASTER_INFO where data_object_id=87108;
INST_ID FILE_ID DATA_OBJECT_ID GC_MASTERIN CURRENT_MASTER PREVIOUS_MASTER REMASTER_CNT
---------- ---------- -------------- ----------- -------------- --------------- ------------
1 0 87108 Affinity 0 32767 1
2 0 87108 Affinity 0 32767 1
--CURRENT_MASTER=0 表示是实例1.先前是PREVIOUS_MASTER=32767,表示没有master。
3.现在手工切到实例2看看:
SYS@xxxx2>oradebug setmypid
SYS@xxxx2>oradebug lkdebug -m pkey 87108
SYS@xxxx2> select * from GV$GCSPFMASTER_INFO where data_object_id=87108;
INST_ID FILE_ID DATA_OBJECT_ID GC_MASTERIN CURRENT_MASTER PREVIOUS_MASTER REMASTER_CNT
---------- ---------- -------------- ----------- -------------- --------------- ------------
2 0 87108 Affinity 1 0 2
1 0 87108 Affinity 1 0 2
--可以发现CURRENT_MASTER=1,表示是实例2.并且REMASTER_CNT从1=>2.
4.补充1点:
SYS@xxxx1> ALTER TABLE SCOTT.T_SQL_PROFILE MOVE TABLESPACE USERS;
Table altered.
SYS@xxxx1> select * from dba_objects where owner='SCOTT' and object_name='T_SQL_PROFILE';
OWNER OBJECT_NAME SUBOBJECT_ OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS T G S NAMESPACE EDITION_NAME
------ -------------------- ---------- ---------- -------------- ------------------- ------------------- ------------------- ------------------- ------- - - - ---------- ------------------------------
SCOTT T_SQL_PROFILE 112023 112029 TABLE 2015-12-01 08:59:41 2015-12-01 10:07:08 2015-12-01:08:59:41 VALID N N N 1
--注意现在OBJECT_ID,DATA_OBJECT_ID不等。OBJECT_ID=112023, DATA_OBJECT_ID=112029.
SYS@xxxx1> select * from GV$GCSPFMASTER_INFO where data_object_id=112023;
INST_ID FILE_ID DATA_OBJECT_ID GC_MASTERIN CURRENT_MASTER PREVIOUS_MASTER REMASTER_CNT
---------- ---------- -------------- ----------- -------------- --------------- ------------
1 0 112023 Affinity 0 1 5
2 0 112023 Affinity 0 1 5
SYS@xxxx1> select * from GV$GCSPFMASTER_INFO where data_object_id=112029;
no rows selected
--以上是我前面做的多次。
SYS@xxxx1> oradebug lkdebug -m pkey 112029
Statement processed.
SYS@xxxx1> select * from GV$GCSPFMASTER_INFO where data_object_id=112029;
INST_ID FILE_ID DATA_OBJECT_ID GC_MASTERIN CURRENT_MASTER PREVIOUS_MASTER REMASTER_CNT
---------- ---------- -------------- ----------- -------------- --------------- ------------
1 0 112029 Affinity 32767 32767 0
2 0 112029 Affinity 32767 32767 0
--再重复1次:
SYS@xxxx1> oradebug lkdebug -m pkey 112029
Statement processed.
SYS@xxxx1> select * from GV$GCSPFMASTER_INFO where data_object_id=112029;
INST_ID FILE_ID DATA_OBJECT_ID GC_MASTERIN CURRENT_MASTER PREVIOUS_MASTER REMASTER_CNT
---------- ---------- -------------- ----------- -------------- --------------- ------------
1 0 112029 Affinity 0 32767 1
2 0 112029 Affinity 0 32767 1
--再在实例2执行:
SYS@xxxx2> oradebug lkdebug -m pkey 112029
Statement processed.
SYS@xxxx2> select * from GV$GCSPFMASTER_INFO where data_object_id=112029;
INST_ID FILE_ID DATA_OBJECT_ID GC_MASTERIN CURRENT_MASTER PREVIOUS_MASTER REMASTER_CNT
---------- ---------- -------------- ----------- -------------- --------------- ------------
2 0 112029 Affinity 1 0 2
1 0 112029 Affinity 1 0 2