相关疑难解决方法(0)

Sqlite DB锁定在Azure Dotnet核心实体框架上

我有一个简单的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)

linux sqlite azure docker entity-framework-core

18
推荐指数
1
解决办法
722
查看次数

Sqlite3错误:数据库在golang中被锁定

我在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)

sqlite go

7
推荐指数
1
解决办法
6611
查看次数

有效地解锁SQLite数据库

我有一个经常崩溃的程序(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)

我想知道这个解决方案是否有任何缺点,以及为什么在此之前提出其他方法.

sqlite

6
推荐指数
1
解决办法
2656
查看次数

sqlite错误数据库已被锁定

我正在写的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)

database sqlite iphone

4
推荐指数
4
解决办法
3万
查看次数

rake db:migrate抛出BusyException:数据库被锁定异常

我正在阅读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数据库; 没什么特别的.

非常感谢任何和所有的帮助.

ruby sqlite ruby-on-rails-3

3
推荐指数
1
解决办法
4166
查看次数

Django + Sqlite:数据库被锁定

电气故障后我的网络数据库出现问题

我通过运行程序打开登录页面,但之后,用户名和密码不再被识别

我收到了错误

异常类型: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 = ....

我怎样才能解决这个问题 ?

sqlite django

3
推荐指数
1
解决办法
7202
查看次数

sqlite3 - 访问挂载的 db 文件,数据库被锁定

我需要访问 db 文件,该文件通过 linux 上的 mount -t cifs 挂载到 windows 文件系统。我还将我的计算机安装到此 Windows 文件系统。如果我想从我的计算机向这个数据库写一些东西,它可以工作。没问题。但是当我想从 linux 机器向这个数据库写一些东西时,它总是说数据库被锁定。我想不通。感谢帮助。

database linux sqlite

2
推荐指数
1
解决办法
1161
查看次数