- 浏览: 853975 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (280)
- java相关 (29)
- linux系统 (55)
- ipsec (0)
- ssl (3)
- 信息安全 (13)
- web相关 (35)
- windows (9)
- c,c++ (14)
- log4j (3)
- hibernate (8)
- sqlite (1)
- 程序人生 (2)
- js (2)
- 生活点滴 (3)
- 网络相关 (14)
- 问题积累 (15)
- 数据库相关 (27)
- 软件测试 (2)
- PKI相关 (2)
- 程序设计 (7)
- 犄角旮旯 (0)
- 杂七杂八 (0)
- 硬件相关 (14)
- 防火墙 (2)
- 电子商务 (2)
- 多媒体相关 (1)
- 内存管理 (4)
- 面向对象 (1)
- csp (1)
- 驱动开发 (3)
- 移动开发 (2)
- openssl多线程实例 (1)
最新评论
-
xiaoyao3857:
博主很有探索精神嘛,学习了
Linux主机名Hostname详解 -
hiskyrisa:
言简意赅,好文章。
Flex是什么 -
layznet:
犯了类似错误。使用的是derby数据库。driverClass ...
java.sql.SQLException: No suitable driver -
idision:
你好,文章有一句createSubjectKeyId(keyT ...
bouncycastle 产生证书 -
zheng12tian:
代码有全的不?只贴一部分,,,,
在LOG4J中把日志写入远程数据库
在本系统运行中,偶尔会出现奇怪的错误提示,根据后台日志提示,在系统并发比较大的时候,容易出现The database file is locked的错误,具体错误信息在后台log文件的记录如下:
2008-12-19 06:54:59,609 [20] ERROR- 系统出现未处理错误:
System.Data.SQLite.SQLiteException: The database file is locked
database is locked
在 System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt)
在 System.Data.SQLite.SQLiteDataReader.NextResult()
在 System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
在 System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
在 LevenBlog.Data.Sqlite.SqliteHelper.ExecuteNonQuery(IDbProvider provider, String sqlString, IDataParameter[] sqlParas)
在 LevenBlog.Data.Sqlite.SqliteState.Update(IDbProvider provider, lb_state state)
在 LevenBlog.Service.Mvc.BlogBaseController.OnActionExecuting(ActionExecutingContext filterContext)
在 System.Web.Mvc.Controller.System.Web.Mvc.IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
在
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter
filter, ActionExecutingContext preContext, Func`1 continuation)
在
System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassc.<>c__DisplayClasse.<InvokeActionMethodWithFilters>b__b()
在
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(MethodInfo
methodInfo, IDictionary`2 parameters, IList`1 filters)
在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
查了下sqlite的信息,发现Sqlite在并发的情况下确实有一些问题,FAQ的信息如下
:
(7) 多个应用程序或者同一个应用程序的多个例程能同时存取同一个数据库文件吗?
多进程可以同时打开同一个数据库,也可以同时 SELECT 。但只有一个进程可以立即改数据库。
SQLite使用读/写锁定来控制数据库访问。(Win95/98/ME 操作系统缺乏读/写锁定支持,在低于 2.7.0 的版本中,这意味着在
windows 下在同一时间内只能有一个进程读数据库。在版本 2.7.0 中 这个问题通过在 windows
接口代码中执行一个用户间隔几率读写锁定策略解决了。) 但如果数据库文件在一个 NFS 文件系统中,控制并发读书的锁定机制可以会出错。因为
NFS 的fcntl() 文件锁定有时会出问题。如果有多进程可能并发读数据库则因当避免把数据库文件放在 NFS 文件系统中。
根据微软的文档,如果不运行 Share.exe 后台程序则 FAT 文件系统中的锁定可能不工作。对 Windows
非常有经验的人告诉我网络文件的锁定有许多问题并且不可靠。如果是这样,在2个或以上 Windows 系统中共享一个 SQLite
数据库文件会导致不可预知的问题。
我们知道没有其他的嵌入式 SQL数据库引擎比SQLite支持更多的并发性。 SQLite允许多进程
同时打开和读取数据库。任何一个进程需要写入时,整个数据库将在这一过程中被锁定。但这一般仅耗时
几毫秒。其他进程只需等待然后继续其他事务。其他嵌入式SQL数据库引擎往往只允许单进程访问数据库。
但是,client/server型的数据库引擎 (如 PostgreSQL, MySQL, 以及 Oracle) 通常支持更高的并发度,
并支持多进程同时写入同一个数据库。由于总有一个控制良好的服务器协调数据库的访问,这才保证了以上
特性的实现。如果你的应用需要很高的并发度,你应该考虑使用client/server数据库。事实上,经验告诉
我们大多数应用所需要的并发度比他们的设计者们想象的要少得多。
当 SQLite 尝试操作一个被另一个进程锁定的文件时,缺省的行为是返回 SQLITE_BUSY。你可以用 C代码更改这一行为。 使用 sqlite3_busy_handler() 或sqlite3_busy_timeout() API函数。
如果两个或更多进程同时打开同一个数据库,其中一个进程创建了新的表或索引,则其它进程可能不能立即看见新的表。其它进程可能需要关闭并重新连结数据库。
--------------------------------------------------------------------------------
(8) SQLite是线程安全的吗?
有时候是的。为了线程安全,SQLite 必须在编译时把 THREADSAFE 预处理宏设为1。在缺省的发行的已编译版本中 Windows 版的是线程安全的,而 Linux 版的不是。如果要求线程安全,Linux 版的要重新编译。
“线程安全”是指二个或三个线程可以同时调用独立的不同的sqlite3_open() 返回的"sqlite3"结构。而不是在多线程中同时使用同一个 sqlite3 结构指针。
一个sqlite3结构只能在调用
sqlite3_open创建它的那个进程中使用。你不能在一个线程中打开一个数据库然后把指针传递给另一个线程使用。这是因为大多数多线程系统的限制
(或 Bugs?)例如RedHat9上。在这些有问题的系统上,一个
线程创建的fcntl()锁不能由另一个线程删除或修改。由于SQLite依赖fcntl()锁来进行并发控制,当在线程间传递数据库连接时会出现严重的
问题。
也许在Linux下有办法解决fcntl()锁的问题,但那十分复杂并且对于正确性的测试将是极度困难的。因此,SQLite目前不允许在线程间共享句柄。
在UNIX下,你不能通过一个 fork() 系统调用把一个打开的 SQLite 数据库放入子过程中,否则会出错。
因此可以肯定,系统出现lock错误是因为同时2个或者2个以上的线程对数据库执行写操作,本来数据库写入应该在很短的时间内完成,而其他进程也可 以顺序写入数据,但是某些时候老f的服务器可能会资源不够用导致某个写入进程老半天没写入完成而导致其他写入进程超时错误,从而出现了lock的错误.
解决方案:sqlite毕竟是面向嵌入式系统的小型数据库,我们 无法要求它拥有很高的并发能力,因此我们可以考虑在程序上对这个问题进行修正,比如在对写入数据库的操作加锁,使系统可以避免此类错误,当然,更好的选择 是使用SqlServer版的系统,比如51mvc.com就没出现这样的问题.最近没啥时候,而且问题并不严重,看了下出现的几率还是很小的,所以决定 稍等等在修正这个问题.
发表评论
-
mysql 安装注意
2010-07-12 21:07 834mysql 远程连接赋予权限: GRANT ALL PRIV ... -
Windows和Linux系统下面MySQL的大小写敏感性不同
2010-04-21 15:00 2029同样的建表脚本,在windows下所有的表名都成了小写的了,在 ... -
关闭Mysql日志功能
2009-08-04 17:47 1559Cacti服务器使用有一段时间了,发现在 /usr/loca ... -
ESQL编程使用说明
2009-07-30 20:51 1992ESQL编程使用说明 ... -
ESQL/C资料(完全版)四
2009-07-30 20:50 16405.3 嵌入SQL的处理过程 INFORMIX的预 ... -
ESQL/C资料(完全版)三
2009-07-30 20:47 2139第四节 ORACLE数据库的嵌 ... -
ESQL/C资料(完全版)二
2009-07-30 20:46 1915第三节 IBM DB2嵌入SQL语言 DB2支持SQL ... -
ESQL/C资料(完全版)一
2009-07-30 20:45 2483第六章 嵌入式SQL(E-SQL)简介 ... -
Mysql5的auto Reconnect错误
2009-07-28 09:10 4908一、解决方案一 最近 ... -
Mysql JDBC URL中几个重要参数说明
2009-07-28 08:57 2935mysql JDBC Driver 常用的有两个,一个是gj ... -
Linux平台下修正MySQL中文乱码问题
2009-07-20 16:49 1676操作系统环境: RHEL4.6 ... -
如何将syslogng的日志写入MySQL数据库
2009-07-20 11:24 3422如何将syslogng的日志写入MySQL数据库 <! ... -
shell自动连接mysql后进行查询操作的方法
2009-07-20 11:14 96031.需求,自动登录mysql(root:root,passwd ... -
用C语言操作MySQL数据库,进行连接、插入、修改、删除等操作
2009-07-20 11:07 2309很多人用到MySQL来开发一些项目,有时为了性能,我们会直接 ... -
mysql 5.X 迁移linux上,表名大小写敏感问题!
2009-07-18 17:39 2328mysql数据库,库名以目录名存在,表名以文件名(后缀为.fr ... -
mysql常用经典操作
2009-07-18 15:42 910.连接服务器 mysql -u cnscn ... -
绿色数据库
2009-07-17 23:20 1278如今,由于网络应用的飞速发展、多媒体数据的日益增长、视频音频 ... -
linux下mysql的最常用的操作指令_创建用户、备份和还原数据库
2009-07-17 08:55 26851]如何创建mysqld数据库的管理用户? 数据库安装好后, ... -
Linux操作系统下MySQL数据库的使用方法
2009-07-17 08:54 1010一、连接MYSQL: 格式: mysql -h主机 ... -
org.gjt.mm.mysql.Driver和com.mysql.jdbc.Driver的 区别
2009-07-15 11:42 1946org.gjt.mm.mysql.Driver是早期的驱动名称 ...
相关推荐
解决sqlite死锁示例异常database is locked示例
Oracle; the account is locked
stm32 flash解锁,我的是开发板,在按键中断中解锁flash,具体的见源代码,使用ram.icf,把程序烧录在ram中,环境是IAR6.10,库版本是3.0,成功解决Core is locked-up问题。~
Sqlite解决database locked问题
解决sqlite3 databaselocked 问题的代码实例,比较有参考价值。
今天早上打开soucesafe的时候出现提示:“the sourcesafe database has been locked by the administrator"。仔细想想, 可能是前天晚上用"f:analyze.exe" -I- -DB -F -V3 -D "f:vssDatadata" 命今分析的时候锁定了...
如果多线程同时读写(这里的指不同的线程用使用的是不同的Helper实例),后面的就会遇到android.database.sqlite.SQLiteException: database is locked这样的异常。对于这样的问题,解决的办法就是keep single ...
最近在操作oracle11g的使用出现错误的现象:ora-28000 the account is locked,既用户无法登录问题,如何解决此问题呢?下面小编给大家带来了oracle11g用户登录时被锁定问题的解决方法,感兴趣的朋友一起看看吧
做为一款轻量级数据库软件,MySQL在使用过程中遇到访问速度慢,或者无法响应这类的问题,解决方式基本都有定式,一般第一反应都会是登录到MySQL, show processlist看看当前连接状态。 虽说简单,但show ...
安装comsol4.0时,选项license file中选择nodelocked-license.dat即可。
disable/enable adb codes
proxysql-2.0.5可修复'ProxySQL Error:connection is locked to hostgroup 10 but trying to reach hostgroup 20这个问题
For example, if you defer constraint checking, it is your responsibility to ensure that the database is consistent. Isolation Concurrent transactions are isolated from the updates of other incomplete...
A phase-locked loop or phase lock loop (PLL) is a control system that generates an output signal whose phase is related to the phase of an input signal. While there are several differing types, it is ...
on the jitter transfer of delay-locked loops (DLLs). Through a -domain model, we showthat in a widely used DLL configuration,jitter peaking always exists and high-frequency jitter does not get ...
In present, the PLL is available as a single IC in the SE/NE560 series (560, 561, 562, 564, 565 and 567) to further reduce the buying cost ,the discrete IC’s are used to construct a PLL. PLL ...
Added TFlexFileFormat.StreamSupport property (default True), which difines, is it necessary to open file stream or give the file name only. - FIX: If the TCustomProp.Assign method calls when the ...
This license file is essentially the same the a full node-locked license mentioned below - with the exception that it is not locked to any MAC address (it is not node-locked). This file can be used ...