文档库 最新最全的文档下载
当前位置:文档库 › 数据库中的锁

数据库中的锁

数据库中的锁
数据库中的锁

数据库锁的基本概念

为了确保并发用户在存取同一数据库对象时的正确性(即无丢失修改、可重复读、不读“脏”数据),数据库中引入了锁机制。基本的锁类型有两种:排它锁(Exclusive locks记为X锁)和共享锁(Share locks记为S锁)。

排它锁:若事务T对数据D加X锁,则其它任何事务都不能再对D加任何类型的锁,直至T释放D上的X锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为写锁。共享锁:若事务T对数据D加S锁,则其它事务只能对D加S锁,而不能加X锁,直至T 释放D上的S锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读锁。

2 Oracle 多粒度封锁机制介绍

根据保护对象的不同,Oracle数据库锁可以分为以下几大类:

(1) DML lock(data locks,数据锁):用于保护数据的完整性;

(2) DDL lock(dictionary locks,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义);

(3) internal locks 和l a t c h es(内部锁与闩):保护内部数据库结构;

(4) distributed locks(分布式锁):用于OPS(并行服务器)中;

(5) PCM locks(并行高速缓存管理锁):用于OPS(并行服务器)中。

本文主要讨论DML(也可称为data locks,数据锁)锁。从封锁粒度(封锁对象的大小)的角度看,Oracle DML锁共有两个层次,即行级锁和表级锁。

2.1 Oracle的TX锁(行级锁、事务锁)

许多对Oracle不太了解的技术人员可能会以为每一个TX锁代表一条被封锁的数据行,其实不然。TX的本义是Transaction(事务),当一个事务第一次执行数据更改(Insert、Update、Delete)或使用SELECT… FOR UPDATE语句进行查询时,它即获得一个TX(事务)锁,直至该事务结束(执行COMMIT或ROLLBACK操作)时,该锁才被释放。所以,一个TX锁,可以对应多个被该事务锁定的数据行。

在Oracle的每行数据上,都有一个标志位来表示该行数据是否被锁定。Oracle不象其它一些DBMS(数据库管理系统)那样,建立一个链表来维护每一行被加锁的数据,这样就大大减小了行级锁的维护开销,也在很大程度上避免了其它数据库系统使用行级封锁时经常发生的锁数量不够的情况。数据行上的锁标志一旦被置位,就表明该行数据被加X锁,Oracle在数据行上没有S锁。

2.2 TM锁(表级锁)

2.2.1 意向锁的引出

表是由行组成的,当我们向某个表加锁时,一方面需要检查该锁的申请是否与原有的表级锁相容;另一方面,还要检查该锁是否与表中的每一行上的锁相容。比如一个事务要在一个表上加S锁,如果表中的一行已被另外的事务加了X锁,那么该锁的申请也应被阻塞。如果表中的数据很多,逐行检查锁标志的开销将很大,系统的性能将会受到影响。为了解决这个问题,可以在表级引入新的锁类型来表示其所属行的加锁情况,这就引出了“意向锁”的概念。意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。如:对表中的任一行加锁时,必须先对它所在的表加意向锁,然后再对该行加锁。这样一来,事务对表加锁时,就不再需要检查表中每行记录的锁标志位了,系统效率得以大大提高。

2.2.2 意向锁的类型

由两种基本的锁类型(S锁、X锁),可以自然地派生出两种意向锁:

意向共享锁(Intent Share Lock,简称IS锁):如果要对一个数据库对象加S锁,首先要对其上级结点加IS锁,表示它的后裔结点拟(意向)加S锁;

意向排它锁(Intent Exclusive Lock,简称IX锁):如果要对一个数据库对象加X锁,首先要对其上级结点加IX锁,表示它的后裔结点拟(意向)加X锁。

另外,基本的锁类型(S、X)与意向锁类型(IS、IX)之间还可以组合出新的锁类型,理论上可以组合出4种,即:S+IS,S+IX,X+IS,X+IX,但稍加分析不难看出,实际上只有S+IX 有新的意义,其它三种组合都没有使锁的强度得到提高(即:S+IS=S,X+IS=X,X+IX=X,这里的“=”指锁的强度相同)。所谓锁的强度是指对其它锁的排斥程度。

这样我们又可以引入一种新的锁的类型

共享意向排它锁(Shared Intent Exclusive Lock,简称SIX锁):如果对一个数据库对象加SIX 锁,表示对它加S锁,再加IX锁,即SIX=S+IX。例如:事务对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同时会更新个别行(所以要对该表加IX锁)。

这样数据库对象上所加的锁类型就可能有5种:即S、X、IS、IX、SIX。

具有意向锁的多粒度封锁方法中任意事务T要对一个数据库对象加锁,必须先对它的上层结点加意向锁。申请封锁时应按自上而下的次序进行;释放封锁时则应按自下而上的次序进行;具有意向锁的多粒度封锁方法提高了系统的并发度,减少了加锁和解锁的开销。

ACCESS数据库锁定问题

ACCESS数据库锁定问题 问题1 单位网站突然有的时候不能打开网页。重启电脑后问题解决。说是CONN.ASP第6行错误。同时生成一个.LDB文件。在网上查了下说是数据库没有关闭或锁定了。请问如何关闭啊,下边是CONN.ASP代码: <% starttime=timer() StrSQL="DBQ="+server.mappath("admin/data/news30000.mdb")+";DRIVER={Microsoft Access Driver (*.mdb)};" 'connstr="driver={SQL Server};server=(local);database=master;uid=sa;pwd=;" set conn=server.createobject("ADODB.CONNECTION") conn.open StrSQL(第6行) %> 答: 如果是ACCESS数据库,应该是并发访问造成的问题。因为ACCESS没有行锁。所以你有个一个用户在网上改一条数据,另外一个用户再上来访问相同一条数据时就给锁了。重启动后所有的连接全断开了,所以就没问题了。如果有可能最好不用ACCESS做后台数据库。 ---------------------------------- 问题2 我的数据库老是被锁住,网页打不开,请高手帮忙!!我的conn.asp是:<% scadb=mydata&"datahotel/#@@##feel.mdb" 'mydata 为各文件中设置的路径,请不要改动 connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&scadb&"") On Error Resume Next Set conn = Server.CreateObject("ADODB.Connection") conn.open connstr If Err Then err.Clear Set Conn = Nothing Response.Write "




数据库连接出错!!!请检查数据库连接指向^--^
" Response.End End If%> 答: 你的数据库连接写法是正确的,是不是数据库太大,几百M的话容易出现这个问题,建议换sql数据库。不想换的话可以把数据库下载到本地压缩修复一下再传上去。 ------------------------- 问题3

数据库基本概念

数据库基本概念 引言 本章的目标是讲解数据库研究人员常常要使用到的一些理论和术语。我所在的工作组集中了一批以开发性能优异的数据库系统为谋生手段的精英,数据库理论乍看起来与我们的具体工作相距甚远。 是否很有必要学习有关数据库理论方面的知识可能是留给你思考的一个问题。我们说,理解一种技术的基本原理是非常重要的。这就好比把你的汽车交给一个不懂火花塞工作原理的机械师,或是坐在一架由不懂飞行理论的驾驶员的飞机上。如果你不懂数据库设计的相关理论,又怎能指望用户登陆门请你设计系统呢? 研究人员所用的某些术语和概念令我们感到困惑,部分原因是数学基础的问题。有一些术语,大多数程序员理解为一种含义,而实际上是完全不同的另一种含义。为了能设计合理的系统,了解关系数据库理论是十分重要的。 为了搞清楚研究人员的专业术语,我们需要学习一些关系数据库理论中较浅显的内容,并且同我们所熟知的SQL概念进行比较。许多书中都讲解了这些内容,所以并不打算过于深入地探讨理论。我们只提供一些基本且实用的数据库概念。 本章将主要从面向SQL的角度介绍关系理论。我们将常常涉及相关理论的具体实现,尽管这超出了本书的范围,但却是难以避免的。然而我们不会陷入实现的细节,仅仅给出一个概述。更进一步的内容,参看第一章提到的参考书目。 在本章中,我们将会看到下列内容: ?关系模型——考察相关的技术术语:我们将在后面的章节中构造它们 ?其他数据库概念的定义 关系模型 正像第1章中提到的,E.F.Codd早在1970年就提出了关系模型的概念。在这一节中,我们将从SQL Server 的角度出发,考察一些在关系模型中比较重要的内容。 正像我们所看到的那样,SQL Server 与关系模型有很多共性的东西,但

数据库死锁问题总结

数据库死锁问题总结 1、死锁(Deadlock) 所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造 成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系 统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力 协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象 死锁。一种情形,此时执行程序中两个或多个线程发生永久堵塞(等待),每 个线程都在等待被其他线程占用并堵塞了的资源。例如,如果线程A锁住了记 录1并等待记录2,而线程B锁住了记录2并等待记录1,这样两个线程就发 生了死锁现象。计算机系统中,如果系统的资源分配策略不当,更常见的可能是 程序员写的程序有错误等,则会导致进程因竞争资源不当而产生死锁的现象。 锁有多种实现方式,比如意向锁,共享-排他锁,锁表,树形协议,时间戳协 议等等。锁还有多种粒度,比如可以在表上加锁,也可以在记录上加锁。(回滚 一个,让另一个进程顺利进行) 产生死锁的原因主要是: (1)系统资源不足。 (2)进程运行推进的顺序不合适。 (3)资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能 性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序 与速度不同,也可能产生死锁。 产生死锁的四个必要条件: (1)互斥条件:一个资源每次只能被一个进程使用。 (2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 破解:静态分配(分配全部资源) (3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 破解:可剥夺 (4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 破解:有序分配 这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。 死锁的预防和解除:

数据库的4个基本概念

数据库的4个基本概念 1.数据(Data):描述事物的符号记录称为数据。 2.数据库(DataBase,DB):长期存储在计算机内、有组织的、可共享的大量数据的集合。 3.数据库管理系统(DataBase Management System,DBMS 4.数据库系统(DataBase System,DBS) 数据模型 数据模型(data model)也是一种模型,是对现实世界数据特征的抽象。用来抽象、表示和处理现实世界中的数据和信息。数据模型是数据库系统的核心和基础。 数据模型的分类 第一类:概念模型 按用户的观点来对数据和信息建模,完全不涉及信息在计算机中的表示,主要用于数据库设计现实世界到机器世界的一个中间层次 实体(Entity): 客观存在并可相互区分的事物。可以是具体的人事物,也可以使抽象的概念或联系 实体集(Entity Set): 同类型实体的集合。每个实体集必须命名。 属性(Attribute): 实体所具有的特征和性质。 属性值(Attribute Value): 为实体的属性取值。 域(Domain): 属性值的取值范围。 码(Key): 唯一标识实体集中一个实体的属性或属性集。学号是学生的码 实体型(Entity Type): 表示实体信息结构,由实体名及其属性名集合表示。如:实体名(属性1,属性2,…) 联系(Relationship): 在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反映为实体型内部的联系(各属性)和实体型之间的联系(各实体集)。有一对一,一对多,多对多等。 第二类:逻辑模型和物理模型 逻辑模型是数据在计算机中的组织方式 物理模型是数据在计算机中的存储方式 数据模型的组成要素 数据模型通常由数据结构、数据操作和数据的完整性约束条件三部分组成 关系模型(数据模型的一种,最重要的一种) 从用户观点看关系模型由一组关系组成。每个关系的数据结构是一张规范化的二维表。 ?关系(Relation):一个关系对应通常说的一张表。 ?元组(Tuple):表中的一行即为一个元组。 ?属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名。 ?码(Key):表中的某个属性组,它可以唯一确定一个元组。 ?域(Domain):一组具有相同数据类型的值的集合。属性的取值范围来自某个域。

数据库锁表与解锁

数据库锁表与解锁 一、mysql 锁定表:LOCK TABLES tbl_name {READ | WRITE},[ tbl_name {READ | WRITE},…] 解锁表:UNLOCK TABLES 例子: LOCK TABLES table1 WRITE ,table2 READ 、、、更多表枷锁; 说明:1、READ 锁代表其她用户只能读不能其她操作 2、WRITE锁代表:其她用户不能任何操作(包括读) 查瞧那些表被锁:show OPEN TABLES where In_use > 0; 全局加锁:FLUSH TABLES WITH READ LOCK(这个命令就是全局读锁定,执行了命令之后所有库所有表都被锁定只读。解锁也就是:UNLOCK TABLES ) 二、oracle --行级锁定(同样对 mysql起作用) 通过 :select * from tableName t for update 或 select * from tableName t where id =1 for update 前者锁定整个表,后者多顶 id=1的一行数据(有主键,并且指定主键=值的只 锁定指定行) 说明:通过 select 、、、 for update 后其她用户只能读不能其她操作,锁定者通过 commit或 rollback命令自动解锁,或使用本文的解锁方式

(will)! --表级锁定 lock table in mode [nowait] 其中: lock_mode 就是锁定模式 nowait关键字用于防止无限期的等待其她用户释放锁 五种模式如下(1到5 级别越来越高,限制越来越大): 1、行共享(row share,rs):允许其她用户访问与锁定该表,但就是禁止排她锁定 整个表 2、排她锁(row exclusive ,rx):与行共享模式相同,同时禁止其她用户在此表上使用共享锁。使用select 、、、 for update语句会在表上自动应用行排她锁 3、共享(share ,s):共享锁将锁定表,仅允许其她用户查询表中的行,但不允许插入、更新、删除行。多个用户可以在同一表中放置共享锁,即允许资源共享,,因此得名“共享锁”。例如:如果用户每天都需要在结账时更新日销售额表,则可以在更新该表时使用共享锁以确保数据的一致性。 4、共享排她锁(share row exclusive,srx):执行比共享锁更多的限制。防止其 她事务在表上应用共享锁,、共享排她锁以及排她锁。 5、排她(exclusive,x):对表执行最大的限制。除了允许其她用户查询该表记录, 排她锁防止其她事务对表做任何更改或在表上应用任何类型的锁。 实例: lock table table_Name in exclusive mode; 要解锁需要锁定人执行 commit 或 rollback 或者用本文的解锁方式 (will)! --查询锁表 SELECT /*+ rule */ S、USERNAME, DECODE(L、TYPE, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', NULL) LOCK_LEVEL,

数据库试题(概念类简答和填空)

1、简述数据库的主要特征。 (1)数据结构化;(2)高度共享、低冗余;(3)数据独立性;(4)统一管理与控制,如安全性、完整性、故障恢复、并发控制等。 2、什么是数据独立?数据库系统提供了哪些级别的数据独立? 数据独立性是指应用程序和数据之间相互独立、不受影响,即数据结构的修改不引起应用程序的修改。数据独立性包括物理数据独立性和逻辑数据独立性。 3、简述DBMS提供哪几个方面数据保护功能? 数据完整性约束、数据安全性控制、并发控制、数据库恢复 ★4、数据库设计分成哪几个阶段? 需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行与维护 5、试述数据库三级模式和二级映象功能与数据独立性的关系。 三级模式 外模式:是模式的子集,正对用户所使用的局部数据的逻辑结构和特征的描述。 模式:对数据库中全体数据的逻辑结构和特征的描述。 内模式:是对数据物理结构和存储方式的描述。 二级映像 模式/外模式,保证了数据与程序的逻辑独立性。 模式/内模式,保证了数据与程序的物理独立性。 6、DBA的职责 数据库概念设计,逻辑和物理设计,定义安全和约束,数据库运行和监督,数据库维护7、DBMS的主要功能 数据定义 数据操纵 数据库运行管理:数据完整性约束、数据安全性控制,并发控制,数据库恢复(DBMS 提供的数据保护功能) 数据库建立和维护 8、关系数据库的特点 优点:(1)建立在严格数学基础上;(2)概念单一,简单易懂;(3)存取路径对用户透明; 缺点:由于存取路径对用户透明,所以存取速度没有非关系数据库快 ★9、DBMS的存取机制 自主存取控制:用户对于不同的数据库对象有不同的存取权限,不同用户对同一数据库对象的权限也不一样,用户还可以将自己的权限转授给其他用户 强制存取控制:数据库对象有不同的密级,用户被授予某一级别的许可证。对于任意一个数据库对象,只有拥有合法许可证才可以存取 ★10、简述数据、数据库、数据库管理系统和数据库系统 数据:描述事物的符号 数据库:长期存在于计算机上的,有组织的,可共享的大量数据的集合 数据库管理系统:科学的组织和存储数据,高效的获取和维护数据的软件系统 数据库系统:有数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统 11、什么是数据库的完整性约束条件 完整性约束条件是指数据需要遵循的语义约束条件

如何对行 表 数据库加锁

如何对行表数据库加锁 1如何锁一个表的某一行 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT*FROM table ROWLOCK WHERE id =1 2锁定数据库的一个表 SELECT*FROM table WITH (HOLDLOCK) 加锁语句: sybase: update表set col1=col1 where1=0 ; MSSQL: select col1 from表(tablockx) where1=0 ; oracle: LOCK TABLE表IN EXCLUSIVE MODE ; 加锁后其它人不可操作,直到加锁用户解锁,用commit或rollback解锁 几个例子帮助大家加深印象 设table1(A,B,C) A B C a1 b1 c1 a2 b2 c2 a3 b3 c3 1)排它锁 新建两个连接 在第一个连接中执行以下语句 begin tran update table1 set A='aa' where B='b2' waitfor delay '00:00:30'--等待30秒 commit tran 在第二个连接中执行以下语句 begin tran select*from table1 where B='b2' commit tran

若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒 2)共享锁 在第一个连接中执行以下语句 begin tran select*from table1 holdlock-holdlock人为加锁 where B='b2' waitfor delay '00:00:30'--等待30秒 commit tran 在第二个连接中执行以下语句 begin tran select A,C from table1 where B='b2' update table1 set A='aa' where B='b2' commit tran 若同时执行上述两个语句,则第二个连接中的select查询可以执行 而update必须等待第一个事务释放共享锁转为排它锁后才能执行即要等待30秒 3)死锁 增设table2(D,E) D E d1 e1 d2 e2 在第一个连接中执行以下语句 begin tran update table1 set A='aa' where B='b2' waitfor delay '00:00:30' update table2 set D='d5' where E='e1' commit tran 在第二个连接中执行以下语句 begin tran update table2 set D='d5' where E='e1'

Oracle查看被锁定的表和行的SQL

我们在操作数据库的时候,有时候会由于操作不当引起数据库表被锁定,这么我们经常不知所措,不知怎么给这些表解锁,在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以查询现在存在的会话,但是我们很难找到那个会话被锁定了,想找到所以被锁的会话就 更难了,下面这叫查询语句可以查询出所以被锁的会话。如下: SELECT https://www.wendangku.net/doc/583857392.html,ername, m.SID,sn.SERIAL#, m.TYPE, DECODE (m.lmode, 0, 'None', 1, 'Null', 2, 'Row Share', 3, 'Row Excl.', 4, 'Share', 5, 'S/Row Excl.', 6, 'Exclusive', lmode, LTRIM (TO_CHAR (lmode, '990')) ) lmode, DECODE (m.request, 0, 'None', 1, 'Null', 2, 'Row Share', 3, 'Row Excl.', 4, 'Share', 5, 'S/Row Excl.',

6, 'Exclusive', request, LTRIM (TO_CHAR (m.request, '990')) ) request, m.id1, m.id2 FROM v$session sn, v$lock m WHERE (sn.SID = m.SID AND m.request != 0) OR ( sn.SID = m.SID AND m.request = 0 AND lmode != 4 AND (id1, id2) IN ( SELECT s.id1, s.id2 FROM v$lock s WHERE request != 0 AND s.id1 = m.id1 AND s.id2 = m.id2) )ORDER BY id1, id2, m.request; 通过以上查询知道了sid和SERIAL#就可以开杀了 alter system kill session 'sid,SERIAL#';

关系数据库的基本概念应用

★事业单位考试专用★ 数据库 1.数据模型(Data Models):在数据库中用数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。通俗地讲数据模型就是现实世界的模拟。 2.数据模型应满足三方面要求:能比较真实地模拟现实世界;容易为人所理解;便于在计算机上实现。 3.数据模型:按计算机的观点对数据建模,主要用于DBMS的实现。一般有层次,网状,关系三种。 4.矩形:表示实体集;菱形:表示联系集;线:连接实体集与联系集或属性与实体集;椭圆:表示属性;下划线:主码属性。 5.常用数据模型:层次模型、网状模型、关系模型、面向对象模型。 6.层次模型的存储结构:邻接法:前序穿线树;链接法:用指针表示层次关系(子女-兄弟链接法,层次序列链接法)。(众) 7.网状模型存储结构:链接法:用指针表示层次关系(单链,双链,环链等)。(S_XH,C_KCH) 8.关系模型中,关系的每一个分量必须是一个不可分的数据项。 9.SQL语言的REVOKE语句实现安全性数据控制功能。 10.数据仓库通常采用三层体系结构、底层的数据仓库服务器一般是一个关系型数据库系统、数据仓库前端分析工具中包括报表工具。 11.Linux是一套免费使用和自由传播的类Unix操作系统、Linux提供强大的应用程序开发环境,支持多种编程语言、Linux提供对TCP/IP协议的完全支持。 12.Solaris是SUN公司的高性能Unix,Solaris运行在许多RISC工作站和服务器

上,Solaris支持多处理、多线程。 13.Unix系统的特色:交互的分时系统、以全局变量为中心的模块结构、可以分成内核和外壳。Unix系统中进程由三部分组成:进程控制块,正文段和数据段。Unix系统中,输入/输出设备被看成是特殊文件。 14.属于企业级的大型数据库管理系统的主要有Oracle、DB2、Informix、Sybase 、SQL Server。 15.DBA是数据库系统的一个重要组成,有很多职责:定义数据库的存储结构和存取策略、定义数据库的结构、定期对数据库进行重组和重构。 16.对于数据量大的网站,应选用的数据库是DB2。 17.关系代数表达式的优化策略中,首先要做的是尽早执行选择运算。

数据库解除死锁方法

先查看哪些表被锁住了: 杀进程中的会话: 如果有ora-00031错误,则在后面加immediate;alter system kill session '29,5497' immediate; 如何杀死oracle死锁进程

1.查哪个过程被锁: 查V$DB_OBJECT_CACHE视图: SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='过程的所属用户' AND CLOCKS!='0'; 2. 查是哪一个SID,通过SID可知道是哪个SESSION: 查V$ACCESS视图: SELECT * FROM V$ACCESS WHERE OWNER='过程的所属用户' AND NAME='刚才查到的过程名'; 3. 查出SID和SERIAL#: 查V$SESSION视图: SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID'; 查V$PROCESS视图: SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR'; 4. 杀进程: (1)先杀ORACLE进程: ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#'; (2)再杀操作系统进程: KILL -9 刚才查出的SPID或ORAKILL 刚才查出的SID 刚才查出的SPID。 Oracle的死锁 查询数据库死锁:

查询出来的结果就是有死锁的session了,下面就是杀掉,拿到上面查询出来的SID和SERIAL#,填入到下面的语句中: alter system kill session 'sid,serial#'; 一般情况可以解决数据库存在的死锁了,或通过session id 查到对应的操作系统进程,在Unix中杀掉操作系统的进程。 然后采用kill (unix)或orakill(windows )。 在Unix中: 经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。 1)查找死锁的进程: 2)kill掉这个死锁的进程: alter system kill session ‘sid,serial#’; (其中sid=l.session_id) 3)如果还不能解决:

数据库系统的基本概念

1.4 数据库设计基础 考点17 数据库系统的基本概念 1、数据、数据库、数据库管理系统和数据库系统 (1)数据 数据(Data)是描述事物的符号记录。 数据:在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据,数据经过加工后就成为信息。 在计算机科学中,数据是指所有能输入到计算机并被计算机程序处理的符号的介质的总称,是用于输入电子计算机进行处理,具有一定意义的数字、字母、符号和模拟量等的通称。 (2)数据库 数据库(Database, DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。 数据库是一个单位或是一个应用领域的通用数据处理系统,他存储的是属于企业和事业部门、团体和个人的有关数据的集合。数据库中的数据是从全局观点出发建立的,他按一定的数据模型进行组织、描述和存储。其结构基于数据间的自然联系,从而可提供一切必要的存取路径,且数据不再针对某一应用,而是面向全组织,具有整体的结构化特征。 数据库中的数据是为众多用户所共享其信息而建立的,已经摆脱了具体程序的限制和制约。不同的用户可以按各自的用法使用数据

库中的数据;多个用户可以同时共享数据库中的数据资源,即不同的用户可以同时存取数据库中的同一个数据。数据共享性不仅满足了各用户对信息内容的要求,同时也满足了各用户之间信息通信的要求。 (3)数据库管理系统 数据库管理系统(Database Management System, DBMS)是数据库的机构,它是一个系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。 数据库管理系统的主要类型有4种:文件管理系统,层次数据库系统,网状数据库系统和关系数据库系统,其中关系数据库系统的应用最为广泛。 数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过它访问数据库中的数据,数据库管理员也通过它进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。DBMS 提供数据定义语言DDL(Data Definition Language)与数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。 (4)数据库系统 数据库系统(Database System, DBS)是指引进数据库技术后的整个计算机系统,能够实现有组织地、动态地存储大量相关数据,

数据库死锁定位及解决方案描述

问题描述: 系统业务繁忙时(特别是周一或周五),Oracle数据库出现死锁现象,造成数 据库挂起,业务中断。 问题定位 首先分析数据库后台日志alert_raca1.log,alert_raca2.log,发现数据库死 锁信息: Global Enqueue Services Deadlock detected. More info in file /oracle/admin/raca/bdump/raca1_lmd0_807258.trc. Fri Mar 12 14:55:15 2010 Global Enqueue Services Deadlock detected. More info in file /oracle/admin/raca/bdump/raca1_lmd0_807258.trc … 找到相应的trace文件中的信息进行分析: user session for deadlock lock 70000020a0d60a0 pid=138 serial=70 audsid=14754928 user: 49/GFCOB O/S info: user: , term: , ospid: 1234, machine: GF14 program: Current SQL Statement: update WF_TASKINFO set processInfoId=:1, taskInstanceId=:2, nodeId=:3, taskName=:4, taskDescription=:5, status=:6, startDate=:7, handleGroup=:8, handleBy=:9, createdDate=:10, endedGroup=:11, endedBy=:12, endedDate=:13, expectedEndDate=:14, ownerType=:15, lockedBy=:16, lockedDate=:17, priority=:18, nodeType=:19, isBacked=:20, isCopied=:21, isSuspended=:22, tokenId=:23, extendField=:24, lastTaskInfoId=:25 where taskInfoId=:26 user session for deadlock lock 70000020a0d5f50 pid=246 serial=77 audsid=14754935 user: 49/GFCOB O/S info: user: , term: , ospid: 1234, machine: GF14 program: Current SQL Statement: update HIS_GDB_B_BUSINESSISSUE set operateId=:1, taskInfoId=:2, handleGroup=:3, handleBy=:4, createdDate=:5, endedDate=:6, endedType=:7, reply=:8, remark=:9 where orderHandleHistoryId=:10 找到造成死锁的sql语句后和业务开发人员进行分析,排除了队列死锁和位图索引死锁;

数据库的基本概念

1.关系的基本操作:选择、投影、并、差、笛卡尔集。 2.声明变量的语句:declare @XXX (XXX为变量名称) 3.判断并发调度的正确性: (1)可串行性的调度:多个事务的并发执行是正确的,当且仅当其结果与某一次串行的执行这些实物的结果相同。 (2)可串行性:是并发事务调度的准则。按照这个准则,一个给定的并发调度,当且仅当他是可串行化的才认为是正确的调度。 4.事物的四个特性:原子性、一致性、隔离性和持续性。 5.定义视图: Create view <视图名称>[(列名)[,(列名)]] As <子查询> [with check option] 6.关系数据理论: 7.范式: (1)第二范式:若R∈1NF,且每一个非主属性完全依赖于码,则R∈2NF (2)第三范式:非主属性中不存在传递关系。 8.角色、权限 (1)创建角色:create role <角色名> (2)给角色授权:create <权限> on <对象类型> 对象名to 角色。 9.设计中概念模型描述什么:实体、属性、码、实体型、实体集、联系。 10.关系的完整性:实体完整性、参照完整性、用户定义的完整性。 11.读锁和写锁的定义: (1)写锁:又称“排它锁”,若事物T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事物都不能对A加任何类型的锁,直到T释放A上的锁。 (2)读锁:又称“共享锁”,若事物T对数据对象A加上S锁,则事物T可以读A但不能修改A,其他事物只能对A加S锁,而不能加X锁,直到T释放A上的S锁。 简答: 1.关系模式:判断是第几范式,分析指出主键、外键P175 例题4 2.举例说明参照完整性(外键取值的几种情况)P49例题1,例题2,例题3 3.数据库的设计步骤、任务。 (1)需求分析(2)概念结构设计(3)逻辑结构设计(4)物理结构设计 (5)数据库实施(6)数据库运行和维护 4.描述并发调度中锁的概念、作用 (1)概念:事物T对某个数据对象操作之前,先向系统发出申请,对其加锁。加锁后的事物T就对该数据对象有了一定的控制,在事物T释放它的锁之前,其他的事物不能更新此数据对象。 (2)作用:解决了事物并发过程中可能出现的丢失修改、不可重复读、读“脏”数据。

MySQL 数据库锁定机制

MySQL 数据库锁定机制 MySQL 数据库锁定机制简介 ●行级锁定(row-level) 行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。 虽然能够在并发处理能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由于锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也更多,带来的消耗自然也就更大了。此外,行级锁定也最容易发生死锁。 ●表级锁定(table-level) 和行级锁定相反,表级别的锁定是MySQL 各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。当然,锁定颗粒度大所带来最大的负面影响就是出现

锁定资源争用的概率也会最高,致使并大度大打折扣。 ●页级锁定(page-level) 页级锁定是MySQL 中比较独特的一种锁定级别,在其他数据库管理软件中也并不是太常见。页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者之间。另外,页级锁定和行级锁定一样,会发生死锁。 在数据库实现资源锁定的过程中,随着锁定资源颗粒度的减小,锁定相同数据量的数据所需要消耗的内存数量是越来越多的,实现算法也会越来越复杂。不过,随着锁定资源颗粒度的减小,应用程序的访问请求遇到锁等待的可能性也会随之降低,系统整体并发度也随之提升。 在MySQL 数据库中,使用表级锁定的主要是MyISAM,Memory,CSV 等一些非事务性存储引擎,而使用行级锁定的主要是Innodb 存储引擎和NDB Cluster 存储引擎,页级锁定主要是BerkeleyDB 存储引擎的锁定方式。MySQL 的如此的锁定机制主要是由于其最初的历史所决定的。在最初,MySQL 希望设计一种完全独立于各种存储引擎的锁定机制,而且在早期的MySQL 数

数据库的概念

第1章数据库的概念 本章主要介绍数据库的意义、数据库的发展史、数据库的体系结构、数据库系统以及数据库管理系统等内容,以便读者对数据库的概念有一个基本的了解。 1.1 数据库的意义 1.1.1 信息处理及数据处理 诞生于20世纪中叶的计算机科学较之其他现代科学技术的发展更迅速,在21世纪到来之际,它几乎可以称为“知识爆炸”了。21世纪是信息和知识的社会,如何组织和利用这些庞大的信息和知识已成为衡量一个国家科学技术水平高低的重要标志。 早在20世纪60年代,数据库技术作为现代信息系统基础的一门软件学科便应运而生了。现在,数据库技术已成为计算机领域中最重要的技术之一,它是软件学科中一个独立的分支。它的出现使得计算机应用渗透到工农业生产、商业、行政、教育、科学研究、工程技术和国防军事的各个部门。管理信息系统(MIS)、办公自动化系统(OA)、决策支持系统等都是使用了数据库管理系统或数据库技术的计算机应用系统。 数据库(Database,即DB)是存储在一起的相关数据的集合,是存储数据的“仓库”。因此,要理解数据库就需要先了解在数据处理领域中常遇到的两个基本概念:“信息”(information)和“数据”(data)。 信息是关于现实世界事物的存在方式或运动状态的反映的组合。例如,上课用的黑板,它的颜色是黑的,形状是矩形,尺寸是长3.2m,高1.4m,材料是木材,这些都是关于黑板的信息,都是关于黑板的存在状态的反映,从不同角度“反映”或“刻画”了黑板这个事物。信息源于物质和能量,一切事物,包括自然和人类都产生信息,信息是物质和能量形态的反应,它不可能脱离物质而存在。信息传递需要物质载体,信息的获取和传递要消耗能量。信息是可以感知的和存储的,并且可以加工、传递和再生。电子计算机是信息处理领域中最先进的工具之一,人类对收集到的信息可以进行取舍整理。几乎和信息同样广泛使用的另一个概念是“数据”。所谓数据,通常指用符号记录下来的可加以鉴别的信息。例如,为了描述黑板的信息,可以用一组数据“黑色、矩形、3.2m×1.4m”来表示,由于“黑色”、“矩形”、“3.2”、“m”……这些符号已经被人们赋予了特定的语义,所以它们就具有了传递信息功能。

数据库中的锁

数据库锁的基本概念 为了确保并发用户在存取同一数据库对象时的正确性(即无丢失修改、可重复读、不读“脏”数据),数据库中引入了锁机制。基本的锁类型有两种:排它锁(Exclusive locks记为X锁)和共享锁(Share locks记为S锁)。 排它锁:若事务T对数据D加X锁,则其它任何事务都不能再对D加任何类型的锁,直至T释放D上的X锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为写锁。共享锁:若事务T对数据D加S锁,则其它事务只能对D加S锁,而不能加X锁,直至T 释放D上的S锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读锁。 2 Oracle 多粒度封锁机制介绍 根据保护对象的不同,Oracle数据库锁可以分为以下几大类: (1) DML lock(data locks,数据锁):用于保护数据的完整性; (2) DDL lock(dictionary locks,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义); (3) internal locks 和l a t c h es(内部锁与闩):保护内部数据库结构; (4) distributed locks(分布式锁):用于OPS(并行服务器)中; (5) PCM locks(并行高速缓存管理锁):用于OPS(并行服务器)中。 本文主要讨论DML(也可称为data locks,数据锁)锁。从封锁粒度(封锁对象的大小)的角度看,Oracle DML锁共有两个层次,即行级锁和表级锁。 2.1 Oracle的TX锁(行级锁、事务锁) 许多对Oracle不太了解的技术人员可能会以为每一个TX锁代表一条被封锁的数据行,其实不然。TX的本义是Transaction(事务),当一个事务第一次执行数据更改(Insert、Update、Delete)或使用SELECT… FOR UPDATE语句进行查询时,它即获得一个TX(事务)锁,直至该事务结束(执行COMMIT或ROLLBACK操作)时,该锁才被释放。所以,一个TX锁,可以对应多个被该事务锁定的数据行。 在Oracle的每行数据上,都有一个标志位来表示该行数据是否被锁定。Oracle不象其它一些DBMS(数据库管理系统)那样,建立一个链表来维护每一行被加锁的数据,这样就大大减小了行级锁的维护开销,也在很大程度上避免了其它数据库系统使用行级封锁时经常发生的锁数量不够的情况。数据行上的锁标志一旦被置位,就表明该行数据被加X锁,Oracle在数据行上没有S锁。 2.2 TM锁(表级锁) 2.2.1 意向锁的引出 表是由行组成的,当我们向某个表加锁时,一方面需要检查该锁的申请是否与原有的表级锁相容;另一方面,还要检查该锁是否与表中的每一行上的锁相容。比如一个事务要在一个表上加S锁,如果表中的一行已被另外的事务加了X锁,那么该锁的申请也应被阻塞。如果表中的数据很多,逐行检查锁标志的开销将很大,系统的性能将会受到影响。为了解决这个问题,可以在表级引入新的锁类型来表示其所属行的加锁情况,这就引出了“意向锁”的概念。意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。如:对表中的任一行加锁时,必须先对它所在的表加意向锁,然后再对该行加锁。这样一来,事务对表加锁时,就不再需要检查表中每行记录的锁标志位了,系统效率得以大大提高。 2.2.2 意向锁的类型 由两种基本的锁类型(S锁、X锁),可以自然地派生出两种意向锁: 意向共享锁(Intent Share Lock,简称IS锁):如果要对一个数据库对象加S锁,首先要对其上级结点加IS锁,表示它的后裔结点拟(意向)加S锁;

数据库常用表

用友数据库常用表 数据库中重要表的讲解 1、.ufysftem库此库是系统参数数据库 其中主要存放各个帐套的共用信息 意义很大 日常应用的也很多。 A ua_account 是帐套信息表 其中系统帐套存放路径、帐套启用年度、帐套启用月份、企业类型、行业性质等字段特别重要。 B ua_account_sub 帐套各模块启用月度及最大结帐月表 其中子系统id 字段、最大结帐月字段、子系统启用日期字段十分重要。 C ua_period 帐套会计日期划分表。 D ua_task 异常任务记录表01(在所有模块退出后 此表应为空) E ua_tasklog 异常任务记录表02 同上 F ua_log 上机日志表 G ua_tonextyear 建立下年年度帐时要建立的表 此表也特别重要 在建立年度帐失败时 一般可从此表记录的内容进行排查 以发现上年度是哪张表有问题 . H、ua_holdauth 记录每个操作员在每个帐套每个年度的分配权限。 2、ufdata_00n_200x库此数据库叫应用数据库 命名规则是ufdata_帐套编号_年度 四位计数 其中主要存放每个年度的帐务数据 包括各个模块的数据。在数据表中 命名方法是模块代码_表名。其中 ap代表应付 ar代表应收;gl代表总帐;wa代表工资 fa代表固定资产;pu代表采购 sa代表销售 st代表库存;ia代表存货 fd代表资金管理;ca代表成本等。 A accinformation 帐套参数表 包括财务和购销存模块设置选项中定义的所有参数 如启用时间、系统年度等等。 B ap_closebill 收付款结算表 主要记录收款单、付款单的内容 C ap_detail 应收应付明细表 主要记录已结算的采购发票和已审核的销售发票所形成的应收应付记录。 D ap_vouch/s 应付/收单主子表 记录销售已审核的代垫费用单 应收、应付单等的表头和表体记录。 E ap_vouchtype 单据类型表 主要记录应收应付系统所使用的各种单据的类型和代码。 F currentstock 现存量表 写入存货的不同自由项、所在仓库到目前为止的结存数量和结存件数。 G customer 客户档案表 写入客户的记录。 H dispatchlist/s 发货单、委托代销结算单主子表 主表写入表头内容 子表写入表体内容。 I Dsign 凭证类别表 定义凭证类别的记录。 J endispatch/s 委托代销发货单主子表。 K gl_accass 辅助总帐表 写入带有辅助核算科目的期初余额以及凭证记帐之后带有辅助核算科目的记录。 L gl_accsum 科目总帐表 写入科目的期初余额和凭证记帐之后科目的增加变化记录。 M gl_accvouch 凭证及明细帐表 写入带有个人往来、供应商往来、客户往来的科目的期初余额及所有模块填制的凭证的明细记录。

相关文档