【跟我学oracle18c】第十八天:EXTENDED DATA-LINKED专项测试中发现的oracle18c幽灵数据

版权声明:所有文章禁止转载但是均可在生产中使用提高效率 https://blog.csdn.net/viviliving/article/details/84314988

bug描述:

1、pdb中插入与root中字段值相同的数据,pdb会复制一份所有root中的数据copy,从con_id可以看出属于自己了

,然后你会发现,这部分数据是天外来客,

你怎么删除,在root都可以查到,即使root和pdbs内部都执行了 delete  saas_sales_adm.zipcodes_edt;

2、这个问题目前只能通过在pdb内执行ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC;

解决

问题再现:

一、Application root下查询

SQL> select * from saas_sales_adm.zipcodes_edt;
CODE  COUNTRY_ID REGION
----- ---------- ----------

SQL> select * from containers(zipcodes_edt);
CODE  COUNTRY_ID REGION         CON_ID
----- ---------- ---------- ----------

SQL> 

二、Application root下插入

SQL> INSERT INTO zipcodes_edt VALUES ('08820','1','East');
1 row inserted
SQL> INSERT INTO zipcodes_edt VALUES ('10005','1','East');
1 row inserted
SQL> INSERT INTO zipcodes_edt VALUES ('44332','1','North');
1 row inserted
SQL> INSERT INTO zipcodes_edt VALUES ('94065','1','West');
1 row inserted
SQL> INSERT INTO zipcodes_edt VALUES ('73301','1','South');
1 row inserted
SQL> COMMIT;
Commit complete

SQL> select * from saas_sales_adm.zipcodes_edt;
CODE  COUNTRY_ID REGION
----- ---------- ----------
08820          1 East
10005          1 East
44332          1 North
94065          1 West
73301          1 South

SQL>  select * from containers(zipcodes_edt);
CODE  COUNTRY_ID REGION         CON_ID
----- ---------- ---------- ----------
08820          1 East                6
10005          1 East                6
44332          1 North               6
94065          1 West                6
73301          1 South               6


三、pdb下查询

SQL> select * from saas_sales_adm.zipcodes_edt;
CODE  COUNTRY_ID REGION
----- ---------- ----------

SQL> select * from saas_sales_adm.zipcodes_edt;
CODE  COUNTRY_ID REGION
----- ---------- ----------
08820          1 East
10005          1 East
44332          1 North
94065          1 West
73301          1 South

截至目前一切都符合预期


四、然后你在pdb中执行这么一句

扫描二维码关注公众号,回复: 4283588 查看本文章
INSERT INTO saas_sales_adm.zipcodes_edt VALUES ('73301','1','South');

SQL> select * from saas_sales_adm.zipcodes_edt;
CODE  COUNTRY_ID REGION
----- ---------- ----------
08820          1 East
10005          1 East
44332          1 North
94065          1 West
73301          1 South
73301          1 South
6 rows selected


Application root下查询会发现copy了

SQL>  select * from containers(zipcodes_edt);
CODE  COUNTRY_ID REGION         CON_ID
----- ---------- ---------- ----------
08820          1 East                6
10005          1 East                6
44332          1 North               6
94065          1 West                6
73301          1 South               6
08820          1 East                9
10005          1 East                9
44332          1 North               9
94065          1 West                9
73301          1 South               9
73301          1 South               9
11 rows selected

五、我们pdb下尝试删除该条

SQL> delete saas_sales_adm.zipcodes_edt where code='73301';
1 row deleted

SQL> select * from saas_sales_adm.zipcodes_edt;
CODE  COUNTRY_ID REGION
----- ---------- ----------
08820          1 East
10005          1 East
44332          1 North
94065          1 West
73301          1 South
貌似删除的自己插入的,未动root下的

Application root下查询会发现还剩下copy的

SQL>  select * from containers(zipcodes_edt);
CODE  COUNTRY_ID REGION         CON_ID
----- ---------- ---------- ----------
08820          1 East                6
10005          1 East                6
44332          1 North               6
94065          1 West                6
73301          1 South               6
08820          1 East                9
10005          1 East                9
44332          1 North               9
94065          1 West                9
73301          1 South               9
10 rows selected

六、pdb下删除所有

SQL> delete  saas_sales_adm.zipcodes_edt;
0 rows deleted

SQL> select * from saas_sales_adm.zipcodes_edt;
CODE  COUNTRY_ID REGION
----- ---------- ----------

SQL> delete  saas_sales_adm.zipcodes_edt;
5 rows deleted

SQL>  select * from containers(zipcodes_edt);
CODE  COUNTRY_ID REGION         CON_ID
----- ---------- ---------- ----------
08820          1 East                9
10005          1 East                9
44332          1 North               9
94065          1 West                9
73301          1 South               9

你会发现这些顽皮的家伙幽灵般搞不掉了,pdb下执行SYNC

SQL> ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC;
Done

Application root下查询发现消失了

SQL>  select * from containers(zipcodes_edt);
CODE  COUNTRY_ID REGION         CON_ID
----- ---------- ---------- ----------

SQL> 

后记:

1、插入某一个字段相同,其他字段不同的也会出现这种幽灵现象,与数据重复与否无关

2、而且发现在root下插入的数据,在pdb内部查询,con_id怎么显示的是自己,这不应该,而且发现有时间select * from containers(saas_sales_adm.zipcodes_edt);的结果直接混乱这,就感觉是shared_pool里混乱了一样,数据有时间sync后

居然半天还在。

暂且到这里吧


 

猜你喜欢

转载自blog.csdn.net/viviliving/article/details/84314988