时设置的SQLite数据库CACHE_SIZE作为写操作我有一个我们每天都成功运行了差不多过去的2年一个Perl程序,但今天它崩溃,并显示错误消息:Perl的DBI对待继承DBI
严重错误:不能做PRAGMA CACHE_SIZE = 1000000:尝试写入只读数据库
有问题的SQLite数据库是只读的,而且一直是,并且代码始终打开后立即使用PRAGMA cache_size = 1000000
就可以了其只读连接。
设置CACHE_SIZE不是写操作时,如果我直接访问数据库直通的DBI,这样不会失败:
$ dbh->做( “PRAGMA CACHE_SIZE = 1000000”)
然而,该代码使得SqliteH :: DB DBI ::数据库的一个子类,然后调用从子类此功能:
$自我> SUPER :: DO( “PRAGMA CACHE_SIZE = 1000000”)
和它现在与“DBD :: SQLite :: db失败:试图写只读数据库se位于/local/ifs_projects/prok/function/src/lib/SqliteH.pm第329行。“
该代码与CentOS 5,Perl 5.10.1,DBD :: SQLite 1.29和DBI 1.611一起工作。 它不起作用CentOS 6,Perl 5.16,DBD :: SQLite 1.39和DBI 1.627。 但是,我很困惑,它/上周在CentOS 6和Perl 5.16上工作。 IT可能在周末升级了DBD :: SQLite或DBI。
请不要将标题改为“再次运行数月的程序中突然出现错误”。这是一个无益的和非特定的标题。
改变了什么? Perl版本? –
您的硬盘是否已满(或任何硬盘)?如果它是一个虚拟机,并且它被过度配置,您将不得不检查虚拟机主机。 – tgolisch
硬盘未满。我已经在3个不同的CentOS 6服务器上测试过它,并且它们都以相同的方式失败。它从DBI.pm的代码看来,DBI的子类化在新的DBI中处理方式不同。一个可能的线索是,错误消息说“DBD :: SQLite :: db失败”,而我期待它执行DBI :: db做。 –