我有一个简单的asp.net核心Web应用程序(v2.1),我在Linux上部署到B1(我试过B2)Azure App Service.当我调用时dbContext.SaveChanges(),在添加一个非常简单的实体之后,请求大约需要30秒才会抛出以下错误:
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 5: 'database is locked'.
这是代码._dbContext注入了作用域生存期.
public async Task<IActionResult> SignIn([Bind("Email,Password,RedirectUrl")] SignInModel model) {
if (ModelState.IsValid) {
var user = _dbContext.Users.Include(u => u.Claims).FirstOrDefault(u => u.UserName == model.Email);
...
user.LastLogin = DateTimeOffset.Now;
await _dbContext.SaveChangesAsync();
...
return Redirect(String.IsNullOrWhiteSpace(model.RedirectUrl) ? "/" : model.RedirectUrl);
}
else {
return View(model);
}
}
Run Code Online (Sandbox Code Playgroud)
在30秒内,我通过SSH看到SQLite DB文件旁边存在日志文件.它最终被删除了.
更新:这是日志.您可以看到,在单次更新调用之后,将在30秒后抛出锁定异常.30秒是SQL命令超时.我正在使用远程SSH shell观察文件系统,日志文件在那里持续约30秒.这就像应用服务使用的网络共享和SQLite文件锁定逻辑的组合被破坏或非常慢.
2018-12-20T15:06:27.660624755Z [40m[32minfo[39m[22m[49m: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
2018-12-20T15:06:27.660656156Z Request starting HTTP/1.1 POST http://insecuresite.azurewebsites.net/Account/SignIn application/x-www-form-urlencoded 56
2018-12-20T15:06:27.660797960Z [15:06:27 DBG] InsecureSite.Middleware.MyCookieAuthHandler:Constructor called.
2018-12-20T15:06:27.660875561Z [15:06:27 DBG] InsecureSite.Middleware.MyCookieAuthHandler:Constructor called.
2018-12-20T15:06:27.660885462Z …Run Code Online (Sandbox Code Playgroud) 我在golang中使用sqlite3数据库,我收到错误:"数据库被锁定."
我知道不能有多个线程使用相同的数据库文件.
虽然我在程序中只获得一个连接并关闭所有查询结果,但它总是创建数据库文件的2或3个句柄.
我通过使用opendfileview程序来检查它.
任何人都可以帮我解决这个问题.提前致谢.
以下代码创建两个数据库文件句柄.
func main() {
database, tx, err := getDatabaseHandle()
if err != nil {
log.Fatal(err)
}
defer database.Close()
dosomething(database, tx)
}
func dosomething(database *sql.DB, tx *sql.Tx) error {
rows, err := database.Query("select * from sometable where name=?","some")
if err != nil {
return err
}
if rows.Next() {
...
}
rows.Close()
//some insert queries
tx.Commit()
}
func getDatabaseHandle() (*sql.DB, *sql.Tx, error) {
database, err := sql.Open("sqlite3", dbPath)
if err != nil {
fmt.Println("Failed to create …Run Code Online (Sandbox Code Playgroud) 我有一个经常崩溃的程序(Zotero),它的SQLite数据库被锁定并且无法访问重启程序使用,除非我重启(我真的想避免).所以这不起作用(使用通用名称db.sqlite代替我的实际文件zotero.sqlite):
sqlite3 db.sqlite
sqlite> .backup main backup.sqlite
Error: database is locked
Run Code Online (Sandbox Code Playgroud)
根据这里的答案,我试过:
echo ".dump" | sqlite3 db.sqlite | sqlite3 db.sqlite2
mv db.sqlite2 db.sqlite
Run Code Online (Sandbox Code Playgroud)
db.sqlite2是0KB所以这显然不起作用.受到另一个线程的启发,我也试过了
echo '.dump' | sqlite3 db.sqlite > db.dump
cat db.dump | sqlite3 db.sqlite2
mv db.sqlite2 db.sqlite
Run Code Online (Sandbox Code Playgroud)
导致db.sqlite2文件大小略小db.sqlite,而Zotero(需要数据库的文件)无法识别其内容.
所以这似乎是一种非常强力的方式,但是有效:
cp -pv db.sqlite db.sqlite2
rm -f db.sqlite
mv db.sqlite2 db.sqlite
Run Code Online (Sandbox Code Playgroud)
我想知道这个解决方案是否有任何缺点,以及为什么在此之前提出其他方法.
我正在写的iPhone应用程序中有一个sqlite数据库.我在后台线程中运行以下代码时收到错误.在后台线程中,我调用此方法:
- (BOOL) songIsInDatabase:(NSString *)songTitle
{
NSString *docsDir;
NSArray *dirPaths;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
//Build the path to the database file
NSString *databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"Database.db"]];
const char *dbpath = [databasePath UTF8String];
sqlite3_stmt *statement;
if(sqlite3_open(dbpath, &DB) == SQLITE_OK){
NSString *insertSQL = [NSString stringWithFormat:@"select * from Bpm_Table where song_title = '%@'", songTitle];
const char *insert_stmt = [insertSQL UTF8String];
if(sqlite3_prepare_v2(DB, insert_stmt, -1, &statement, NULL) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
return YES;
break; …Run Code Online (Sandbox Code Playgroud) 我正在阅读Michael Hartl的Ruby on Rails教程,在第6章中,我被指示创建一个新的迁移,以在users表的email列中添加索引.
这是我的迁移:
def self.up
add_index :users, :email, :unique => true
end
def self.down
remove_index :users, :email
end
Run Code Online (Sandbox Code Playgroud)
当我运行rake db:migrate时,它认为是一秒钟,然后抛出一个BusyException并说数据库被锁定.数据库是存储在我的用户文件夹中的本地计算机上的sqlite3数据库; 没什么特别的.
非常感谢任何和所有的帮助.
电气故障后我的网络数据库出现问题
我通过运行程序打开登录页面,但之后,用户名和密码不再被识别
我收到了错误
异常类型:DatabaseError值异常:
数据库被锁定
和我的功能:
def main_page (request):
state = ""
username = password = ''
if request.POST:
username = request.POST.get ('username')
password = request.POST.get ('password')
user = authenticate (username = username, password = password)
Run Code Online (Sandbox Code Playgroud)
问题来自这一行:user = ....
我怎样才能解决这个问题 ?
我需要访问 db 文件,该文件通过 linux 上的 mount -t cifs 挂载到 windows 文件系统。我还将我的计算机安装到此 Windows 文件系统。如果我想从我的计算机向这个数据库写一些东西,它可以工作。没问题。但是当我想从 linux 机器向这个数据库写一些东西时,它总是说数据库被锁定。我想不通。感谢帮助。