ITPub博客

首页 > 数据库 > Oracle > [20240929]记录测试中的错误.txt

[20240929]记录测试中的错误.txt

原创 Oracle 作者:lfree 时间:2024-10-01 21:04:29 0 删除 编辑

[20240929]记录测试中的错误.txt

--//注意访问X$表,千万不要以sys用户PDB方式登录查询,可能根本没有结果。
--//我个人并不喜欢pdb,可以oracle肯定强推pdb,现在版本无法安装非pdb环境的。记录测试过程:

1.环境:
SCOTT@book01p> @ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 21.0.0.0.0
BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

SYS@book> select PDB_ID,PDB_NAME,CON_UID from dba_pdbs;
    PDB_ID PDB_NAME                          CON_UID
---------- ------------------------------ ----------
         3 BOOK01P                        1073777561
         2 PDB$SEED                       2763294012

SCOTT@book01p> select * from dept where deptno=20;
    DEPTNO DNAME                          LOC
---------- ------------------------------ -------------
        20 RESEARCH                       DALLAS

SCOTT@book01p> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
  95129850 80baj2c2ur47u            0     102650      2852011669   5ab90fa  2024-09-29 15:56:25    16777216

2.测试:
--//sys用户登录pdb=book01。
SYS@book01p> @ sharepool/shp4 80baj2c2ur47u 0
HANDLE_TYPE            KGLHDADR         KGLHDPAR         C40                                        KGLHDLMD   KGLHDPMD   KGLHDIVC KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
---------------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
child handle address   0000000066279C20 000000006627A380 select * from dept where deptno=20                0          0          0 000000006630D7A0 0000000066220868       8080      20224       3299     31603      31603   95129850 80baj2c2ur47u          0
parent handle address  000000006627A380 000000006627A380 select * from dept where deptno=20                0          0          0 000000006627A1C0 00                     4064          0          0      4064       4064   95129850 80baj2c2ur47u      65535

SYS@book01p> @ fchaz 000000006627A1C0
no rows selected

SYS@book01p> select count(*) from x$ksmsp ;
  COUNT(*)
----------
         0

SYS@book01p> select * from x$ksmsp ;
no rows selected
--//当时真的吓了我一跳,换一句话以pdb登录查询x$ksmsp根本没有记录。

--//sys用户登录sid=book。
SYS@book>  @ fchaz 000000006627A1C0
LOC KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_BEGIN   KSMCHPTR_END+1
--- ---------------- ---------- ---------- ---------------- ---------- -------- ---------- ---------------- ---------------- -----------------
SGA 000000006627A150          1          1 KGLDA                   512 freeabl           0 00               000000006627A150 000000006627A350

SYS@book> select count(*) from x$ksmsp ;
  COUNT(*)
----------
    146404

--//非常容易出现歧义性。
--//有点不理解的是x$kglob访问没有这个问题,而x$ksmsp不行。

--//sys用户登录pdb=book01。
SYS@book01p> select count(*) from x$kglob ;
  COUNT(*)
----------
      3350

--//sys用户登录sid=book。
SYS@book> select count(*) from x$kglob ;
COUNT(*)
----------
     11092


3.继续分析:
--//sys用户登录pdb=book01。
SYS@book01p> select count(*) from x$ksmsp ;

  COUNT(*)
----------
         0

SYS@book01p> @ dpc '' '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  7x84z21dmcfsv, child number 0
-------------------------------------
select count(*) from x$ksmsp
Plan hash value: 1489174925
-------------------------------------------------------------------
| Id  | Operation         | Name    | E-Rows |E-Bytes| Cost (%CPU)|
-------------------------------------------------------------------
|   0 | SELECT STATEMENT  |         |        |       |     1 (100)|
|   1 |  SORT AGGREGATE   |         |      1 |    13 |            |
|*  2 |   FIXED TABLE FULL| X$KSMSP |      1 |    13 |     0   (0)|
-------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$F5BB74E1
   2 - SEL$F5BB74E1 / "X$KSMSP"@"SEL$2"
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - filter(("CON_ID"=0 OR "CON_ID"=3))
Note
-----
   - Warning: basic plan statistics not available. These are only collected when:
       * hint 'gather_plan_statistics' is used for the statement or
       * parameter 'statistics_level' is set to 'ALL', at session or system level
31 rows selected.

--//sys用户登录sid=book。
SYS@book> select count(*) from x$ksmsp ;

  COUNT(*)
----------
    171056

SYS@book> @ dpc '' '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  7x84z21dmcfsv, child number 1
-------------------------------------
select count(*) from x$ksmsp
Plan hash value: 1489174925
----------------------------------------------------------------------
| Id  | Operation         | Name    | E-Rows | Cost (%CPU)| E-Time   |
----------------------------------------------------------------------
|   0 | SELECT STATEMENT  |         |        |    17 (100)|          |
|   1 |  SORT AGGREGATE   |         |      1 |            |          |
|   2 |   FIXED TABLE FULL| X$KSMSP |    187K|    17 (100)| 00:00:01 |
----------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1
   2 - SEL$1 / "X$KSMSP"@"SEL$1"
Note
-----
   - Warning: basic plan statistics not available. These are only collected when:
       * hint 'gather_plan_statistics' is used for the statement or
       * parameter 'statistics_level' is set to 'ALL', at session or system level

--//前者加入过滤条件filter(("CON_ID"=0 OR "CON_ID"=3))。

SELECT x$ksmsp.*,x$ksmsp.ksmchptr ksmchptr_begin,TO_CHAR(TO_NUMBER(KSMCHPTR,'XXXXXXXXXXXXXXXX') + KSMCHSIZ ,'FM0XXXXXXXXXXXXXXX') "KSMCHPTR_END+1" FROM x$ksmsp WHERE to_number(substr('000000006627A1C0', instr(lower('000000006627A1C0'), 'x')+1) ,'XXXXXXXXXXXXXXXX') between to_number(ksmchptr,'XXXXXXXXXXXXXXXX') and to_number(ksmchptr,'XXXXXXXXXXXXXXXX') + ksmchsiz - 1;
ADDR                   INDX    INST_ID     CON_ID   KSMCHIDX   KSMCHDUR KSMCHCOM         KSMCHPTR           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_BEGIN   KSMCHPTR_END+1    HEAP_DESC
---------------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------------- ---------- -------- ---------- ---------------- ---------------- ----------------- -------------------------
00007F399E35A4B0     149585          1          1          1          1 KGLDA            000000006627A150        512 freeabl           0 00               000000006627A150 000000006627A350

--//而这里记录CON_ID=1,fchaz脚本查询不到就很正常了。
SYS@book> select count(*),CON_ID from x$ksmsp group by CON_ID;
  COUNT(*)     CON_ID
---------- ----------
    188457          1
--//x$ksmsp记录的全部都是CON_ID=1,感觉这个是不是oracle的bug。

SELECT c.OBJ#
      ,c.CON_ID#
      ,c.DBID
      ,c.CON_UID
      ,c.status
      ,o.name
  FROM sys.container$ c, sys.obj$ o
 WHERE o.obj# = c.obj# AND c.status <> 4;

      OBJ#    CON_ID#       DBID    CON_UID STATUS NAME
---------- ---------- ---------- ---------- ------ ------------------------------
       267          1 1617337831          1      2 CDB$ROOT
     76661          3 1073777561 1073777561      2 BOOK01P
     76089          2 2763294012 2763294012      2 PDB$SEED
 
--//CON_ID#=1对应的是CDB$ROOT,总之以后工作中注意。
--//不要以sys用户PDB方式登录查询,可能根本没有结果。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3035025/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7970229