求助,关于Sqlite报database is locked的问题

求助,关于Sqlite报database is locked的问题,第1张

SQLite,是一款轻型的数据,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是DRichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的 *** 作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

1、查看数据库锁,诊断锁的来源及类型:

select object_id,session_id,locked_mode from v$locked_object;

或者用以下命令:

select bowner,bobject_name,lsession_id,llocked_mode

from v$locked_object l, dba_objects b

where bobject_id=lobject_id 2、找出数据库的serial#,以备杀死:

select t2username,t2sid,t2serial#,t2logon_time

from v$locked_object t1,v$session t2

where t1session_id=t2sid order by t2logon_time; 3、杀死该session

alter system kill session 'sid,serial#'

记得以上是用SYS或者SYSTEM账户进入,要不没权限。

以下供参考:

1服务启动不能说明实例已被启动,服务与实例不是同的,在windows下,启动服务的时候,会一起开启实例,是因为注册表中,写明了,进入注册表中,可以看看:hkey_local_machine->software->oracle->home0->ora_服务名_autostart,你把这个改为false,那么服务关了之后,再开启动,实例则不会自动开启,连接时,会提示连接到一个空闲例程。然后再用startup来启动,才可以连接数据库你可以做下实险。

2sqlplus只是一个客户端程序,可用来管理数据库,启动这个程序,不等于打开数据库

3了解oracle的启动过程很关键,对数据库维护尤其重要,在windows下,服务一定要先开启动,不然的话,在sqlplus下怎么 *** 作基本都没有用。

1>启动实例

startup

nomount:读取参数文件,分配sga,启动后台进程。

2>安装数据库

startup

mount

实例与数据库对应,数据库仍关闭,依据参数文件中的control_files,读取并打开控制文件

3打开数据库

startup

根据控制文件,找到数据文件和日志文件,数据库被打开,此时用户可以 *** 作数据库

所以基本上是四个状态:shutdown->nomount->mount->open

当然中间,数据库还有一些状态和控制命令:

如:read

only,restrict等方法打开数据库。

如:alter

database

xxx等控制命令改变状态。

首先你要知道表锁住了是不是正常锁?因为任何DML语句都会对表加锁。

你要先查一下是那个会话那个sql锁住了表,有可能这是正常业务需求,不建议随便KILL

session,如果这个锁表是正常业务你把session

kill掉了会影响业务的。

建议先查原因再做决定。

(1)锁表查询的代码有以下的形式:

select

count()

from

v$locked_object;

select

from

v$locked_object;

(2)查看哪个表被锁

select

bowner,bobject_name,asession_id,alocked_mode

from

v$locked_object

a,dba_objects

b

where

bobject_id

=

aobject_id;

(3)查看是哪个session引起的

select

busername,bsid,bserial#,logon_time

from

v$locked_object

a,v$session

b

where

asession_id

=

bsid

order

by

blogon_time;

(4)查看是哪个sql引起的

select

busername,bsid,bserial#,c

from

v$locked_object

a,v$session

b,v$sql

c

where

asession_id

=

bsid

and

bSQL_ID

=

csql_id

and

csql_id

=

''

order

by

blogon_time;

(5)杀掉对应进程

执行命令:alter

system

kill

session'1025,41';

其中1025为sid,41为serial#

数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发 *** 作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行 *** 作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新 *** 作。

在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。

扩展资料:

排它锁和共享锁的不同之处:

1、共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。

排他锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。

2、共享锁下其它用户可以并发读取,查询数据。但不能修改,增加,删除数据,资源共享。

3、共享锁又称为读锁(Share lock,简记为S锁),若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。

参考资料:

百度百科-排它锁

参考资料:

百度百科-共享锁

用有DBA权限的用户或本地conn / as sysdba 登陆进行解锁

命令:alter user lxy account unlock;

ora-28000 the account is locked, 出现这种原因,是因为用户被锁定了,

一般出现这种原因,是因为程序连接数据库的数量大于配置的连接数,按照我的所遇到的问题,以下步骤可以解决。

1 程序连接大于 oracle 连接数;

处理方式: 重新设置 连接数: 用管理员进去,执行以下脚本,

alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS 10; --设定连接数

alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS UNLIMITED; --不限制连接数

2 程序连接大于 连接池配置的连接数;

处理方式:把连接池的连接数设置大一些;

3 释放用户锁:

用超级管理员,执行 alter user 用户名 account unlock;

以上就是关于求助,关于Sqlite报database is locked的问题全部的内容,包括:求助,关于Sqlite报database is locked的问题、数据库中某条数据被锁了。如何解锁、oracle 实例无法连接等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10103686.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存