【DB筆試面試510】在Oracle中,DBMS_OUTPUT提示緩衝區不夠,怎麼增加?
- 2019 年 10 月 11 日
- 筆記
在Oracle中,DBMS_OUTPUT提示緩衝區不夠,怎麼增加?
答案部分
採用命令「DBMS_OUTPUT.ENABLE(20000);」,另外,如果DBMS_OUTPUT的資訊不能顯示,那麼需要設置SET SERVEROUTPUT ON。
問題 |
答案 |
---|---|
Oracle中哪個包可以獲取環境變數的值? |
可以通過DBMS_SYSTEM.GET_ENV來獲取環境變數的當前生效值。 |
如何讓程式等待60秒鐘後繼續運行? |
可以執行$ORACLE_HOME/rdbms/admin/dbmslock.sql來創建DBMS_LOCK包,該包可以實現讓程式暫時等待的功能。若想普通用戶使用該包,則需要在SYS用戶下執行「GRANT EXECUTE ON DBMS_LOCK TO USER_XXX;」命令。 |
Oracle使用哪個包可以生成並傳遞資料庫告警資訊? |
DBMS_ALERT包用於生成並傳遞資料庫告警資訊。若想使用DBMS_ALERT包,則必須以SYS登陸,為普通用戶授予執行許可權。DBMS_ALERT能讓資料庫觸發器在特定的資料庫值發生變化時嚮應用程式發送報警。報警是基於事務的並且是非同步的(也就是它們的操作與定時機制無關)。 |
程式包DBMS_APPLICATION_INFO.READ_MODULE的作用是什麼? |
DBMS_APPLICATION_INFO是一個非常有用的程式包,它提供了通過V$SESSION跟蹤腳本運行情況的能力,該包可以填充V$SESSION中的CLIENT_INFO、MODULE和ACTION這3列的值。在CLIENT_INFO列中存放程式的客戶端資訊;MODULE列存放主程式名,如包的名稱;ACTION列存放程式包中的過程名。該包不僅提供了設置這些列值的過程,還提供了返回這些列值的過程。主要有如下的存儲過程:l lDBMS_APPLICATION_INFO.SET_CLIENT_INFO:填充V$SESSION視圖的CLIENT_INFO列,記錄客戶端的資訊,這裡可以記錄客戶端的IP地址l lDBMS_APPLICATION_INFO.SET_MODULE:填充V$SESSION視圖的MODULE列,記錄主程式名l lDBMS_APPLICATION_INFO.READ_CLIENT_INFO:從V$SESSION中讀取客戶端的資訊l lDBMS_APPLICATION_INFO.READ_MODULE:從V$SESSION中讀取主程式的名稱 |
如何填充V$SESSION的CLIENT_INFO列和CLIENT_IDENTIFIER列? |
V$SESSION的CLIENT_INFO列和CLIENT_IDENTIFIER列往往為空,所以需要寫登錄觸發器,然後在觸發器中使用如下的存儲過程記錄這2列的值: BEGIN DBMS_APPLICATION_INFO.SET_CLIENT_INFO(SYS_CONTEXT('USERENV','IP_ADDRESS')); DBMS_SESSION.SET_IDENTIFIER(SYS_CONTEXT('USERENV', 'HOST')); EXCEPTION WHEN OTHERS THEN ROLLBACK; END; |
如何將資訊寫入Oracle的告警日誌中? |
使用系統存儲過程「SYS.DBMS_SYSTEM.KSDWRT(2,V_MESSAGE)」可將資訊寫入Oracle的告警日誌。如下:SYS@orclasm > EXEC SYS.DBMS_SYSTEM.KSDWRT(2,'this is a test');PL/SQL procedure successfully completed.查看告警日誌:Sat Mar 18 18:30:27 2017this is a test |
在Oracle中,如何獲取IP地址? |
若是獲取伺服器IP地址,則使用UTL_INADDR.GET_HOST_ADDRESS。若是獲取客戶端IP地址則使用SYS_CONTEXT('USERENV','IP_ADDRESS')。 |
如何在存儲過程中暫停指定時間? |
DBMS_LOCK包的SLEEP過程。例如:「DBMS_LOCK.SLEEP(5);」表示暫停5秒。 |
DBMS_OUTPUT提示緩衝區不夠,怎麼增加? |
採用命令「DBMS_OUTPUT.ENABLE(20000);」,另外,如果DBMS_OUTPUT的資訊不能顯示,那麼需要設置SET SERVEROUTPUT ON。 |
如何在Oracle中寫作業系統文件,如寫日誌? |
可以利用UTL_FILE包,但是,在此之前,要注意設置好UTL_FILE_DIR初始化參數。 |
當DML語句中有一條數據報錯時,如何讓該DML語句繼續執行? |
當一個DML語句運行的時候,如果遇到了錯誤,那麼這條語句會進行回滾,就好像沒有執行過。對於一個大的DML語句而言,如果個別數據錯誤而導致整個語句的回滾,那麼會浪費很多的資源和運行時間。所以,從Oracle 10g開始Oracle支援記錄DML語句的錯誤,而允許語句自動繼續執行。這個功能可以使用DBMS_ERRLOG包實現。 |
本文選自《Oracle程式設計師面試筆試寶典》,作者:李華榮。