Wednesday, August 25, 2010

Error: 5243: An inconsistency was detected during an internal operation.

Environment: WinServer2008 SP2+SQL Server 2008

昨天檢查SQL Server的時候在記錄檔裡看見一整串長相不凡的訊息... 大概長這樣:

ex_raise2: Exception raised, major=52, minor=43, state=8, severity=22, attempting to create symptom dump
Using 'dbghelp.dll' version '4.0.5'
***Stack Dump being sent to D:\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\LOG\SQLDump0001.txt
... (略)
錯誤: 5243,嚴重性: 22,狀態: 8。
An inconsistency was detected during an internal operation. Please contact technical support.

最明顯的訊息大概就最後兩行了吧... 另外一個dump file內容更是人類無法閱讀=   =,明顯是要給機器讀的。

先是找到這篇: M$技術支援, Article ID:828337: An assertion or Msg 7987 may occur when an operation is performed on an instance of SQL Server.
標題看起來不怎麼有關係,不過內容確實有一些蛛絲馬跡。最早在SQL Server2000執行SELECT或UPDATE之類的transact-SQL時,就可能會有3624的錯誤訊息,而同樣的錯誤在SQL Server2005, 2008則是錯誤5242或5243。

造成5242/5243錯誤的原因只有簡單一小行: The problem may occur if inconsistencies exist in the databases on the instance of SQL Server....
還好相當有良心的還有solution..

  1. On the instance of SQL Server where the failure occurred, run the DBCC CHECKDB Transact-SQL command on all the databases.
  2. If the DBCC CHECKDB Transact-SQL command reports errors that indicate database inconsistencies, resolve the errors.

哈哈哈(乾笑三聲)... 一點都沒有好人做到底,送佛送到西的精神XD,連CHECKDB都不認識請參閱這兒(2000)或這兒(2008)。

所以就找了時間針對SQL Server裡的每個資料庫跑了下面這串指令。

DBCC CHECKDB(‘DB_NAME’) WITH ALL_ERRORMSGS;

(如果資料庫真的相當龐大,建議加個PHYSICAL_ONLY選項..)
結果每個資料庫的檢查結果都正常@_@a.. 雖然是個好消息,不過還是滿令人錯愕的阿XD 資料庫不會平白無故地耍人吧OTZ,所以不死心又多看了幾篇文章,終於,Paul S. Randal先生(SQL Server MVP, 撰寫2005 DBCC CHECKDB的人,這篇文章最後有簡介)給了個比較讓人釋懷的說明

基本上5242跟5243是一樣的錯誤,不過5242會明確指出資料庫的哪個地方出了問題,5243卻是不明原因,資料庫無法指出的錯誤所丟出來的。雖然記錄檔紀錄了相關的訊息,這中間有可能其他的維護作業重建了索引,currupt pages被釋放,所以事後跑checkdb就看不出有任何錯誤。

大致上就這樣囉~

Ref:

  1. Microsoft Support KB828337
  2. MSDN: DBCC CHECKDB (SQL Server2008)
  3. Corruption errors: Msg 5242, Level 22
Thursday, August 05, 2010

[Mobile Phone] EDGE, 3G and HSDPA

筆記一下行動電話通訊技術:

  • GSM(Global System for Mobile Communication), 全球行動通訊系統
    GSM是目前傳統行動電話最廣泛使用的通訊標準,1990年由歐洲電信標準協會(ETSI)制定出第一版標準,發展至今。GSM也是我們熟知的2G--二代行動通訊;二代與前代的最大差異就是在他的信號與語音通道都是數位的。也因為GSM標準的廣泛使用,使全球行動電話廠商間可簽訂"漫遊協定",讓用戶於不同國家也能使用行動電話(使用漫遊服務)。
  • GPRS(General Packet Radio Service), 通用封包無線服務
    GPRS是GSM行動電話用戶可用的一種移動數據服務,約於2000年開始商用,被視為是2.5G。它使用GSM網路中未被使用的TDMA通道,使得GSM系統能夠以效率更高的"封包"方式提供數據通訊,也就是說多個用戶可以共享一個相同的傳輸通道,每個用戶只有在傳輸數據的時候才會佔用通道;所以其計費方式也不同於電路交換的以秒計費,而是以KB計。
  • EDGE(Enhanced Data rates for GSM Evolution), GSM數據速度增強版
    EDGE約於2003年開始商用,亦不屬於GSM網路中,可視為GSM(2G)和GPRS(2.5G)的延伸,所以有時稱為2.75G。EDGE也可寫作EGPRS, Enhanced GPRS, 因為它引進一個GPRS所沒有使用的技術: Incremental Redundancy, 此技術使用更多的冗於資訊來與接收端連接,取代重新發送受干擾的封包,藉此提高解碼的正確性。雖是介於2G與3G間,但是EDGE的數據傳輸最大理論值473.6Kbps已經達到3G標準。
  • 3G(3rd-Generation), 第三代行動通訊
    3G,也就是IMT-2000,是國際電信聯盟(ITU)定義的第三代無線通訊的全球標準,於1988年開始由3GPP制定規範。3G將無線通訊與國際網際網路等多媒體通訊結合,能同時傳送聲音(通話)及數據資訊(電子郵件、即時通訊等)。無線網路必須能夠支持不同的數據傳輸速度,也就是說在室內、室外和行車的環境中能夠分別支持至少2Mbps、 384kbps以及144kbps的傳輸速度。由於採用蜂巢式行動通訊技術,3G標準的通訊質量較之前大幅改善。
  • HSDPA(High-Speed Downlink Packet Access), 高速下行封包存取
    3.5G, 基於3G網路系統,可提供高達7.2mbit/s的數據傳輸速度。

Ref:

  1. [Wiki] GSM
  2. [Wiki] GPRS
  3. [Wiki] EDGE
  4. [Wiki] 3G
  5. [Wiki] HSDPA
  6. [Clove] Guide to GSM, GPRS, EDGE, 3G and HSDPA

The lost July..

消失的七月.. XD 相當不長進的一篇文章都沒有。

Friday, June 11, 2010

Q: What are SQLCODE and SQLERRM and why are they important for PL/SQL developers?

[類別] PL/SQL
[問題] 什麼是SQLCODE與SQLERRM,為什麼他們對PL/SQL開發者而言很重要?

Answer:

SQLCODE與SQLERRM都是用在exception handler裡。

SQLCODE會回傳exception的號碼,SQLERRM則是錯誤訊息內容。
最常見的用法就是搭配WHER OTHERS EXCEPTION使用:

DECLARE

   v_code NUMBER;

   v_errm VARCHAR2(64);

BEGIN

   ………

EXCEPTION

   WHEN OTHERS THEN

        v_code := SQLCODE;

        v_errm := TO_CHAR(SQLERRM(v_code));

        DBMS_OUTPUT.PUTLINE(‘ERRCODE ’ || v_code);

        DBMS_OUTPUT.PUTLINE(‘ERRMSG ’ || v_errm);

END;

重要性? 當然是... 你可以處理exceptions,知道更詳細的訊息囉。

vSphere Client: parsing the server “servername” “clients.xml” file

今天是2010/6/11,如果你在昨天或前天安裝了windows update,而且也有使用vSphere Client,恭喜,他死了=   =

2010-06-11_0012010-06-11_002好似確定是windows update(980773)造成的溜,vm的knowledge base有寫:

vSphere Client does not open on any Windows operating systems with the error: parsing the server "<servername>" "clients.xml" file

並且也在昨天釋放出新版的tools了,記得去更新的溜~

Wednesday, June 09, 2010

新手上路之: read/write NTFS driver for Linux

在進行了一個月的笨蛋異地備份方法之後,實在是受不了了...=   = 用WinSCP透過網路連到linux系統去拉檔案時在是太麻煩了... 尤其單個檔案很大時,超容易失敗OTZ

其實事情好像也滿容易解決的,只是因為對方是production,時在不敢直接在上面做實驗,只好花了兩天自己裝了一台機器,在上面做測試,成功!!

Environment: enterprise linux release5(update5)+ntfs-3g-2010.5.22

  1. 先下載NTFS-3G
  2. 丟到系統內並解壓縮
  3. 直接進入解壓縮的資料夾內,依照文件以root身份做一下三件事情:

    # ./configure
    # make
    # make install

  4. 沒錯! 這個moment就已經完成安裝了
  5. 接著就可以接上USB硬碟,並且辨識一下他的裝置名稱。這本書說linux會把USB視為scsi裝置,所以他的device name會是/dev/sd?(視你原本系統的裝置決定,像我的系統是用IDE硬碟,裝置是hda, hdb開頭,所以第一個scsi裝置就會是sda)
  6. 確定好裝置名稱之後,就可以把它mount起來(以/usb為mountpoint)

    # mount –t ntfs-3g /dev/sda1 /usb

  7. 完工!! =D

Ref:

  1. NTFS-3G
  2. 在Linux下使用USB拇指碟及外接式硬碟

Tags