iT邦幫忙

0

Oracle DB沒有回傳訊息

  • 分享至 

  • xImage

Dear All,
您好,我遠端的putty下執行sqlplus執行以下語法,正常來說1個小時候應該要回傳我設定好的錯誤訊息-"ORA-20001: HELLO ERROR",但1個小時到了之後卻沒有回傳任何值,請問有可能是什麼問題呢?(PS.我時間調成10秒、30分都有成功回傳訊息。Oracle DB為19.20)

在此先謝謝各位先進的協助~

DECLARE
IN_TIME INT; --NUM SECONDS
V_NOW DATE;

BEGIN
IN_TIME := 3600;
V_NOW := SYSDATE;
-- 2) LOOP UNTIL THE ORIGINAL TIMESTAMP PLUS THE AMOUNT OF SECONDS <= CURRENT DATE
LOOP
EXIT WHEN V_NOW + (IN_TIME * (1/86400)) <= SYSDATE;
END LOOP;
RAISE_APPLICATION_ERROR( -20001, 'HELLO ERROR' );
END;
/

厚厚 iT邦新手 1 級 ‧ 2024-01-15 16:24:58 檢舉
Session是否被設定了存活時間或過多導致被砍掉的情況?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
Hey
iT邦新手 3 級 ‧ 2024-01-16 09:21:50
最佳解答

很大可能是timeout, timeout 有很多地方, DB setting, client connect 時也可以設定, firewall 也可以設定, 要由頭看一遍

另外DBA可以查看ETL的connection是否存在

Some keywords may help
dba_profiles
listener.ora
sqlnet.ora

twojoe iT邦新手 5 級 ‧ 2024-01-22 11:16:45 檢舉

謝謝各位的協助~目前已找到問題並解決了,如下~
防火牆會砍掉閒置1HR的Session,導致DB無法回傳給AP。請網管設定拉長Session閒置時間後,已可以成功回傳訊息給AP。

1
一級屠豬士
iT邦大師 1 級 ‧ 2024-01-15 16:23:13
  1. Oracle DB 通常會設定 執行太久的會砍掉.
  2. 你設定一小時,這個可能是被砍掉了.
  3. 若要做排程,Oracle 內建有 DBMS_SCHEDULER 可以使用.
看更多先前的回應...收起先前的回應...

寫無窮迴圈寫到Oracle裡了
/images/emoticon/emoticon06.gif

twojoe iT邦新手 5 級 ‧ 2024-01-16 08:42:14 檢舉

您好,我有詢問DBA了目前並沒有設定執行過久會砍的功能。另外,排程功能會由ETL工具去啟動,由於ETL去啟動Stored Procedure後遲遲沒有回應,所以ETL工具認為Stored Procedure還在執行中,但Stored Procedure卻已寫log到table回應執行完成,因此才會寫這個小sql來測試,發現也有同樣的問題。很苦腦....

謝謝您的協助~

你要做時間的測試,最好不要用這樣寫法,很消耗資源,這也有可能會
達到資源限制(Oracle有這功能).
Oracle 有 DBMS_SESSION.SLEEP
https://docs.oracle.com/en/database/oracle/oracle-database/18/arpls/DBMS_SESSION.html#GUID-A28F7F54-94B4-4163-9CA5-7645AA3AAFE7

這比較新的語法,其實也出來很久了.你用19c那是有的啦.
DBMS_LOCK.SLEEP <- 這是舊的.
Yes

尼克 iT邦大師 1 級 ‧ 2024-01-16 13:37:43 檢舉

一級屠豬士看到大師的文件都要拜讀。

我要發表回答

立即登入回答