我使用 ORACLE 设置 RAC 集群。
我的问题是当数据库出现问题时(仍然不知道原因)我的 sql 选择缺少行
例子:
select *
from student_detail
where student_id = 1231
应该返回 10 行学生的 id 为 1231 的数据,但在这种情况下只返回 6 行
谁能帮我理解这个问题!
作为一般观察,Oracle SELECT 始终返回正确的行数。如果结果集与您的期望不符,则说明您的理解存在问题。
例如,您可能用student_id = 1231
. 如果查询只返回六行,你怎么知道应该有十行?可能没有目测那么简单……
select * from student_detail
order by student_id
...如果student_id
具有 varchar2 数据类型并且某些 ID 以杂散空格为后缀。像这样的查询将诊断该问题:
select student_id, count(*)
from student_detail
group by student_id
order by student_id
其他可能的原因?误导性观点?限制结果集的行级安全性?一些奇怪的客户端配置只显示前六行而不是整个集合?
你提到RAC。RAC 使用一种称为全局缓存服务进程的机制将更改的数据传输到不同的节点。您可能在此过程中遇到了故障。与您的 DBA 交谈并让他们进行调查。
也许,数据应该是错误的。比如user_id的数据是'1231',那没有错,但是如果数据留有'1231'这样的空隙,你就看不到数据了。
'1231'、'1231'也不能打印出来。解决方案是当您插入一些数据时,使用“修剪”或“替换”功能......修剪只是删除左边的间隙。