2013-06-04 103 views
0

我使用ORACLE設置RAC集羣。ORACLE選擇缺少行

我的問題是,當DB有問題(仍然不知道真正的原因)我的SQL SELECT缺乏行

例如:

select * 
from student_detail 
where student_id = 1231 

應該返回學生的10個數據具有ID 1231,但在這案例只是返回6行

任何人都可以幫助我理解這個問題!

+0

根據是否返回所有行,您似乎正在定義數據庫有問題。如果還有其他症狀,那麼你應該告訴我們它是什麼。 –

+0

'student_detail'是一個視圖嗎?你有VPD嗎? –

+0

查詢正常。還有其他的數據存儲在你期望收到的student_detail中。也許你連接到錯誤的數據庫實例? – BlueConga

回答

2

作爲一般觀察,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使用名爲Global Cache Service Process的機制將更改的數據傳輸到不同的節點。您可能在此過程中遇到了問題。與您的DBA交談並讓他們進行調查。

0

也許,數據應該是錯誤的。 例如,如果user_id的數據是'1231',那沒有錯,但是如果數據留下空位 (如'1231'),則看不到數據。

'1231','1231'也不能打印出來。 解決方案是當你插入一些數據,使用功能'修剪'或'替換'... 修剪只是刪除左側的差距。