當前位置:首頁 » 編程語言 » 統一異常處理sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

統一異常處理sql

發布時間: 2023-02-09 05:54:21

A. 系統的一個異常sql的處理

下面是在awr報告裡面看到的有問題的sql,是9個變數的,在應用前台屬於關聯查詢,在sqlplus裡面手工執行檢查實際執行情況如下:

下面是查詢到的綁定變數值,可以通過查看v$sql_bind_capture視圖來查看變數的實際值,如果時間比較久,可以使用如下的語句查看歷史的綁定變數信息

以下是開啟了autotrace 選項跟蹤的手工執行情況,從執行效率上看是沒有問題的。

從執行計劃和表的數據量等方面判斷如果sql的開銷有問題,應該出現在表SAMS_CHECKINOUT上面,下面檢查該表上面索引的創建語句看是否有問題

下面是在awr報告裡面看到的有問題的sql,是9個變數的,在應用前台屬於關聯查詢,在sqlplus裡面手工執行檢查實際執行情況如下:

下面是查詢到的綁定變數值,可以通過查看v$sql_bind_capture視圖來查看變數的實際值,如果時間比較久,可以使用如下的語句查看歷史的綁定變數信息

以下是開啟了autotrace 選項跟蹤的手工執行情況,從執行效率上看是沒有問題的。

從執行計劃和表的數據量等方面判斷如果sql的開銷有問題,應該出現在表SAMS_CHECKINOUT上面,下面檢查該表上面索引的創建語句看是否有問題

從上圖可以看到,實際測試出來的執行計劃跟awr報告上不同。

現在要對sql做測試

我們通過/*+ gather_plan_statistics */ 收集的相關執行計劃及其統計信息與該SQL的AWR報告中的執行計劃不同,且邏輯讀的數量與AWR報告中的數值也相差巨大。因此,為了更准確的判斷問題,按以下方法測試。
1、SQL在生產庫(SAMS庫的實例 1上,實例名為sams1 )上,在SQLPLUS中執行。
2、執行後,在同一SQLPLUS窗口中,立即執行以下命令:

結果如下:

1、在目錄下創建一個腳本文件,用來獲取更加相信的信息。
2、在SQLPLUS中,執行以下命令:@sql_rpt 3271368959 1 24114 24115 99vaabs5ptktb
4、執行完成後,在該目錄下生成一個HTML文檔,拿到更加詳細的sql統計信息附帶表的數據信息

初步分析如下:
1、該SQL執行一次的邏輯讀為11130塊次,其中第37步的邏輯讀為6127塊次,佔了一半還多。而該步的操作是根據前面的獲取到的ROWID,回表SAMS_CHECKINOUT獲取"SC".「CHECKTIME"[TIMESTAMP,11], "SC"."VERIFYCODE"[CHARACTER,4], "SC"."SN"[NVARCHAR2,40], "SC"."INSYSTIME"[TIMESTAMP,11]四列的內容。
2、第38步對SAMS_ICLOCK表的全表掃描,對整個SQL的邏輯讀也有較大貢獻。但這個不是問題的關鍵

另外索引上有兩個想法:
1、新建組合索引或改造已有索引,按如下順序構建組合索引:
(BADGENUMBER, CHECKTIME, SN, VERIFYCODE, INSYSTIME)
2、在表SAMS_ICLOCK上創建組合索引,列名及順序如下:
(SN, ALIAS)

這兩個索引先暫時不創建,先從其他方面入手
由於在測試過程中,其生成的執行計劃從未與AWR中顯示的執行計劃一致過。所以,這也許是造成不能模擬出2億個塊次邏輯讀的一個原因。因此,把有問題的SQL的執行計劃綁定到的測試SQL上。然後執行該測試SQL,並觀察和分析測試SQL的執行過程和結果來做出進一步的處理。
為完成上述想法,需要用到ORACLE的SQL PROFILE在不改變SQL文本的前提下,改變其執行計劃。操作方法如下:
1、在SQLPLUS中,生成問題SQL的創建SQL PROFILE的腳本。該腳本執行後,會要求分別輸入SQL_ID和PLAN_HASH_VALUE的值。而我們問題SQL的SQL_ID是99vaabs5ptktb,PLAN_HASH_VALUE的值是4243346097。腳本執行完成後,會在運行SQLPLUS的當前目錄中生成一個腳本文件。其名稱在執行腳本過程中的結尾有顯示。為描述方便,簡稱該生成的S腳本文件為「問題SQL腳本」。
2、再次執行該腳本,只不過這次輸入測試SQL的SQL_ID和PLAN_HASH_VALUE。其SQL_ID為3kys9xsdjrm3b,PLAN_HASH_VALUE的值為561269195。為描述方便,簡稱該生成的腳本文件為「測試SQL腳本」
3、在文本編輯工具中分別打開上述兩個腳本,將問題SQL腳本中出現在以下特徵文字之間的文字(不包含特徵文字 )復制並覆蓋掉測試SQL腳本中同樣位置的原文字:
h := SYS.SQLPROF_ATTR(
………
……….
……….
:signature := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt);
4、將測試SQL腳本另存為一個文件(後綴名為.sql)
5、在SQLPLUS中執行第4步另存後的腳本。
6、在SQLPLUS中原封不動的執行原測試SQL。(註:執行前設置SQLPLUS格式,以避免格式混亂。比如 set lines 200 set pagesize 100 )
7、執行 select * from table(dbms_xplan.display_cursor('','','allstats projection last'));

如果正常生成腳本,沒有報錯信息出現在屏幕上,就是生成腳本成功。比如出現下面的提示就是正常的:

B. sql server異常怎麼處理

你可以看一下異常謝謝,然後根據異常信息進行處理。
你可以在這里貼出一場信息,這樣比較容易得到答案。
異常信息一般在操作sql時彈出
在系統日誌裡面也可以查看

C. java sql 異常處理

能把你的全部程序弄來看看不?
getInt()和getString(),記得好像是要參數。資料庫欄位名
如getString("uname");
不知道你全部程序什麼樣子。瞎說了下。看能不能幫上忙

D. 資料庫PL/SQL異常處理(組圖)

在設計PL/SQL程序時 經常會發生這樣或那樣的錯誤 異常處理就是針對錯誤進行處理的程序段 Oracle i中的異常處理分為系統預定義異常處理和自定義異常處理兩部分 系統預定義異常處理 系統預定義異常處理是針對PL/SQL程序編譯 執行過程中發生的問題進行處理的程序 下列代碼為正確代碼 在【SQLPlus Worksheet】中能夠順利執行 ―――――――――――――――――――――――――――――――――――――set serveroutput ondeclaretempno integer:= ;begintempno:=tempno+ ;end;―――――――――――――――――――――――――――――――――――――【配套程序位置】 第 章 correctplsql sql 下列代碼為錯誤代碼 在【SQLPlus Worksheet】中的執行結果如圖 所示 【配套程序位置】 第 章 wrongplsql sql 由於代碼有錯誤 因此將激活系統預定義的異常處理 並得出如下提示信息 Oracle i提供了很多異常處理 讀者可以嘗試修改可以正常運行的程序 並執行修改後的程序 就可以發現調用了哪些異常處理 下面著重介紹如何自定義異常處理 自定義異常處理 定義異常處理定義異常處理的語法如下 declare異常名 exception; 觸發異常處理觸發異常處理的語法如下 raise 異常名; 處理異常觸發異常處理後 可以定義異常處理部分 語法如下 ExceptionWhen 異常名 then異常處理語句段 ;When 異常名 then異常處理語句段 ; 實例下面的PL/SQL程序包含了完整的異常處理定義 觸發 處理的過程 定義名為salaryerror的異常 在scott emp數據表中查找empno= 的記錄 將其值放入變數tempsal中 判斷tempsal值若不在 和 之間 說明該員工的薪水有問題 將激活異常處理 提示信息 在【SQLPlus Worksheet】中執行下列PL/SQL代碼 執行結果如圖 所示 【配套程序位置】 第 章 exceptiondefine sql lishixin/Article/program/Oracle/201311/16582

E. sql server 2008資料庫提示異常如何處理

如果說還可以創建資料庫。只是某個資料庫出現可疑,那就是我說的那兩個文件被刪或者移除追問:
一直在運行的啊!好好的
沒刪除啊!我用過很多辦法都不行啊
我脫離
然後再附加
曾經遇到這樣的問題!我試過把mdf拿去其他機,然後成功!我就備份bak回來原來新建
還原
都很順利!這次就是不行。回答:
是整個伺服器質疑還是只是一個資料庫?還能建庫嗎?既然禰有備份那就附加,如果附加不了估計就是伺服器問題。建議把sql重新裝下。估計就好了
有9個資料庫
,各種程序都有!同樣的程序的資料庫有三個,有兩個出問題!
之前出問題的也是同一種程序新裝sql的話,我全部停止幾個小時,肯定有損失的
而且麻煩!
我不能次次遇見這樣的問題就新裝sql吧!
我總要找個解決的辦法的啊
哪怕出現「可疑」後能夠備份bak資料庫也好!
我也經常用資料庫,也出現過質疑,基本就是我說的那兩種情況,我仔細想了下,既然是質疑,我想肯定那兩個備份文件伺服器默認找不到的緣故,只能是被移除或者更名但是禰又說備份在呢還可以附加。而且禰又有那麼多庫。不能停!禰給我截個圖吧。

F. j2ee統一異常處理,DataAccessException怎麼把具體的異常信息(棧),傳遞到控制器乃至頁面顯示出來

最簡單的辦法就是用spring mvc的攔截器了,層拋給service, service拋給controller,在每個controller執行後加上攔截器,如果出錯,抓取錯誤信息,跳轉到指定頁面。http://exceptioneye.iteye.com/blog/1303842

還有種排錯的方法也很常用:記錄log,通過log排錯

G. C# sql catch (Exception ce) 異常處理

SqlConnection sqlcon = this.getcon();
SqlCommand sqlcom = new SqlCommand(M_str_sqlstr, sqlcon);
SqlDataReader sqlread = null;
try
{
sqlcon.Open();
}
catch (Exception ce)
{
MessageBox.Show("資料庫連接失敗!" + ce.Message + "\n");
Chemical.DBSet.FrmDBset frm = new Chemical.DBSet.FrmDBset();
frm.Show();
}
finally
{
sqlread = sqlcom.ExecuteReader(CommandBehavior.CloseConnection);
}
return sqlread;

H. sql資料庫質疑的原因及解決辦法

sql資料庫質疑是設置錯誤造成的,解決方法為:

1、通過DBCC CHECKCB('DBName') 來檢測資料庫異常的原因,如果可以檢測到資料庫的異常,其中紅色部分即時數據目前存在的問題,我們也在檢測結果最後看到數據的總體的錯誤情況的匯總。