CEDB簡(jiǎn)介
CEDB是一個(gè)功能簡(jiǎn)單的WINCE系統(tǒng)內(nèi)置數(shù)據(jù)庫(kù),WINCE系統(tǒng)里使用CEDB生成多個(gè)數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)一些簡(jiǎn)單的系統(tǒng)信息。比如回收站信息,還比如“事件-應(yīng)用”對(duì)應(yīng)表。
“事件-應(yīng)用”對(duì)應(yīng)表由調(diào)用CeRunAppAtEvent函數(shù)產(chǎn)生,設(shè)置系統(tǒng)收到指定事件event后執(zhí)行指定的exe進(jìn)程。比如用Visual Studio調(diào)試程序時(shí)需要連接USB,USB連接時(shí),會(huì)產(chǎn)生NOTIFICATION_EVENT_RS232_DETECTED事件,系統(tǒng)便會(huì)啟動(dòng)repllog.exe進(jìn)行調(diào)試方面設(shè)置。
系統(tǒng)CEDB數(shù)據(jù)庫(kù)異常現(xiàn)象
我們發(fā)現(xiàn)系統(tǒng)CEDB數(shù)據(jù)庫(kù)中,“事件-應(yīng)用”對(duì)應(yīng)表在日常調(diào)試時(shí),有極小概率出現(xiàn)數(shù)據(jù)庫(kù)異常。當(dāng)該數(shù)據(jù)庫(kù)數(shù)據(jù)異常時(shí):
1、會(huì)出現(xiàn)ACTIVESYNC連接故障,我們此前采用格式化nandflash來(lái)解決該故障:《WinCE下ActiveSync連接故障分析》。
2、在問(wèn)題嚴(yán)重時(shí),系統(tǒng)的啟動(dòng)會(huì)變得緩慢。
3、進(jìn)一步,在啟動(dòng)時(shí)USBOTG處于連接狀態(tài),系統(tǒng)則會(huì)不停打印“+OEMSetAlarmTime”信息,且無(wú)法正常完成啟動(dòng),系統(tǒng)重啟。
產(chǎn)生原因
1、在調(diào)試時(shí),如果USB連接不穩(wěn)定,時(shí)斷時(shí)連。系統(tǒng)可能錯(cuò)誤的向“事件-應(yīng)用”對(duì)應(yīng)表添加重復(fù)的“NOTIFICATION_EVENT_RS232_DETECTED - repllog.exe”記錄項(xiàng)。
2、重復(fù)的數(shù)據(jù)庫(kù)記錄項(xiàng)會(huì)重復(fù)啟動(dòng)repllog.exe進(jìn)程,導(dǎo)致ACTIVESYNC設(shè)置失敗。
3、ACTIVESYNC設(shè)置失敗后,系統(tǒng)又會(huì)錯(cuò)誤的繼續(xù)向CEDB中添加重復(fù)的“NOTIFICATION_EVENT_RS232_DETECTED - repllog.exe”事件記錄項(xiàng)。并且因?yàn)橄到y(tǒng)無(wú)法正確清理重復(fù)項(xiàng),導(dǎo)致數(shù)據(jù)庫(kù)不斷變大。
4、最后該CEDB中存儲(chǔ)了上千條重復(fù)項(xiàng),因?yàn)橄到y(tǒng)啟動(dòng)時(shí)頻繁檢索數(shù)據(jù)庫(kù)內(nèi)所有項(xiàng),過(guò)多的重復(fù)項(xiàng)導(dǎo)致系統(tǒng)在啟動(dòng)時(shí)非常緩慢。
5、系統(tǒng)啟動(dòng)緩慢到一定程序時(shí),連接的USBOTG會(huì)導(dǎo)致數(shù)據(jù)庫(kù)記錄進(jìn)一步出錯(cuò)。系統(tǒng)重復(fù)打印的“+OEMSetAlarmTime”即是CEDB在添加重復(fù)項(xiàng)時(shí)打印的信息。
解決方案
“事件-應(yīng)用”對(duì)應(yīng)表默認(rèn)數(shù)據(jù)庫(kù)文件為“\NandFlash\Documents and Settings\default.vol”,重置該文件即可解決該問(wèn)題。
格式化nandflash
見(jiàn)《WinCE下ActiveSync連接故障分析》,格式化nandflash后default.vol被重置,問(wèn)題修復(fù)。但是nandflash下文件會(huì)被清空,注冊(cè)表也會(huì)被重置。
清除CEDB多余項(xiàng)
調(diào)試API函數(shù)逐條清空數(shù)據(jù)項(xiàng)。
HANDLE *hNotifications = NULL;
DWORD NumNotifications;
DWORD Count;
CeGetUserNotificationHandles( hNotifications, 0, &NumNotifications );
hNotifications = (HANDLE *)malloc( NumNotifications * sizeof( HANDLE *));
CeGetUserNotificationHandles( hNotifications, NumNotifications, &NumNotifications );
for( Count = 0; Count < NumNotifications, Count<100; Count++ )
{
bRet = CeClearUserNotification(hNotifications[Count]);
}
free( hNotifications );
因?yàn)镃EDB訪(fǎng)問(wèn)速度較慢,清理起來(lái)時(shí)間很長(zhǎng),所以不建議采用該方法。
通過(guò)2次重啟,刪除default.vol文件
因?yàn)閐efault.vol為系統(tǒng)文件,無(wú)法直接刪除。所以可以通過(guò)以下辦法單單刪除default.vol文件,同時(shí)保留數(shù)據(jù)庫(kù)文件及nandflash下其它文件。
1、判斷CEDB里的數(shù)據(jù)是否有異常。如果異常,則執(zhí)行恢復(fù)。
2、修改\NandFlash\Documents and Settings目錄為\NandFlash\Documents and Settings0,并重啟(重啟之前無(wú)法對(duì)Documents and Settings里的文件進(jìn)行操作)。
3、重啟后,系統(tǒng)判斷沒(méi)有Documents and Settings目錄,因此會(huì)重置生成一個(gè)新的Documents and Settings目錄。至此,故障已經(jīng)修復(fù),但是注冊(cè)表等其他文件也重置了,還需要以下步驟將Documents and Settings0里的注冊(cè)表文件恢復(fù)回去。
4、刪除default.vol文件。
修改新生成的\NandFlash\Documents and Settings目錄為\NandFlash\Documents and Settings1。
修改原來(lái)的\NandFlash\Documents and Settings0目錄為\NandFlash\Documents and Settings。
再次重啟。
5、重啟后,注冊(cè)表重新恢復(fù),Documents and Settings里其它文件保持原狀態(tài),只有default.vol文件進(jìn)行了重置。
可以刪除已經(jīng)無(wú)用的多余的\NandFlash\Documents and Settings1目錄,騰出磁盤(pán)空間。
英創(chuàng)提供了修復(fù)程序及源代碼,有需要的客戶(hù)可以聯(lián)系英創(chuàng)工程師獲得。
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6100瀏覽量
36296
發(fā)布評(píng)論請(qǐng)先 登錄
三款主流國(guó)產(chǎn)數(shù)據(jù)庫(kù)的技術(shù)特點(diǎn)
數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫(kù)被加密如何恢復(fù)數(shù)據(jù)?

不用編程不用聯(lián)網(wǎng),PLC和儀表直接對(duì)SQL接數(shù)據(jù)庫(kù),有異常時(shí)還可先將數(shù)據(jù)緩存
云數(shù)據(jù)庫(kù)是哪種數(shù)據(jù)庫(kù)類(lèi)型?
數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—Mysql數(shù)據(jù)庫(kù)表記錄丟失的數(shù)據(jù)恢復(fù)流程

數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—MYSQL數(shù)據(jù)庫(kù)ibdata1文件損壞的數(shù)據(jù)恢復(fù)案例
Sybase數(shù)據(jù)恢復(fù)—Sybase數(shù)據(jù)庫(kù)無(wú)法啟動(dòng)怎么恢復(fù)數(shù)據(jù)?

數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—通過(guò)拼接數(shù)據(jù)庫(kù)碎片恢復(fù)SQLserver數(shù)據(jù)庫(kù)

oracle數(shù)據(jù)恢復(fù)—Oracle數(shù)據(jù)庫(kù)打開(kāi)報(bào)錯(cuò)的數(shù)據(jù)恢復(fù)案例

Oracle數(shù)據(jù)恢復(fù)—異常斷電后Oracle數(shù)據(jù)庫(kù)啟庫(kù)報(bào)錯(cuò)的數(shù)據(jù)恢復(fù)案例

數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫(kù)出現(xiàn)823錯(cuò)誤的數(shù)據(jù)恢復(fù)案例

加速鯤鵬落地!拓維信息信創(chuàng)遷移工具榮獲鯤鵬原生開(kāi)發(fā)技術(shù)認(rèn)證

基于WDS證券行業(yè)建設(shè)金融信創(chuàng)云承載數(shù)據(jù)庫(kù)類(lèi)關(guān)鍵應(yīng)用

自研創(chuàng)新 數(shù)智未來(lái) 2024中國(guó)數(shù)據(jù)庫(kù)技術(shù)大會(huì)盛大召開(kāi)

基于分布式存儲(chǔ)WDS的金融信創(chuàng)云承載數(shù)據(jù)庫(kù)類(lèi)關(guān)鍵應(yīng)用

評(píng)論