sqlite 3 很容易被破坏呀,有没有解决办法? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
daiv

sqlite 3 很容易被破坏呀,有没有解决办法?

  •  
  •   daiv 2013 年 12 月 9 日 11222 次点击
    这是一个创建于 4521 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我用python,所以喜欢自带的sqlite 3,轻便,简单。

    最近用多了,才发现,sqlite容易被损坏,例如程序突然被Kill,或者系统重启,都有可能。
    不管有没有事务,都会有被破坏的可能性。
    “Database disk image is malformed”
    当然有修复办法,很麻烦,而且文件大了更麻烦。

    所以问问大家,有没有这方面的经验,让我也学习一下

    === ===
    PS:
    sqlite3写数据的时候,有锁。比较直接的解决方案是,采用ssd硬盘,这样写入速度特别快,基本不影响读取了,有锁也是偶尔的了。

    PS:
    网上找的修复办法,有用。
    sqlite3 old.db(注:损坏的db文件)
    .output tmp.sql
    .dump
    .quit
    然后读取数据到新的db
    sqlite3 new.db
    .read tmp.sql
    .quit
    18 条回复    1970-01-01 08:00:00 +08:00
    loading
        1
    loading  
       2013 年 12 月 9 日 via iPhone   1
    没遇到过…我的是每天直接cp文件备份。
    真那么脆?
    daiv
        2
    daiv  
    OP
       2013 年 12 月 9 日 via iPhone
    @loading 数据库在用的时候能这样备份?
    xiiing
        3
    xiiing  
       2013 年 12 月 9 日   1
    还没遇到过。可能是我的程序比较小。
    clino
        4
    clino  
       2013 年 12 月 9 日
    我用得不算少,还没发现这种问题
    我这里备份数据库如果是uliweb的话只要uliweb dump一下就可以了,这个也可以用来迁移到其他数据库上
    mogodb
        5
    mongodb  
       2013 年 12 月 9 日   1
    too much write and no cache buffers,makes Jack a dull...
    哦说错了
    修复容易
    一般坚持用sqlite3的话,做到保证数据一次完整写入一般问题就不大……
    在进程退出前做检测嘛...
    loading
        6
    loading  
       2013 年 12 月 9 日 via iPhone   1
    @daiv 我数据很小,加锁然后复制,就几秒。量大可以看官方的方式,c语言api

    http://www.sqlite.org/c3ref/backup_finish.html
    daiv
        7
    daiv  
    OP
       2013 年 12 月 9 日   1
    @clino 我用 web.py了, uliweb 这个框架,国人开发的,计划14年尝试一下的
    daiv
        8
    daiv  
    OP
       2013 年 12 月 9 日
    @mongodb 要是1G的数据库,修复起来就很烦了。系统 reboot的时候,需要检查一下 数据库是否正在写,然后再重启?
    @loading 这个备份方案,我好好看看
    clino
        9
    clino  
       2013 年 12 月 9 日
    @daiv 1G挺大的啊,我这里最大的差不多400+M
    da_a
        10
    da_a  
       2013 年 12 月 9 日
    我也用sqlite3 我的更小 没什么访问
    meteor
        11
    meteor  
       2013 年 12 月 9 日
    我们公司好像也说sqlite容被损坏.
    love
        12
    love  
       2013 年 12 月 9 日
    我sqlite用得不多,不过看sqlite的官网features第一条就是:

    Transactions are atomic, consistent, isolated, and durable (ACID) even after system crashes and power failures.

    这不是说sqlite在任意情况下的crash都不会引起文件损坏的吗?
    ms2008
        13
    ms2008  
       2013 年 12 月 9 日
    是不是没有及时释放磁盘空间?建议定期 vacuum;
    daiv
        14
    daiv  
    OP
       2013 年 12 月 10 日
    @ms2008 没有删除数据,所以不需要 vacuum吧。
    @love 挺多人说 sqlite 比较容易顺坏
    min
        15
    min  
       2013 年 12 月 10 日
    @love 这话说的意思应该这么理解:只要我的库文件不坏,那么我的transaction是ACID的。
    raptor
        16
    raptor  
       2013 年 12 月 10 日
    还没碰到过sqlite库文件损坏的情况,是不是除了你的应用本身,还有别的程序在操作数据库文件?
    ms2008
        17
    ms2008  
       2013 年 12 月 10 日
    @daiv
    这个就不清楚了,我也经常kill,但是从没有损坏过数据文件,最多就是丢失些数据咯
    ryanking8215
        18
    ryanking8215  
       2013 年 12 月 10 日
    嵌入式设备上用的sqlite3,也有这个现象,直接断电后特别容易出来。
    修复文件系统后一般不会出现malformed,出现的话用楼主的方法修复一下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2595 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 50ms UTC 10:31 PVG 18:31 LAX 03:31 JFK 06:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86