新SQL——SERVER实验练习答案(6)

2025-08-04

SQL-Server实验讲义

思考: 如果仅执行下述恢复语句,能查看 student 的数据吗?

RESTORE DATABASE school from DISK=’c:\\schoolDiff.bak’WITH file=1 NORECOVERY

Select * from student

三 利用日志备份

1 设置故障还原模型为:完全 2 建立备份

1) 制作数据文件备份 schooldata1.bak

2) 把学号 7003, 姓名:王江,性别:男,年龄为23 的学生加入student 3) 制作日志备份存入 schoollog.bak

4) 把学号 7004, 姓名:赵兰,性别:女,年龄为22 的学生加入student

5) 制作日志备份存入 schoollog.bak

3 观察schoollog中的信息 4 删除 school 数据库

5 利用schooldata1.bak 及 schoollog.bak 恢复数据库 school 到最新状态

四 使用企业管理器练习备份调度策略

1 对数据库 school 每天上午8时进行一次数据库完全备份 2 对数据库 school 的每隔 1分钟备份进行一次差异备份。 3 手工启动两个备份作业 4 删除 school 数据库

5 利用1,2步的备份进行 school的恢复。

思考:如何把备份文件备份到另外一台计算机上。

五 使用企业管理器练习数据库的分离及附加 六 如何清除日志文件。

七 使用企业管理器练习数据库的压缩 八 把school 备份到其他计算机上。

试验十三 事务

目的:1 掌握并理解事务

一 理解 rollback

1在查询分析器输入下列语句并执行 ,记录该学生的年龄。 Select * from student where sno=’0001’ 20

2 执行下列 语句序列A: BEGIN TRANsaction

Update student set sage=sage+1 where sno=’0001’ Select * from student where sno=’0002’

此事务结束了吗? 答:没有

26

SQL-Server实验讲义

3 执行:

Select * from student where sno=’0001’

记录该学生的年龄。

思考:student 中的0001的年龄确实被更改了吗? 为什么? 21

更改了,因为在事务中执行了update语句 4 执行下列语句。

ROLLBACK TRANsaction

然后再执行:

Select * from student where sno=’0001’

, 观察0001的年龄, 解释发生这种现象的原因。

20

Rollback 放弃了事务中所有已执行的语句。

二 理解 commit

1在查询分析器输入下列语句并执行 ,记录该学生的年龄。 Select * from student where sno=’0001’ 20

2 执行下列 语句序列A: BEGIN TRANsaction

Update student set sage=sage+1 where sno=’0001’ Select * from student where sno=’0002’

3执行:

commit transaction

Select * from student where sno=’0001’

记录结果, 此时更改后的数据被永久保存了吗? 21 永久保存

三 执行下列 语句序列 BEGIN TRANsaction

Update student set sage=sage+1 where sno=’0001’

Update sc set grade=grade + 1 where sno=’0002’ and cno=’1001’

Rollback

上述指令执行后,数据库发生了什么变化?

没有

试验十四 锁

目的:1 理解锁的概念及锁的作用

一 利用帮助系统了解Sql-server 的下列语句的含义 1 锁的隔离级别

SET TRANSACTION ISOLATION LEVEL Serializable

27

SQL-Server实验讲义

2 设置锁定超时时间

SET LOCK_TIMEOUT 5000 3 SP_LOCK

二 观察封锁

1 执行语句序列A BEGIN TRANsaction

Update student set sage=sage+1 where sno=’0001’ Select * from student where sno=’0002’

2 在查询分析器中打开第二个连接(连接 school)[文件-连接], 输入下列语句:

1) select * from student where sno=’0002’

记录执行结果,说明原因。

能看到结果,因为在未结束事务中对 student的0002学生加了 S锁,其他事务还可

以对其加 S锁。

2)select * from student where sno=’0001’ 记录执行结果,说明原因。(如上一步没有停止,则强行终止)

不能看到结果,出于等待状态。因为在未结束事务中对 student的0001学生加了 X

锁,其他事务不可以对其加任何锁。

3) update student set sname=’aaa’ where sno=’0002’ 记录执行结果,说明原因。(如上一步没有停止,则强行终止) 不能看到结果,,出于等待状态。因为在未结束事务中对 student的0002学生加了 S

锁,其他事务不可以对其加 X锁。

4) 强行终止上一步的命令,然后执行语句: DBCC opentran

记录结果 ,思考:如何知道此事务是那一台计算机发出的?

5)执行:

select * from student where sno=’0001’ 记录执行结果,说明原因 等待

然后回到第一个连接中,执行语句: commit Tran

观察并记录第二个连接窗口中的现象,说明原因

0001学生的信息马上被显示出来,因为 commit 结束了事务,则其加的锁被释放,因此等待的操作可以枷锁成功了。

三 了解锁的类型 1 执行下列语句

BEGIN TRAN

Select * from student where sno=’0001’ Print ‘server process ID (spid) : ‘ Print @@spid

1) 然后执行下列语句

28

SQL-Server实验讲义

exec sp_lock

注意根据事务中输出的 spid ,观察结果中相应 spid 的记录, 观察加锁。 2) 然后执行下列语句 commit tran exec sp_lock

注意根据事务中输出的 spid ,观察结果中相应 spid 的记录, 观察加锁。

2 执行下列语句

BEGIN TRAN

Update student set sage=sage + 1 where sno=’1001’ Print ‘server process ID (spid) : ‘ Print @@spid

1) 然后执行下列语句 exec sp_lock

注意根据事务中输出的 spid ,观察结果中相应 spid 的记录, 观察加锁。

2) 然后执行下列语句 commit tran exec sp_lock

注意根据事务中输出的 spid ,观察结果中相应 spid 的记录, 观察加锁。

3 使用 SET TRANSACTION ISOLATION LEVEL Serializable 然后重新执行 三和四步,观察与原来有何不同。

4 了解表级锁 ( 查看帮助文件)

BEGIN TRAN

Select * from student (TABLOCKX) where sno=’1002’ Print ‘Server Process ID (spid): ‘ Print @@spid

然后执行:

exec sp_lock

注意根据事务中输出的 spid ,观察结果中相应 spid 的记录, 观察加锁类型。

5 了解锁定超时

a) 执行下列语句 ,设置锁定超时为 1000 ms

set lock_timeout 1000 go

BEGIN TRAN

Select * from student (TABLOCKX) where sno=’1002’

29

SQL-Server实验讲义

2)打开第二个连接 执行:

select * from student

记录观察到的现象。

3)在打开的第二个连接中

set lock_timeout 10000

go

select * from student

记录观察到的现象。

五 编程实例

1 编写存储过程 usp_update1 , 传入参数为课程号,处理逻辑: 对传入的这门课,进行如下处理:

如某学生该门课成绩>80 , 则加 2 分 如某学生该门课成绩>60 , 则加 1 分 如某学生该门课成绩<=60 ,扣1分

要求:在存储过程中,要么全部学生的成绩被处理成功,要么全部不处理

思考:在调试中,采用那些措施,使存储过程运行时执行回滚操作 (rollback) 。

2 编写触发器,

对insert、update语句进行监控,当学生的年龄超过40岁时,把该学生的系科改为 ‘BAK?,同时删除该学生的所有选课记录。(注意,利用事务,使修改系科及删除选课记录要么全做,要么全不做)

30


新SQL——SERVER实验练习答案(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:华北板块的形成史

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219