.db-journal如何执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.db-journal如何执行相关的知识,希望对你有一定的参考价值。

参考技术A 该文件是sqlite的一个临时的日志文件,主要用于sqlite数据库的事务回滚操作了。在事务开始时产生,在事务操作完毕时自动删除,当程序发生崩溃或一些意外情况让程序非法结束时,此文件便保存在了磁盘上,以便下次运行时进行事务回滚。
android自己的一些机制,又使*.db-journal一直存在。即第一次操作数据库时,*.db-journal文件会被自动创建,且是永久的保存在磁盘中,不会被自动清除的,如果没有操作异常或者不需要事务回滚时,此文件的大小为0。这种机制避免了每次生成和删除*.db-journal文件的开销

关于sqlite数据库导入了一半时,遇到重复id停止了。所以操作回滚,但剩下db-journal文件。怎么解决冲突哇

就是怎么忽略错误导入,或者利用db-journal文件不让他回滚。

要忽略冲突,你把id的主键给删掉。主键有单一性约束。
db-journal是日志文件,跟回滚不回滚没关系。
你不希望数据回滚?其实数据库在遇到冲突事件自动回滚的功能,是为了保护数据。这样的话,你可以回到你要导入的文件里面去,修改完善之后再导入。
其次,设主键最好是设与你的信息基本上没有关系的列作为键。对于主键的设置你可以参考网上的其他资料。
希望我的回答对你有所帮助。追问

1.首先谢谢您的回答。
2.主键约束我当然懂,现在我做的是要整合数据。原来数据库是分布式的,所以,各个数据库自动生成的uiid作为主键,在上亿数据当中就出现了偶然的重复。所以要求现在导入时忽略冲突。
3.上亿条数据的大量导入,在即将完成时回报error。因为它的回滚八个小时的等待成为了泡影,所以我希望它不回滚。想问下有没有sqlite import on conflict方面的帮助。再次感谢哈。。

参考技术A

db-journal是用来事务回滚的。可以这样

attach database test.db as test;
replace into target_table select * from test.target_table;

这样可能丢掉一些数据。

以上是关于.db-journal如何执行的主要内容,如果未能解决你的问题,请参考以下文章

关于sqlite数据库导入了一半时,遇到重复id停止了。所以操作回滚,但剩下db-journal文件。怎么解决冲突哇

如何删除 /hadoop/hdfs/journal/hdfsha/current/ 下的非常大的文件

如何从 systemd-coredump / coredumpctl / systemd-journal 获取内存映射信息

服务器开机报错system.journal:input/output error

ceph版本-jewel,osd用sas盘,ssd做journal

centos7如何关闭system-journal服务