1
我在oracle上有三個用戶,他們有相同的表空間,當我運行下面的查詢時,我在執行查詢時遇到以下問題。而且在執行需要一個地獄很多時間:(運行oracle sql查詢加入約10個表時出現ORA-01652錯誤
ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
01652. 00000 - "unable to extend temp segment by %s in tablespace %s"
*Cause: Failed to allocate an extent of the required number of blocks for
a temporary segment in the tablespace indicated.
*Action: Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
files to the tablespace indicated.
查詢:
SELECT A.*
FROM LEA_AGREEMENT_DTL_RCL A,
nbfc_customer_m b,
db1.NBFC_PRODUCT_M c,
db1.LEA_INSTRUMENT_DTL e,
db1.LEA_LOANTYPE_M f,
db1.NBFC_BRANCH_M g,
ETRUPTI_CUST_AGRMNT_MAPPING h,
(SELECT A.caseid,
SUM (
CASE
WHEN b.chargecodeid = 82
AND A.ADVICETYPE = 'R'
THEN NVL (A.adviceamt, 0) - NVL (A.txnadjustedamt, 0) - NVL (A.amtinprocess, 0)
ELSE 0
END) AS preemioverdue,
SUM (
CASE
WHEN b.chargecodeid = 9
THEN NVL (A.adviceamt, 0) - NVL (A.txnadjustedamt, 0) - NVL (A.amtinprocess, 0)
ELSE 0
END) AS installmentoverdue,
SUM (
CASE
WHEN b.chargecodeid = 37
AND A.ADVICETYPE = 'P'
THEN NVL (A.adviceamt, 0) - NVL (A.txnadjustedamt, 0) - NVL (A.amtinprocess, 0)
ELSE 0
END) AS unadjustedamount,
SUM (
CASE
WHEN b.chargecodeid = 8
THEN NVL (A.adviceamt, 0) - NVL (A.txnadjustedamt, 0) - NVL (A.amtinprocess, 0)
ELSE 0
END) AS chequebounce,
SUM (
CASE
WHEN b.chargecodeid = 7
THEN NVL (A.adviceamt, 0) - NVL (A.txnadjustedamt, 0) - NVL (A.amtinprocess, 0)
ELSE 0
END) AS LPP,
SUM (
CASE
WHEN b.chargecodeid NOT IN (82,9)
AND A.ADVICETYPE = 'R'
AND A.BPTYPE = 'LS'
THEN NVL (A.adviceamt, 0) - NVL (A.txnadjustedamt, 0) - NVL (A.amtinprocess, 0)
ELSE 0
END) AS otheroverdue,
SUM (
CASE
WHEN A.ADVICETYPE = 'R'
THEN NVL (A.adviceamt, 0) - NVL (A.txnadjustedamt, 0) - NVL (A.amtinprocess, 0)
ELSE 0
END) AS netreceivable,
MAX (c.balancetenure) AS balancetenure
FROM db1.NBFC_TXN_ADVICE_DTL A,
db1.NBFC_CHARGES_M b,
ETRUPTI_CUST_AGRMNT_MAPPING d,
(SELECT x.AGREEMENTID,
COUNT (1) AS balancetenure,
TO_CHAR (SUM(NVL(PRINCOMP,0)),'999,999,999,999,999,900.00')
FROM db1.LEA_REPAYSCH_DTL x,
ETRUPTI_CUST_AGRMNT_MAPPING y
WHERE x.billflage = 'N'
AND X.ADVFLAG ='N'
AND x.agreementid = y.agreementid
AND y.user_id = :user_id
GROUP BY x.AGREEMENTID
) c
WHERE A.status = 'A'
AND A.chargeid = b.chargeid
AND A.CASEID =C.AGREEMENTID
AND c.agreementid = d.agreementid
AND d.user_id = :user_id
AND A.PTXNADVICEID IS NULL
GROUP BY A.caseid
) BALANCES,
(SELECT w.agreementid,
COUNT(1) AS baltenure,
TO_CHAR (SUM(NVL(w.PRINCOMP,0)),'999,999,999,999,999,900.00') AS principalcomp
FROM db1.LEA_REPAYSCH_DTL w,
ETRUPTI_CUST_AGRMNT_MAPPING z
WHERE w.BILLFLAGE = 'N'
AND w.agreementid = z.agreementid
AND z.user_id = :user_id
GROUP BY w.agreementid
) repay
WHERE A.lesseeid = b.customerid
AND BALANCES.caseid(+)=A.proposalid
AND A.productflag = c.code(+)
AND A.proposalid = e.agreementid
AND c.loantype = f.loantype(+)
AND A.agreementid = repay.agreementid(+)
AND A.agreementid = h.agreementid
AND g.branchid(+) = a.service_branch
AND h.USER_ID = :user_id
如果不知何故此查詢可以再優化的建議是最受大家歡迎的
擺脫「內嵌」視圖。它需要臨時空間來解析視圖。 –
如果您有sydba訪問權限,那麼您可以將數據文件添加到臨時表空間。但更好的選擇是擺脫Lalit Kumar提供的內嵌視圖B – user1
嗨,我沒有sysdba訪問權限。有沒有另一種方式,我可以使用優化以下查詢? – Sunil