Ruby on rails sqlite3数据库是否会被第三方软件损坏?
我们有两个Rails 3.2应用程序使用SQLite3(gemRuby on rails sqlite3数据库是否会被第三方软件损坏?,ruby-on-rails,sqlite,Ruby On Rails,Sqlite,我们有两个Rails 3.2应用程序使用SQLite3(gemSQLite3 1.3.7)托管在Ubuntu12.04服务器上。操作系统和数据库都位于同一磁盘上(AWS EBS) 人们从来没有遇到过sqlite3的问题。去年到目前为止,另一个有2个完全锁定(需要重新启动)和一个文件损坏 这两个应用程序的用户负载较小。我们不太明白这是怎么发生的。唯一的区别是2nd rails应用程序有一个第三方程序将大量记录上传到应用程序中,我们怀疑这个第三方软件对sqlite3做了坏事 我们没有关于第三方软件是
SQLite3 1.3.7
)托管在Ubuntu12.04服务器上。操作系统和数据库都位于同一磁盘上(AWS EBS)
人们从来没有遇到过sqlite3的问题。去年到目前为止,另一个有2个完全锁定
(需要重新启动)和一个文件损坏
这两个应用程序的用户负载较小。我们不太明白这是怎么发生的。唯一的区别是2nd rails应用程序有一个第三方程序将大量记录上传到应用程序中,我们怀疑这个第三方软件对sqlite3做了坏事
我们没有关于第三方软件是如何设计和开发的信息。它的唯一用途是将一些电子表格数据上传到应用程序中,然后应用程序将它们保存到表中
我们的问题是sqlite3是否容易被第三方软件损坏
如果是,如何防止sqlite3被第三方软件损坏和/或为第三方软件开发人员指定其他要求,以防止软件损坏SQLite
(后续内容)官方网站列出了一系列破坏sqlite db的方法。以下是该页面的简要列表:
你可以很容易地想象,一个写得不好的程序会导致
1
官方网站上有一系列sqlite db可能被破坏的方法。以下是该页面的简要列表:
1
不匹配的锁定协议吗?
第2.3节似乎是一个可能的候选人:
2.3使用不同锁定协议的两个进程
SQLite在unix平台上使用的默认锁定机制是
POSIX建议锁定,但还有其他选项。通过选择
使用sqlite3_open_v2()接口的替代sqlite3_vfs[…]
重要的是,到同一数据库文件的所有连接都使用相同的锁定协议。[...] ... 可能导致数据库损坏。
在你的位置上,我会在strace
或(更详细的)ltrace
下运行神秘的“第三方软件”,如果我无法从详细的SQLite日志中获得所需的信息,我会详细查看它在做什么
不安全的文件操作
另一种可能是,第三方应用程序“聪明”,并执行某种复制、更新、交换技巧,这对普通文件是安全的,但会保证开放数据库的严重损坏。同样,您可以在strace
输出中看到这一点。在分析strace输出的过程中,准备做一些学习,尽管
不匹配的版本
如果第三方应用嵌入了不同的SQLite数据库引擎版本,您可能会看到版本不匹配导致的问题。特别请参见3.7.0与3.6.x版本中的常见问题解答条目:
不匹配的锁定协议?
第2.3节似乎是一个可能的候选人:
2.3使用不同锁定协议的两个进程
SQLite在unix平台上使用的默认锁定机制是
POSIX建议锁定,但还有其他选项。通过选择
使用sqlite3_open_v2()接口的替代sqlite3_vfs[…]
重要的是,到同一数据库文件的所有连接都使用相同的锁定协议。[...] ... 可能导致数据库损坏。
在你的位置上,我会在strace
或(更详细的)ltrace
下运行神秘的“第三方软件”,如果我无法从详细的SQLite日志中获得所需的信息,我会详细查看它在做什么
不安全的文件操作
另一种可能是,第三方应用程序“聪明”,并执行某种复制、更新、交换技巧,这对普通文件是安全的,但会保证开放数据库的严重损坏。同样,您可以在strace
输出中看到这一点。在分析strace输出的过程中,准备做一些学习,尽管
不匹配的版本
如果第三方应用嵌入了不同的SQLite数据库引擎版本,您可能会看到版本不匹配导致的问题。特别请参见3.7.0与3.6.x版本中的常见问题解答条目:
重新发布添加了一些信息的。请参阅前面问题的评论,了解更多内容。(我认为这篇转载很好,我只是想确保历史记录可以让任何其他想了解这方面信息的人访问。)明显的问题:它们是在“Ubuntu”上托管的。哪个ubuntu?是否都在同一台服务器上,具有相同的磁盘、文件系统等?或者它们位于同一服务器上的同一文件系统和磁盘阵列上?有问题的“第三方软件”是什么?说真的,你的SQLite版本是什么?您询问的是可能的损坏,而没有给出出现问题的数据库软件的确切版本。SQLite gem for rails本身不是SQLite,您需要提供SQLite库版本。根据描述,sqlite3 1.3.7适用于sqlite3 3.6.16或更高版本。然而,我很难在ubuntu上找到sqlite3的确切版本。添加了一些信息后重新发布。请参阅前面问题的评论,了解更多内容。(我认为这篇转载很好,我只是想确保历史记录可以让任何其他想了解这方面信息的人访问。)明显的问题:它们是在“Ubuntu”上托管的。Wh