CN100483415C - 数据库加锁、操作的方法及装置 - Google Patents
数据库加锁、操作的方法及装置 Download PDFInfo
- Publication number
- CN100483415C CN100483415C CNB2007100745419A CN200710074541A CN100483415C CN 100483415 C CN100483415 C CN 100483415C CN B2007100745419 A CNB2007100745419 A CN B2007100745419A CN 200710074541 A CN200710074541 A CN 200710074541A CN 100483415 C CN100483415 C CN 100483415C
- Authority
- CN
- China
- Prior art keywords
- database
- kernel objects
- incident
- locks
- signal condition
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库加锁的方法和装置,通过对内核对象的操作,在应用软件层实现数据库加锁,防止各模块访问数据库。在此基础上,本发明还公开了一种数据库操作的方法和装置,通过特殊的访问接口来实现对数据库的操作,操作完成后解除锁定。本发明提供的方法和装置,实现简单、可靠,不受操作系统和数据库系统的限制,不影响已有软件的功能。
Description
技术领域
本发明涉及数据库技术,尤其涉及数据库加锁和操作的技术。
背景技术
在电信管理网络中,每个网络单元都有一个操作维护单元(OMU,Operation & Maintenance Unit),具体可以是安装OMU软件的服务器,负责提供该网络单元的操作维护功能。
要实现对网络单元的操作维护,服务器要处理大量的数据,例如配置数据、告警数据、性能统计数据等,这些数据都存储于服务器的数据库系统中。数据库系统提供数据存储、数据查询以及事务控制等功能。OMU服务器上会安装数据库系统软件,提供统一的数据库访问接口。不同的功能模块需要通过数据库接口访问数据库,以查找或存储相应的数据,并对数据进行操作。
在某些情况下,操作维护单元需要锁住数据库,以防止各模块访问。比如,网络单元备份某个时间点的数据库时,需要锁住数据库,防止要备份的数据在备份过程中被修改;网络单元恢复数据库时,也需要锁住数据库,因为恢复过程中,如果有模块访问数据库,可能导致数据库恢复失败,等等。
在实现本发明的过程中,本发明人发现现有技术中,一般数据库系统都不提供这种锁定功能,也无法提供锁定功能,因为锁住数据库时,还需要进行备份操作、还原操作等,数据库系统难以区分正在运行的应用程序进程中,哪些数据库操作进程需要锁住,哪些不需要锁住。
发明内容
本发明要解决的主要问题在于,提供一种数据库加锁的方法和装置,有效的对数据库加锁,防止各模块访问数据库。本发明要解决的另一个主要问题在于,提供一种数据库操作的方法和装置,在对数据库加锁成功的基础上,实现对数据库的操作。
为解决上述技术问题,本发明一个实施例提供了一种数据库加锁的方法,包括以下步骤:
将系统进程的使能事件内核对象置为无信号状态;
若所有的数据库连接的连接事件内核对象均为有信号状态,则判断加锁成功;
所述使能事件内核对象用于表示数据库是否可以访问;
所述连接事件内核对象用于表示连接当前是否正在访问数据库。
本发明的另一个实施例所提供的数据库加锁装置,包括:
系统进程加锁单元,用于将系统进程的使能事件内核对象置为无信号状态;
加锁确认单元,用于当所有的数据库连接的连接事件内核对象均为有信号状态时,判断加锁成功;
所述使能事件内核对象用于表示数据库是否可以访问;
所述连接事件内核对象用于表示连接当前是否正在访问数据库。
本发明的再一个实施例提供了一种数据库操作的方法,包括以下步骤:将系统进程的使能事件内核对象置为无信号状态;
当所有的数据库连接的连接事件内核对象均为有信号状态时,判断加锁成功;
加锁成功后,系统进程使用不等待事件内核对象信号的接口操作数据库;
完成所述数据库操作后,将系统进程的使能事件内核对象置为有信号状态;
所述使能事件内核对象用于表示数据库是否可以访问;
所述连接事件内核对象用于表示连接当前是否正在访问数据库。
本发明的又一个实施例提供了一种数据库操作的装置,包括:
系统进程加锁单元,用于将系统进程的使能事件内核对象置为无信号状态;
加锁确认单元,用于当所有的数据库连接的连接事件内核对象均为有信号状态时,判断加锁成功;
操作单元,用于在所述加锁确认单元判断加锁成功后,使用不等待事件内核对象信号的接口对数据库进行操作;
解锁单元,用于在所述操作单元完成所述数据库操作后,将系统进程的使能事件内核对象置为有信号状态;
所述使能事件内核对象用于表示数据库是否可以访问;
所述连接事件内核对象用于表示连接当前是否正在访问数据库。
由此可见,本发明实施例提供的数据库加锁的方法及装置,利用对事件内核对象的操作,在应用软件层实现数据库加锁,通过对事件内核对象状态的判断,可以确保加锁成功,防止各模块访问数据库。在此基础上,本发明实施例提供的数据库操作的方法和装置,通过特殊的访问接口来实现对数据库的操作,操作完成后解除锁定。本发明实施例提供的方案,不受操作系统和数据库系统的限制,不影响已有软件的功能,实现简单、可靠。
附图说明
图1是现有技术中数据库访问接口的示意图;
图2是本发明实施例一数据库加锁的方法流程图;
图3是本发明实施例二数据库操作的方法流程图;
图4是本发明实施例三数据库加锁装置的示意图;
图5是本发明实施例四数据库操作装置的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明的技术方案进一步详细说明。
本发明实施例的方案,通过对内核对象的操作,在应用软件层实现数据库加锁并确保加锁成功,防止各模块访问数据库;在此基础上,通过特殊的访问接口来实现对数据库的操作。
一般操作维护单元的数据库系统仅供操作维护软件使用,操作维护软件可能是多个进程组成,每个进程都可能访问数据库。数据库加锁时,每个进程都不能访问数据库,直到解除锁定时才可以继续访问。操作维护软件是高层软件,一般都提供统一封装的数据库访问接口,每个进程可以使用统一的接口访问数据库。图1所示是数据库访问接口的示意图,由CSQLConnect单体、COneSQLConnect和CDBQuery接口构成。
操作维护软件的数据库连接一般采用资源池的方式进行管理,每个进程都有一个数据库连接管理池,即CSQLConnect单体,管理该进程的所有的数据库连接。一个进程一般需要用到多个数据库用户,COneSQLConnect用来管理使用某个数据库的多个用户的数据库连接,比如a用户和b用户的数据库连接分别放在两个COneSQLConnect对象里,不同的用户有不同的权限,图中N表示有多个COneSQLConnect对象。CDBQuery接口,对应某个数据库用户登录数据库系统时,可以使用的数据库连接。因为一个进程中可能有多个线程,为实现并发处理,某个用户的数据库连接也可能有多个,图中N表示有多个连接。操作维护软件的某个进程访问数据库时,需要从CSQLConnect单体获取一个CDBQuery,调用CDBQuery的Execute函数对数据库进行操作。
操作系统都提供了内核对象功能,内核对象可以实现进程间的通讯和共享,每个内核对象是内核分配的一个内存块,它是一种数据结构,其成员负责维护该对象的各种信息。内核对象的数据结构只能被内核直接访问,应用程序无法在内存中直接找到和操作这些数据结构。但应用程序可以通过操作系统提供的一组函数来操作这些内核对象。当调用一个创建或打开内核对象的函数时,该函数就返回一个用于标识该对象的句柄,用户进程中的任何线程都可以使用这个句柄。
一般内核对象有内存映射文件、信号量、互斥量、事件等。实现数据库加锁功能需要使用事件内核对象。事件内核对象具有“信号态”和“无信号态”两种状态。当某一线程等待一个事件时,如果事件为信号态,将继续执行,如果事件为无信号态,那么线程被阻塞。
操作维护软件的各个进程在CSQLConnect单体初始化时,需要打开全局事件内核对象(hDatabaseEnabledEvent,使能事件内核对象,以下简称“E事件内核对象”),如果该对象在系统中没有创建,则创建该对象。该E事件内核对象用于表示数据库是否可以访问,是一个人工重置的事件。如果该事件有信号,则表示数据库可以访问,如果该事件无信号,则表示不能访问。
每个数据库连接初始化时,也创建一个全局事件内核对象(hDatabaseConnectEvent,连接事件内核对象,以下简称“C事件内核对象”),该C事件内核对象表示该连接当前是否正在访问数据库,是一个自动重置的事件。该事件创建后置有信号,表示该连接处于空闲状态;如果无信号,表示该连接正在访问数据库。所有事件都采用一定的命名规则,各进程都可以知道E事件内核对象的名称,以及其它进程的数据库连接C事件内核对象的名称,因此各进程都可以访问这些事件内核对象。
根据以上的描述,以下结合附图对本发明第一个实施例数据库加锁的方法进行描述。如图2所示:
步骤201,系统进程调用加锁函数,将E事件内核对象置为无信号状态。
操作维护软件的系统进程在CSQLConnect单体初始化时,需要打开全局事件内核对象E事件内核对象,如果该对象在系统中没有创建,则创建该对象。当需要对数据库加锁时,系统进程调用CSQLConnect提供的加锁函数,该函数的作用就是将E事件内核对象从有信号置为无信号。这样,表示数据库不能访问。
CDBQuery在执行数据库操作前,同时无限期等待E事件内核对象和自身的C事件内核对象有信号,如果等待到,则开始数据库操作。加锁后,系统进程的普通连接和其他数据库操作的连接,调用Execute函数访问数据库时,由于E事件内核对象无信号,便无限期等待。由于不能同时等待到E事件内核对象和C事件内核对象有信号,因此不会清除自身的C事件内核对象的信号。
步骤202,根据各数据库连接的连接事件内核对象的状态,判断是否加锁成功。如果成功,则执行步骤203,如果不成功,则继续本步骤的判断。
对数据库加锁的时候,有的连接可能正在进行数据库操作,这个连接当时并没有锁住,而数据库加锁成功要确认所有的连接都锁住,因此需要等到该连接把正在执行的操作完成后才能被锁住。具体操作时,加锁进程把数据库加锁后,可以调用CSQLConnect提供的是否加锁成功的检查函数,判断是否加锁成功。该函数等待各个进程数据库连接的C事件内核对象是否有信号,等待时间为0。如果有信号,则表示该连接处于空闲状态,已经被锁住;否则,表明该数据库连接在加锁前已经开始访问数据库,需要在这次访问结束才能被锁住。如果所有的连接都处于空闲状态,则执行步骤203;否则返回加锁失败,需要不断检查,直到加锁成功。由于C事件内核对象是一个自动重置的事件,所以,数据库连接执行数据库操作完成后,会自动重置C事件内核对象有信号。该检查函数把所有连接检查完成后,等待到的数据库连接的C事件内核对象自动重置均为有信号。
步骤203,返回加锁成功响应。
以下结合附图3对本发明第二个实施例数据库操作的方法进行描述,实施例二的步骤301至303和实施例一中步骤201至203相同,不同之处在于,在完成实施例一的所有步骤之后,还包括以下步骤:
步骤304,系统进程对数据库进行操作。
加锁成功后,如果系统进程需要对数据库进行操作,则系统进程使用特殊的接口,对数据库进行相应的操作。一般而言,数据库加锁只有操作维护软件的系统进程才会使用,该进程给数据库加锁后,往往还要进行数据库备份、数据库还原等操作,因此该进程不能使用CDBQuery的普通接口Execute进行操作,因为该接口由于等待E事件内核对象而被阻塞了。系统进程需要使用特殊的接口进行备份、还原等操作,该接口与普通接口CDBQuery的区别在于Execute函数执行数据库操作前,不需要等待E事件内核对象和C事件内核对象。该接口可以为CSysDBQuery等接口。应用软件封装数据库系统提供的基本接口,可以实现该CSysDBQuery接口的功能,该接口与CDBQuery只有执行数据库操作的函数有一点区别,就是不等待两个事件内核对象信号。
步骤305,完成对数据库的操作后,解除数据库的锁定。
需要解除数据库锁定时,系统进程调用CSQLConnect提供的解锁函数,该函数就是置E事件内核对象有信号。因为E事件内核对象是所有进程都共享的内核对象,所以系统进程解锁后,所有进程都能够检测到解锁。这样,原来被阻塞住的数据库连接,立即可以继续正常使用了。比如某个数据库连接正要访问数据库时,数据库加锁后,该数据库连接被阻塞住了,数据库解锁后,该函数理解开始访问数据库。对使用该接口的程序而言,好像是阻塞住了,也不返回超时也不返回失败,一旦解锁,就完全正常了。
本发明第三个实施例提供了一种数据库加锁装置,图4是该装置的示意图。如图4所示,该数据库加锁装置包括系统进程加锁单元401,用于将系统进程E事件内核对象置为无信号状态;加锁确认单元402,用于根据各数据库连接的连接事件内核对象的状态,判断是否加锁成功。加锁确认单元还可以包括判断单元4021和响应单元4022。
数据库加锁时,系统进程加锁单元401调用CSQLConnect提供的加锁函数,该函数的作用就是将E事件内核对象从有信号置为无信号。这样,表示数据库不能访问。接着,加锁确认单元402根据各数据库连接的连接事件内核对象的状态,判断是否加锁成功。
加锁确认单元还可以进一步包括:判断单元4021和响应单元4022。判断单元4021,判断数据库连接的C事件内核对象是否为有信号状态,若所有的数据库连接的C事件内核对象都为有信号状态,则判断加锁成功;若否,等待该数据库连接访问结束,并自动重置该C事件内核对象为有信号状态;响应单元4022,用于当判断单元4021判断加锁成功后,返回加锁成功响应,至此,完成数据库加锁。
本发明第四个实施例在实施例三的基础上,提供了一种数据库操作装置,图5是该装置的示意图。
如图5所示,该数据库操作装置除了包括系统进程加锁单元501、加锁确认单元502外,还包括操作单元503和解锁单元504。同样的,加锁确认单元502还可以包括判断单元5021和响应单元5022。
在完成实施例三装置的加锁功能后,如果需要对数据库进行操作,则操作单元503使用特殊的接口,对数据库进行备份、还原等操作,该接口与普通接口CDBQuery的区别在于Execute函数执行数据库操作前,不需要等待E事件内核对象和C事件内核对象信号。这样,其他数据库连接因为E事件内核对象为无信号状态而不能访问数据库,而使用特殊的接口则可以对数据库进行操作,对该特殊接口的描述可以参见方法实施例,此处不赘。操作完成后,解锁单元504对数据库解锁。需要解除数据库锁定时,解锁单元调用CSQLConnect提供的解锁函数,该函数就是置E事件内核对象有信号。因为E事件内核对象是所有进程都共享的内核对象,所以系统进程解锁后,所有进程都能够检测到解锁。这样,原来被阻塞住的数据库连接,立即可以继续正常使用了。
本发明实施例提供的数据库加锁、操作的方法和装置,利用对事件内核对象的操作,在应用软件层实现数据库加锁,通过对事件内核对象状态的判断,可以确保加锁成功,防止各模块访问数据库。在此基础上,通过特殊的访问接口来实现对数据库的操作,操作完成后解除锁定。实现简单、可靠,不受操作系统和数据库系统的限制。所以,该方法不但可以在电信产品OMU中使用,其他需要数据库加锁的软件也可以采用。数据库加锁时,只是阻塞各数据库连接的使用,并不返回错误,数据库解锁后,被阻塞的数据库访问可以继续使用,用户友好性好,不需要应用软件进行出错、重试等处理,因此对已有的软件没有影响。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明思想的一种展示,而非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1、一种数据库加锁方法,其特征在于,包括以下步骤:
将系统进程的使能事件内核对象置为无信号状态;
若所有的数据库连接的连接事件内核对象均为有信号状态,则判断加锁成功;
所述使能事件内核对象用于表示数据库是否可以访问;
所述连接事件内核对象用于表示连接当前是否正在访问数据库。
2、根据权利要求1所述的方法,其特征在于,所述判断加锁成功的步骤包括:
若所述数据库连接的连接事件内核对象不为有信号状态,等待该数据库连接访问结束,访问结束后,所述连接事件内核对象置为有信号状态。
3、根据权利要求1或2所述的数据库加锁方法,其特征在于,还包括以下步骤:
判断加锁成功后,返回加锁成功响应。
4、一种数据库加锁装置,其特征在于,包括:
系统进程加锁单元,用于将系统进程的使能事件内核对象置为无信号状态;
加锁确认单元,用于当所有的数据库连接的连接事件内核对象均为有信号状态时,判断加锁成功;
所述使能事件内核对象用于表示数据库是否可以访问;
所述连接事件内核对象用于表示连接当前是否正在访问数据库。
5、根据权利要求4所述的数据库加锁装置,其特征在于,所述加锁确认单元具体包括响应单元,
所述响应单元,用于所述加锁确认单元判断加锁成功后,返回加锁成功响应。
6、一种数据库操作方法,其特征在于,包括以下步骤:
将系统进程的使能事件内核对象置为无信号状态;
当所有的数据库连接的连接事件内核对象均为有信号状态时,判断加锁成功;
加锁成功后,系统进程使用不等待事件内核对象信号的接口操作数据库;
完成所述数据库操作后,将系统进程的使能事件内核对象置为有信号状态;
所述使能事件内核对象用于表示数据库是否可以访问;
所述连接事件内核对象用于表示连接当前是否正在访问数据库。
7、根据权利要求6所述的数据库操作方法,其特征在于,所述判断加锁成功的步骤包括:
若所述数据库连接的连接事件内核对象不为有信号状态,等待该数据库连接访问结束,访问结束后,所述连接事件内核对象置为有信号状态。
8、根据权利要求6所述的数据库操作方法,其特征在于,所述加锁成功后,系统进程使用不等待事件内核对象信号的接口操作数据库的步骤具体为:
系统进程使用CSysDBQuery接口,直接执行数据库操作。
9、一种数据库操作装置,其特征在于,包括:
系统进程加锁单元,用于将系统进程的使能事件内核对象置为无信号状态;
加锁确认单元,用于当所有的数据库连接的连接事件内核对象均为有信号状态时,判断加锁成功;
操作单元,用于在所述加锁确认单元判断加锁成功后,使用不等待事件内核对象信号的接口对数据库进行操作;
解锁单元,用于在所述操作单元完成所述数据库操作后,将系统进程的使能事件内核对象置为有信号状态;
所述使能事件内核对象用于表示数据库是否可以访问;
所述连接事件内核对象用于表示连接当前是否正在访问数据库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100745419A CN100483415C (zh) | 2007-05-17 | 2007-05-17 | 数据库加锁、操作的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100745419A CN100483415C (zh) | 2007-05-17 | 2007-05-17 | 数据库加锁、操作的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101055584A CN101055584A (zh) | 2007-10-17 |
CN100483415C true CN100483415C (zh) | 2009-04-29 |
Family
ID=38795421
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100745419A Active CN100483415C (zh) | 2007-05-17 | 2007-05-17 | 数据库加锁、操作的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100483415C (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102740315B (zh) * | 2011-04-07 | 2016-02-24 | 深圳市中兴微电子技术有限公司 | Gsm小区信息库管理的方法、装置及系统 |
CN110399227B (zh) * | 2018-08-24 | 2022-09-27 | 腾讯科技(深圳)有限公司 | 一种数据访问方法、装置和存储介质 |
CN112306743B (zh) * | 2019-07-26 | 2023-11-21 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置、电子设备及计算机存储介质 |
-
2007
- 2007-05-17 CN CNB2007100745419A patent/CN100483415C/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN101055584A (zh) | 2007-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100553920B1 (ko) | 컴퓨터 클러스터 운영 방법 | |
CN101364230B (zh) | 一种并发访问控制方法及装置 | |
US5404508A (en) | Data base backup and recovery system and method | |
CN100422936C (zh) | 管理锁定的方法和系统以及进行死锁管理的方法和系统 | |
CN103782574B (zh) | 用于数据库事务的幂等性 | |
CN1316362C (zh) | 重定位在多线程计算机中共享的计算机数据的设备和方法 | |
CN110569149B (zh) | 基于故障探测触发Oracle容灾自动应急切换的方法 | |
CN101853186A (zh) | 分布式事务恢复系统和方法 | |
US6381617B1 (en) | Multiple database client transparency system and method therefor | |
US7778986B2 (en) | Securing transfer of ownership of a storage object from an unavailable owner node to another node | |
CN102999378A (zh) | 一种读写锁实现方法 | |
CN112486694B (zh) | 一种基于Redis的网络锁处理方法及设备 | |
US8132174B2 (en) | Concurrency management in cluster computing of business applications | |
CN100483415C (zh) | 数据库加锁、操作的方法及装置 | |
CN102968457A (zh) | 数据库间切换方法和系统 | |
CN117056116B (zh) | 一种流程管理方法和电子设备 | |
WO2006061315B1 (en) | Resource management for data storage services | |
CN111708793A (zh) | 一种分布式应用锁实现方法及装置 | |
JPH04271453A (ja) | 複合電子計算機 | |
CN102243655A (zh) | 一种数据库的连接管理方法及装置 | |
CN106170013A (zh) | 一种基于Redis的Kafka消息唯一性方法 | |
CN111737063B (zh) | 双控脑裂的磁盘锁仲裁方法、装置、设备及介质 | |
CN102301368A (zh) | 用于保持数据完整性的设备 | |
CN100511165C (zh) | 执行计算机程序的方法、操作系统以及计算设备 | |
JPH0277868A (ja) | 共用データの管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |