版权声明:所有文章禁止转载但是均可在生产中使用提高效率 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中执行这么一句
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后
居然半天还在。
暂且到这里吧