且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

[20151201]Manual Remastering of Objects

更新时间: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