2017-01-10 154 views
0

我正在執行選擇查詢。當表的數量是10或更少時,10查詢執行正常。錯誤代碼SQLCODE:-964

select * from SERVEIT.ibasemaster, 
SERVEIT.ticket, 
SERVEIT.PSEUDOTICKETDETAILS, 
SERVEIT.ticketdetails, 
SERVEIT.obligationtypemaster, 
SERVEIT.STATUSMASTER; 

但是當表的數量增加超過10查詢不執行並給錯誤代碼"DB2 SQL Error: SQLCODE=-968, SQLSTATE=57011, SQLERRMC=null, DRIVER=4.21.29"。我已經搜索了這個問題,並且知道這是一個空間大小問題。 我已經增加了logproimary大小爲8和logsecond大小爲16,但這也不起作用。

+0

SQLCODE -968,按照手冊中的解釋,意味着數據庫文件系統已滿。正如其他人所提到的,您交叉連接超過10個表格可能需要大量的臨時空間。考慮重寫你的查詢。 – mustaccio

+0

@ mustaccio-你是對的。要麼我需要改變查詢,要麼我需要確保我的光盤中有數百GB的空間 –

回答

1

在下面的查詢

select * from SERVEIT.ibasemaster, 
       SERVEIT.ticket, 
       SERVEIT.PSEUDOTICKETDETAILS, 
       SERVEIT.ticketdetails, 
       SERVEIT.obligationtypemaster, 
       SERVEIT.STATUSMASTER; 

你正在做的是列出的六個表之間的交叉連接,因爲沒有ON條款,也沒有在WHERE子句中任何加盟條件。我的猜測是,當你打10個表時,結果集變得如此之大,以至於無法放入內存中,或者超過了DB2強加的內存限制。

如果你真的打算做一個交叉連接,那麼你唯一的選擇可能是以某種方式增加內存。但更好的解決方案是添加ON子句並限制連接結果集的大小。

+0

我應該增加哪種內存大小。我已經增加了logprimary和logsecond的大小。 –

+0

@manoj我在DB2中沒有足夠的專業知識來回答這個問題,但您可以從計算出10個表中有多少條記錄開始。你真的想要一個跨產品嗎? –

+0

我實際上已經創建了44列我需要的列的視圖,但是如果我無法運行10個表,我將如何運行44個表的腳本,關於增加事務日誌的任何想法? –

0

可能你有你的選擇條款的不同表的同一列,你必須有uniqu名進行的所有列到你選擇