修改库名,扫描媒体等写数据操作时失败,日志提示“Exception of type 'SQLitePCL.pretty.SQLiteException' was thrown.”

按官方的修复方法不成功:https://emby.media/support/articles/Corrupt-Database.html

执行完整性校验就过不了:

sqlite3 library.db
PRAGMA integrity_check;

提示:

SQLite version 3.45.1 2024-01-30 16:01:20
Enter ".help" for usage hints.
sqlite> PRAGMA integrity_check;
Parse error: no such tokenizer: simple
sqlite>

最后在EMBY论坛里找到了方法,按haiyjs提到的方法修复成功

https://emby.media/community/index.php?/topic/137846-emby-server/

1、删除StrmAssistant(神医助手) 插件

2、更新数据库

https://gist.github.com/sjtuross/5617b3dda5dddd97e1171fd6c0a758f9

windows系统可以在wsl中用同样的方法修复。

# ⚠️ 请先停止 Emby 服务,确保数据库文件不在使用中(非常重要)
# ✅ 此脚本需安装 sqlite3 命令行工具:
#     Ubuntu 安装:sudo apt update && sudo apt install sqlite3
#     或从官网下载安装:https://www.sqlite.org/download.html

# 第一步:进入 Emby 配置目录
cd /mnt/user/appdata/emby-linuxserver

# 第二步:将原始 library.db 导出为 SQL 文件备份
sqlite3 data/library.db ".dump" > data/backup.sql

# 第三步:从导出文件中移除全文搜索 (fts_search9) 相关的表结构和数据
grep -v -E 'fts_search9(_config|_content|_data|_docsize|_idx)?' data/backup.sql > data/clean.sql

# 第四步:修正最后一行 ROLLBACK 为 COMMIT,避免事务未提交
sed -i '$s/^ROLLBACK; -- due to errors/COMMIT;/' data/clean.sql

# 第五步:使用清理后的 SQL 文件生成新的数据库文件
sqlite3 data/library_new.db < data/clean.sql

# 第六步:将新数据库的权限和拥有者与原始数据库对齐
perm=$(stat --format '%a' data/library.db)
owner=$(stat --format '%U:%G' data/library.db)
chmod "$perm" data/library_new.db
chown "$owner" data/library_new.db

# 第七步:备份原始数据库及其相关文件(如果存在)
mv data/library.db data/library_bak.db
[ -f data/library.db-shm ] && mv data/library.db-shm data/library_bak.db-shm
[ -f data/library.db-wal ] && mv data/library.db-wal data/library_bak.db-wal

# 第八步:用新的数据库替换原来的 library.db
mv data/library_new.db data/library.db

 

参与评论