Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails sqlite3数据库是否会被第三方软件损坏?_Ruby On Rails_Sqlite - Fatal编程技术网

Ruby on rails sqlite3数据库是否会被第三方软件损坏?

Ruby 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做了坏事 我们没有关于第三方软件是

我们有两个Rails 3.2应用程序使用SQLite3(gem
SQLite3 1.3.7
)托管在Ubuntu12.04服务器上。操作系统和数据库都位于同一磁盘上(AWS EBS)

人们从来没有遇到过sqlite3的问题。去年到目前为止,另一个有2个
完全锁定
(需要重新启动)和一个
文件损坏

这两个应用程序的用户负载较小。我们不太明白这是怎么发生的。唯一的区别是2nd rails应用程序有一个第三方程序将大量记录上传到应用程序中,我们怀疑这个第三方软件对sqlite3做了坏事

我们没有关于第三方软件是如何设计和开发的信息。它的唯一用途是将一些电子表格数据上传到应用程序中,然后应用程序将它们保存到表中

我们的问题是sqlite3是否容易被第三方软件损坏

如果是,如何防止sqlite3被第三方软件损坏和/或为第三方软件开发人员指定其他要求,以防止软件损坏SQLite


(后续内容)

官方网站列出了一系列破坏sqlite db的方法。以下是该页面的简要列表:

  • 文件被恶意线程或进程覆盖
  • 文件锁定问题
  • 无法同步
  • 磁盘驱动器和闪存故障
  • 内存损坏
  • 其他操作系统问题
  • SQLite中的bug

  • 你可以很容易地想象,一个写得不好的程序会导致
    1

    官方网站上有一系列sqlite db可能被破坏的方法。以下是该页面的简要列表:

  • 文件被恶意线程或进程覆盖
  • 文件锁定问题
  • 无法同步
  • 磁盘驱动器和闪存故障
  • 内存损坏
  • 其他操作系统问题
  • SQLite中的bug
  • 你可以很容易地想象一个写得不好的程序会导致
    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