MySQL实现类似Oracle序列的方案

MySQL实现类似Oracle序列的方案,第1张

MySQL实现类似Oracle的序列

Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的;

但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、是否循环等;若需要迁移数据库,则对于主键这块,也是个头大的问题。

本文记录了一个模拟Oracle序列的方案,重点是想法,代码其次。

Oracle序列的使用,无非是使用nextval和currval伪列,基本想法是:

1、MySQL中新建表,用于存储序列名称和值;

2、创建函数,用于获取序列表中的值;

具体如下:

表结构为:

drop

table

if

exists

sequence;

create

table

sequence

(

seq_name

VARCHAR(50)

NOT

NULL,

--

序列名称

current_val

INT

NOT

NULL,

--当前值

increment_val

INT

NOT

NULL

DEFAULT

1,

--步长(跨度)

PRIMARY

KEY

(seq_name)

);

实现currval的模拟方案

create

function

currval(v_seq_name

VARCHAR(50))

returns

integer

begin

declare

value

integer;

set

value

=

0;

select

current_value

into

value

from

sequence

where

seq_name

=

v_seq_name;

return

value;

end;

函数使用为:select

currval('MovieSeq');

实现nextval的模拟方案

create

function

nextval

(v_seq_name

VARCHAR(50))

return

integer

begin

update

sequence

set

current_val

=

current_val

+

increment_val

where

seq_name

=

v_seq_name;

return

currval(v_seq_name);

end;

函数使用为:select

nextval('MovieSeq');

增加设置值的函数

create

function

setval(v_seq_name

VARCHAR(50),

v_new_val

INTEGER)

returns

integer

begin

update

sequence

set

current_val

=

v_new_val

where

seq_name

=

v_seq_name;

return

currval(seq_name);

同理,可以增加对步长 *** 作的函数,在此不再叙述。

注意语法,数据库字段要对应上

use

bvboms;

DELIMITER

$$

create

function

setval(v_seq_name

VARCHAR(50),

v_new_val

INTEGER)

returns

integer

begin

update

sequence

set

current_val

=

v_new_val

where

seq_name

=

v_seq_name;

return

currval(seq_name);

end

$$

DELIMITER

$$

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

您可能感兴趣的文章:mysql实现sequence功能的代码Can''t

connect

to

local

MySQL

through

socket

''/tmp/mysqlsock''解决方法Mysql常用函数大全(分类汇总讲解)利用MySQL主从配置实现读写分离减轻数据库压力mysql+spring+mybatis实现数据库读写分离的代码配置Golang中如何对MySQL进行 *** 作详解将储存在MySQL数据库中的几种方法MySQL存储文本和的方法Ubuntu上mysql的安装及使用(通用版)nodejs同步调用获取mysql数据时遇到的大坑

mysql 里没有这个东西!

好像你在建表的时候可以这么写!

create table test(id int not null primary key auto_increment);

主要是auto_increment

16S r DNA是细菌系统分类学中最有用的和最常用的分子钟,存在于所有生物中,其进化具有良好的时钟性质,在结构和功能上具有高度的保守性,素有“细菌化石”之称。16S 大小适中,约15 kb左右,方便用于PCR扩增和测序,故被细菌学家及分类学家所接受,成为系统发育关系分类的标准方法。16S rDNA结构由可变区和恒定区组成,不同细菌的恒定区序列基本保守,而可变区序列则因细菌而异。所以,可以根据其恒定区的序列设计引物将16S rDNA扩增出来,利用可变区序列的差异来对不同的细菌进行分类。目前,已对2000种(约相当于细菌种数4000的50%)以上细菌的16S rDNA进行了测序。在分类过程中,只需要将待定的菌的16S 序列测定,然后从数据库中调取所需的16S 序列,利用一些必要的分析软件对它们进行同源性比较,进而绘制进化树。大量的研究表明,16S 的同源性分析最适用于属及属以上的远缘关系的分类鉴定。

虽然23S rDNA的序列包含的遗传信息更加丰富,且还存在高度变异区 (hypervariable regions),具有种间、甚至菌株间的特异性,适合亲缘关系更近的菌的

分类。近年来,根据23S rDNA序列进行分类的报道也有很多,其结果一般都显示,依据23S 序列的分类与16s序列分类的结果一致性很好。但是,23S 长度约为3 kb,不利于扩增和测序,且目前仅有少数种的核酸序列被报道,在细菌分类和鉴定中的应用还局限于一定的范围,远没有16S 序列应用的广泛。

有两种连接方法:

一、 纯 *** 作实现

第一步:数据库 *** 作

1、打开SqlServer2005的企业管理器,如果当前运行的不是local服务器,则将其删除,接着新建SqlServer注册,添加local,实现注册。

2、右击local下的数据库,选择所有任务,再选择附加数据库,将会d出附加数据库窗口,选择你将要附加的数据,数据库名及数据库用户名,然后确定,附加成功。

注意:当数据库用完后,需要分离数据库,然后将其保存。右击数据库---所有任务---分离数据库,则完成。

第二步:Vistualstudio中 *** 作

1、 新建项目,选择windows窗体应用程序。

2、 在form1窗体中,添加工具箱---数据---DataGridview

3、 选择DataGridview上边框的三角符合,选择选择数据源下添加项目数据源,然后选择数据库,下一步选择新建连接下的SqlServer,然后继续,d出添加连接窗口,在该窗口中的服务器名下填写英文点号(),登陆到服务器选择使用SqlServer身份验证,填写数据库用户名和密码,然后选择你的数据库,然后测试连接,如果成功则说明连接成功。

4、 在VistualStudio中运行你的文件,这时form1中添加的DataGridview中会出现逆的数据表。

二、代码实现

1、 新建项目,选择windows窗体应用程序。

2、 在form1窗体中,添加工具箱中数据中的---DataGridview

3、双击,form1窗体,首先在form1的头部添加两条:using Systemdata;using SystemdataSqlclient 。然后再form1_load()事件中编写如下代码:

String constr=”data source=;intial catalog=student;user id=sa;password=”; //连接数据库服务器

SqlConnection conn=new SqlConnection(constr); //SQL连接类的实例化

Connopen(); //打开数据库

Messageboxshow(“连接成功!”); //d出窗口,用于测试数据库连接是否成功。

String sql=“select from student”; //执行的查询语句

SqlDataAdapeter find=new SqlDataAdapter(sql,conn); // 创建DataAdapter数据适配器实例,SqlDataAdapter作用是 DataSet和 SQL Server之间的桥接器,用于检索和保存数据

DataSet save=new DataSet(); //创建DataSet实例

findFill(save,"wu"); // 使用DataAdapter的Fill方法(填充),调用SELECT命令 fill(对象名,"自定义虚拟表名")

DataGridView1Datasource=saveTables[0]; // 向DataGridView1中填充数据

connclose(); //关闭数据库

1B 2C 3B 4C 5D 6C 7C 8D 9C 10A

11A 12A 13A - 不知道14。乙evogue2006 - 10 - 24 11点47分01秒1516A 17B 18A 19D 20C

试述事务的概念和事务的四个特性。

A:

事务是一个用户定义的数据库 *** 作序列,这些 *** 作要么全部做或不做的整体,是一个不可分割的工作单元。

事务有四个特点:原子性(原子性),一致性(一致性),隔离(隔离)和持久性(Durability)。这四个特点也被称为ACID属性。

原子性:事务数据库的逻辑工作单元,该交易包括所有的 *** 作,无论是做还是不做。

一致性:事务执行的结果必须更改数据库从一个一致状态转换到另一个一致的状态。

隔离:一个事务的执行不能被其他事务的干扰。一个事务内的 *** 作和使用其他并发事务的数据分离出来,并发执行的个别交易不能互相干扰。

持续性:持续性的,也被称为永久(持久性),指的到交易提交其数据存储在数据库中的变化应该是永久性的。接下来的 *** 作或故障不应该有任何影响其执行结果。

2。为什么事务非正常时间的推移,会影响数据库中数据的正确性,举了一个例子。

A:

事务的执行结果必须更改数据库从一个一致状态转换到另一个一致状态。如果出现故障的数据库系统的 *** 作,一些尚未完成的交易被迫中断,这些未完成的交易的一部分已被写入到物理数据库对数据库所做的更改,然后在数据库中不正确的状态,或者是不一致的状态。

如一个工厂的库存管理系统,它是必要的量Q的某些部分从仓库1仓库2个存储。

你可以定义一个事务T,T包括两个 *** 作; Q1 = Q1-Q,Q2 = Q2 + Q T改变的终止,只有当第一个 *** 作,数据库是不一致Q库存没有理由。

3。数据库中为什么要有恢复子系统?它的功能是什么?

A:

是不可避免的,因为计算机系统的硬件故障,软件错误, *** 作错误和恶意破坏所造成的这些故障从正在运行的事务中发生非正常中断,影响数据库中的数据正确性,而破坏了数据库中,因此,在数据库中的数据的全部或部分损失,因此必须有一个恢复子系统。功能

恢复子系统:数据库从错误状态恢复到一个已知的良好状态(也被称为一致的状态或完整状态)。

4。在数据库中可能出现的故障运行几类?什么故障影响正常执行的交易吗?什么故障破坏数据库中的数据?

A:数据库系统的各种可能发生的故障大致可分为如下几类:

(1)内部交易失败;

(2)系统故障; />(3)介质故障;

(4)计算机病毒。的

交易失败,系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏的数据

库。

5。根据回收技术?

A:

数据转储和登录日志文件是数据库恢复的基本技术。

当一个故障在系统运行过程中,转储数据库的日志文件,你可以将数据库恢复到一致状态,在发生故障之前的备份副本。

6。数据库的转储的意义是什么?各种数据转储方法的比较。

答案:

数据转储是基本的技术,在恢复的数据库。所谓的转储数据库DBA定期复制到磁带或其他磁盘保存。可以重新加载数据库破坏的数据库的备份副本恢复时的状态转储。

静态转储:转储系统 *** 作运行的事务。静态转储,但必须等待用户交易结束之前运行。同样,新的事务必须等待执行转储结束。显然,这将减少数据库的可用性。

动态转储:转储期间允许数据库访问或。动态的转储可以克服静态转储的缺点,它并不需要等待正在运行的用户交易的结束,也不会影响新事务的 *** 作。然而,备份的数据副本结束时的转储和不能保证正确和有效的。 ,因为转储运行在交易过程中可能会一些数据,备份的数据副本是不符合版本的数据库。

为此,我们必须活动期间注册使用dump transaction数据库,以创建一个日志文件(日志文件)。在这样的日志文件的备份副本可以得到正确的数据库状态的时刻。

转储海量转储和增量转储可以分为两种方式。

大规模倾倒每一个转储所有数据库。增量转储每次更新只转储上次转储数据。从恢复的角度来看,大量的转储的备份副本恢复一般更容易。如果该数据库,事务处理,是非常频繁,增量转储方式更实用,更有效。

7。日志文件?为什么要建立一个日志文件?

答案:

(1)日志文件是用来记录交易文件对数据库的更新 *** 作。

(2)建立的日志文件的目的:交易故障恢复系统故障恢复;协助媒体恢复的备份副本。

登记日志文件为什么要写入日志文件后,写入到数据库?

A:

的数据写入到数据库中,两种不同的 *** 作,这个后的日志记录被写入到日志文件中。这两个 *** 作之间可能发生了故障,即这两个写 *** 作只完成了。

先写一个数据库,而不是变化的运行记录中,小数点后不能被恢复这一。如果你写的日志,但没有数据库,恢复执行UNDO *** 作,不影响数据库的正确性。所以一定要确保你写的日志文件,日志记录写入到日志文件中,然后写入到数据库的变化。

9,测试是针对不同的故障恢复策略和方法。 (也就是说,如何进行交易系统故障恢复故障恢复介质恢复?)

A:

交易故障恢复:

事务故障的恢复是自动完成的DBMS ,是对用户透明。

DBMS执行恢复步骤:

(1)反向扫描文件日志(即从最后一次扫描日志文件),则该事务更新 *** 作。

(2)事务的更新 *** 作执行逆 *** 作。关于日志记录更新前值吗?写入到数据库中。

(3)反向扫描日志文件,做同样的。

(4)?下去,直到你读的开始标记本次交易,交易失败恢复完整。

A:

系统故障恢复:

系统出现故障可能会导致数据库处于不一致的状态:

首先,没有完成的交易数据库的更新可能已被写入到数据库中;

已提交的交易数据库的更新可能还留在缓冲区中,并没有写入到数据库。

恢复 *** 作(UNDO)的未竟事业出现故障,重做(REDO)已完成的交易。

恢复步骤:

(1)正向扫描日志文件,以确定该交易已提交在故障发生前队列中(REDO队列的)和未完成的事务队列(UNDO队列)。

(2)UNDO处理队列中的个别交易的。

UNDO处理方法是反向扫描日志文件,更新 *** 作执行相反的 *** 作,每一个UNDO事务迫在眉睫的“价值”(前映像)记录写入到数据库中,然后再更新。

(3)治疗重做重做队列事务。

REDO处理方法:正向扫描日志文件,每个REDO事务重新执行 *** 作的日志文件登记。即将推出的日志记录写入到数据库中的更新值“(后映像)。

分辨率:

步骤(1)如何确定的REDO队列和UNDO队列,请考虑一下吧。 BR />的算法如下:

1)创建两个事务队列:

·UNDO-LIST:需要执行undo *** 作的事务集;

·REDO-LIST:需要执行重做 *** 作事务集;

事务队列最初是空的。

)从日志文件头,正向扫描日志文件

是否有新的开始(遇到BEGIN TRANSACTION)交易钛,钛暂时放入UNDO-LIST队列;

·如果提交的事务(遇到结束事务)TJ TJ从队列undo-list中的REDO-LIST队列;

直到最后的日志文件A:

介质故障恢复:

介质故障是最严重的故障。

恢复方法是重装数据库,然后重做已完成交易的过程是:

(1 )DBA装入最新的数据库备份(从故障时间最近的转储副本),将数据库恢复到一致的状态转储。

(2)DBA的日志文件的副本加载转储结束时间

(3)DBA启动系统恢复命令来完成还原的DBMS的功能,重做已完成的交易。

解析

1)我们假设静态转储的步骤(1)安装数据库的备份副本。

2)如果您使用的是静态和动态转储步骤(1)将数据库的备份副本是不够的,需要同时加载的副本日志文件的转储开始治疗后的时间,以获得正确的数据库的备份副本。

3)(2)步算法来重做已完成的交易:

正向扫描日志文件,以找出识别在故障发生之前提交的交易中,计入的重量队列

B。再次向前扫描日志文件,重做重做队列中的所有交易。即将推出的日志记录写入到数据库中的更新值。

>

10。检查点恢复技术的优势是什么?

A:

测井技术进行数据库恢复,恢复子系统必须搜索日志,以确定哪些事务需要重做,哪些事务需要。一般来说,你需要检查所有的记录。这样做有两个问题:

首先,搜索整个日志将花费大量的时间。

REDO处理的事务实际上写的更新 *** 作数据库恢复子系统又执行这些 *** 作,浪费了大量的时间。

检查点技术,以解决这些问题。

11。师叔检查点的恢复步骤。

①从启动文件的最后一个检查点记录在日志文件中的地址找到最后一个检查点记录在日志文件中找到的地址。

②检查站的检查点记录的建立时间列表中的所有运行的事务ACTIVE-LIST。

创建两个事务队列:

·UNDO-LIST:需要执行undo *** 作的事务集;

·REDO-LIST:集交易需要执行恢复 *** 作;

ACTIVE-LIST暂时到UNDO-LIST队列,REDO队列暂时空。

③从检查点开始正向扫描日志文件

任何新的起点事务钛undo-list中的Ti暂时放置在队列中;

·如果提交事务TJ,TJ移动从UNDO-LIST队列,REDO-LIST队列,直到最后的日志文件;

>④UNDO *** 作执行undo-list中的每一笔交易REDO-LIST中的每个事务执行REDO *** 作。

12。数据库镜像?使用?

答案:

数据库镜像是根据对DBA的要求,自动复制到另一个磁盘上的关键数据在整个数据库或部分。每当主数据库更新时,DBMS自动复制更新后的数据,在过去,DBMS自动保证镜像的一致性

使用数据库镜像的数据和主数据。:

一个用于数据库恢复。当介质故障的镜像磁盘继续提供使用的数据库管理系统自动镜像磁盘数据恢复的数据库,并且不需要关闭系统并重新安装该数据库的副本。

二是要提高无故障,当用户的数据加排他锁来其他用户可以读取的数据的数据库的可用性。镜像数据库,无需等待用户释放该锁。

1B 2C 3B 4C 5D 6C 7C 8D 9C 10A

11A 12A 13A --不太确定 14B 15C 16A 17B 18A 19D 20C

1试述事务的概念及事务的四个特性。

答:

事务是用户定义的一个数据库 *** 作序列,这些 *** 作要么全做要么全不做,是一个不可分割的工作单位。

事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这个四个特性也简称为ACID特性。

原子性:事务是数据库的逻辑工作单位,事务中包括的诸 *** 作要么都做,要么都不做。

一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。

隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的 *** 作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

持续性:持续性也称永久性(Permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他 *** 作或故障不应该对其执行结果有任何影响。

2为什么事务非正常结束时会影响数据库数据的正确性,请列举一例说明之。

答:

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。

例如某工厂的库存管理系统中,要把数量为Q的某种零件从仓库1移到仓库2存放。

则可以定义一个事务T,T包括两个 *** 作;Q1=Q1-Q,Q2=Q2+Q。如果T非正常终止时只做了第一个 *** 作,则数据库就处于不一致性状态,库存量无缘无故少了Q。

3数据库中为什么要有恢复子系统?它的功能是什么?

答:

因为计算机系统中硬件的故障、软件的错误、 *** 作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此必须要有恢复子系统。

恢复子系统的功能是:把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)。

4.数据库运行中可能产生的故障有哪几类?哪些故障影响事务的正常执行?哪些故障破坏数据库数据?

答:数据库系统中可能发生各种各样的故障,大致可以分以下几类:

(1)事务内部的故障;

(2)系统故障;

(3)介质故障;

(4)计算机病毒。

事务故障、系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏数据

库数据。

5.据库恢复的基本技术有哪些?

答:

数据转储和登录日志文件是数据库恢复的基本技术。

当系统运行过程中发生故障,利用转储的数据库后备副本和日志文件就可以将数据库恢复到故障前的某个一致性状态。

6 数据库转储的意义是什么? 试比较各种数据转储方法。

答:

数据转储是数据库恢复中采用的基本技术。所谓转储即DBA定期地将数据库复制到磁带或另一个磁盘上保存起来的过程。当数据库遭到破坏后可以将后备副本重新装入,将数据库恢复到转储时的状态。

静态转储:在系统中无运行事务时进行的转储 *** 作。静态转储简单,但必须等待正运行的用户事务结束才能进行。同样,新的事务必须等待转储结束才能执行。显然,这会降低数据库的可用性。

动态转储:指转储期间允许对数据库进行存取或修改。动态转储可克服静态转储的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的运行。但是,转储结束时后援副本上的数据并不能保证正确有效。因为转储期间运行的事务可能修改了某些数据,使得后援副本上的数据不是数据库的一致版本。

为此,必须把转储期间各事务对数据库的修改活动登记下来,建立日志文件(log file)。这样,后援副本加上日志文件就能得到数据库某一时刻的正确状态。

转储还可以分为海量转储和增量转储两种方式。

海量转储是指每次转储全部数据库。增量转储则指每次只转储上一次转储后更新过的数据。从恢复角度看,使用海量转储得到的后备副本进行恢复一般说来更简单些。但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效。

7 什么是日志文件?为什么要设立日志文件?

答:

(1)日志文件是用来记录事务对数据库的更新 *** 作的文件。

(2)设立日志文件的目的是: 进行事务故障恢复;进行系统故障恢复;协助后备副本进行介质故障恢复。

8 登记日志文件时为什么必须先写日志文件,后写数据库?

答:

把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的 *** 作。有可能在这两个 *** 作之间发生故障,即这两个写 *** 作只完成了一个。

如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次UNDO *** 作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。

9 针对不同的故障,试给出恢复的策略和方法。(即如何进行事务故障的恢复?系统故障的恢复?介质故障恢复?)

答:

事务故障的恢复:

事务故障的恢复是由DBMS自动完成的,对用户是透明的。

DBMS执行恢复步骤是:

(1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新 *** 作。

(2)对该事务的更新 *** 作执行逆 *** 作。即将日志记录中“更新前的值”写入数据库。

(3)继续反向扫描日志文件,做同样处理。

(4)如此处理下去,直至读到此事务的开始标记,该事务故障的恢复就完成了。

答:

系统故障的恢复:

系统故障可能会造成数据库处于不一致状态:

一是未完成事务对数据库的更新可能已写入数据库;

二是已提交事务对数据库的更新可能还留在缓冲区,没来得及写入数据库。

因此恢复 *** 作就是要撤销(UNDO)故障发生时未完成的事务,重做(REDO)已完成的事务。

系统的恢复步骤是:

(1)正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。

(2)对撤销队列中的各个事务进行UNDO处理。

进行UNDO处理的方法是,反向扫描日志文件,对每个UNDO事务的更新 *** 作执行逆 *** 作,即将日志记录中“更新前的值”(Before Image)写入数据库。

(3)对重做队列中的各个事务进行REDO处理。

进行REDO处理的方法是:正向扫描日志文件,对每个REDO事务重新执行日志文件登记的 *** 作。即将日志记录中“更新后的值”(After Image)写入数据库。

解析:

在第(1)步中如何找出REDO队列和UNDO队列?请大家思考一下。

下面给出一个算法:

1) 建立两个事务队列:

· UNDO-LIST: 需要执行undo *** 作的事务集合;

· REDO-LIST: 需要执行redo *** 作的事务集合;

两个事务队列初始均为空。

2) 从日志文件头开始,正向扫描日志文件

· 如有新开始(遇到Begin Transaction)的事务Ti,把Ti暂时放入UNDO-LIST队列;

· 如有提交的事务(遇到End Transaction)Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列;

直到日志文件结束

答:

介质故障的恢复:

介质故障是最严重的一种故障。

恢复方法是重装数据库,然后重做已完成的事务。具体过程是:

(1)DBA装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到转储时的一致性状态。

(2)DBA装入转储结束时刻的日志文件副本

(3)DBA启动系统恢复命令,由DBMS完成恢复功能,即重做已完成的事务。

解析

1)我们假定采用的是静态转储,因此第(1)步装入数据库后备副本便可以了。

2)如果采用的是静动态转储,第(1)步装入数据库后备副本还不够,还需同时装入转储开始时刻的日志文件副本,经过处理后才能得到正确的数据库后备副本。

3)第(2)步重做已完成的事务的算法是:

a 正向扫描日志文件,找出故障发生前已提交的事务的标识,将其记入重做队列

b 再一次正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。

10 具有检查点的恢复技术有什么优点?

答:

利用日志技术进行数据库恢复时,恢复子系统必须搜索日志,确定哪些事务需要REDO,哪些事务需要UNDO。一般来说,需要检查所有日志记录。这样做有两个问题:

一是搜索整个日志将耗费大量的时间。

二是很多需要REDO处理的事务实际上已经将它们的更新 *** 作结果写到数据库中了,恢复子系统又重新执行了这些 *** 作,浪费了大量时间。

检查点技术就是为了解决这些问题。

11 试述使用检查点方法进行恢复的步骤。

答:

① 从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。

② 由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。

这里建立两个事务队列:

· UNDO-LIST: 需要执行undo *** 作的事务集合;

· REDO-LIST: 需要执行redo *** 作的事务集合;

把ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空。

③ 从检查点开始正向扫描日志文件

· 如有新开始的事务Ti,把Ti暂时放入UNDO-LIST队列;

· 如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列,直到日志文件结束;

④ 对UNDO-LIST中的每个事务执行UNDO *** 作, 对REDO-LIST中的每个事务执行REDO *** 作。

12 什么是数据库镜像?它有什么用途?

答:

数据库镜像即根据DBA的要求,自动把整个数据库或者其中的部分关键数据复制到另一个磁盘上。每当主数据库更新时,DBMS自动把更新后的数据复制过去,即DBMS自动保证镜像数据与主数据的一致性。

数据库镜像的用途有:

一是用于数据库恢复。当出现介质故障时,可由镜像磁盘继续提供使用,同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。

二是提高数据库的可用性。在没有出现故障时,当一个用户对某个数据加排它锁进行修改时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。

以上就是关于MySQL实现类似Oracle序列的方案全部的内容,包括:MySQL实现类似Oracle序列的方案、mysql 序列功能、16S r DNA 全序列分析原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存