:::

啟動Zotero時發生錯誤?解決zotero.sqlite-jorunal鎖定問題 / How solve the Error while Starting Zotero: Could not open connection to zotero.sqlite

image

最近我試著用Google備份與同步處理 (Backup and Sync from Google)來備份Zotero的時候,Zotero卻發生了「啟動Zotero時發生錯誤。」的問題。幾經檢查之後,才發現是Google備份跟Zotero共同鎖定了「zotero.sqlite-journal」檔案,這造成Zotero無法正常啟動。解決方法是暫停Google備份、刪除zotero.sqlite-journal這樣,這樣就可以正常開啟Zotero了。


Zotero啟動錯誤 / An error ocurred while starting Zotero

PicPicker 20170829-124933-1

最近啟動Zotero的時候出現了這個錯誤訊息:

Error: Could not open connection to <path-to-zotero-profile>\zotero.sqlite: 2153971714 openConnection/</<@resource://gre/modules/Sqlite.jsm:945:16

From previous event:
ZoteroService@file:///<path-to-zotero-installation>/Zotero/components/zotero-service.js:347:4
XPCOMUtils__getFactory/factory.createInstance@resource://gre/modules/XPCOMUtils.jsm:387:19@chrome://zotero/content/include.s:4:14

如果按下「檢查更新」,它會告訴我這已經是最新版的Zotero,然後Zotero就會關閉。如果按下「結束」,Zotero也會直接關閉。這下子可怎麼辦好呢?

錯誤訊息裡面寫的是「無法連線到zotero.sqlite」,這是Zotero儲存資料的資料庫檔案。我試著用Google備份上的版本控制還原成以前都版本,依舊無法開啟。後來我試著直接安裝新的Zotero,這樣就運作正常。

image

幾經檢查之後,我赫然發現到「zotero.sqlite-journal」被某個檔案鎖住了。

image

使用LockHunter找找看凶手是誰,赫然發現原來就是Google備份與同步處理工具。原因似乎就是這個了。

什麼是zotero.sqlite-journal / What is zotero.sqlite-journal

這個「zotero.sqlite-journal」到底是什麼樣的檔案呢?這是SQLite資料庫在使用交易回滾復原功能時會使用的暫存檔案,常常會在SQLite資料庫寫入的時候產生,詳細請看「[SQLite]關閉SQLite3中的journal暫存檔」這篇的說明。

這個-journal暫存檔案一般來說是不需要備份的,不過Google備份與同步處理無法設定停止備份的檔案類型,所以就會連這個-journal暫存檔一起處理。


解決方案:刪除zotero.sqlite-journal / Solution: Delete zotero.sqlite-journal

image

因為zotero.sqlite-journal被Google備份與同步工具鎖定了,所以我們要先暫停Google備份的功能。做法是:開啟Google備份與同步處理的畫面,點選右上角「…」,點下「Pause」,這樣就能暫停Google備份與同步處理。

image

這樣就能回到Zotero資料夾刪除「zotero.sqlite-journal」檔案。不過我的電腦上「zotero.sqlite-journal」檔案倒是自己就消失了。

image

這樣Zotero就能正常啟動了。

image

要記得回到Google備份與同步「Resume」重新啟動備份處理。


小結 / In closing

我這次用Google備份與同步處理來試著改進之前用ownCloud備份Zotero的問題 (詳細可以看我在「想用無限空間沒那麼容易!Google Drive與伺服器整合失敗記錄 」這篇的討論),沒想到除了Google雲端硬碟教育版沒辦法直接看到備份檔案的問題之外,還會有這種資料庫暫存檔鎖定的問題。

這件事情通常會發生在Zotero開啟了很長一段時間,然後Zotero沒有正常關閉時,下次要啟動Zotero的時候就很容易發生這個問題。不過好在知道原因之後就很好解決了,供大家參考。