exerciseAnswerRef1.docx
《exerciseAnswerRef1.docx》由会员分享,可在线阅读,更多相关《exerciseAnswerRef1.docx(14页珍藏版)》请在冰豆网上搜索。
![exerciseAnswerRef1.docx](https://file1.bdocx.com/fileroot1/2023-1/25/e1799c64-fb85-4b0b-8f75-aaf16a7fdd8b/e1799c64-fb85-4b0b-8f75-aaf16a7fdd8b1.gif)
exerciseAnswerRef1
SQLServer(三级)操作练习题1
下列内容中的“提示”、“分析”在考试中不提供。
练习或考试中都要严格按照题目指定的名称、类型等书写,没有指定的自行命名。
1数据库运行监控
1.1使用SQL语句实现DMV查询,显示当前缓存占用了大部分CPU时间的前20个批处理或过程,按照各批处理或过程的CPU执行时间降序排列,将结果保存在“c:
\gatDoc\SQL3J2.1.1\2.1.1.doc”文档中。
(提示:
查询数据库master中的系统视图sys.dm_exec_query_stats)
1.2以SA身份登录数据库,在Master数据库上执行SQL语句:
Select*fromsysobjects。
利用SQLServerManangementStudio监控数据库服务器,观察当前按照进程分类的锁有哪些,请在“c:
\gatDoc\SQL3J2.1.1\2.1.1.doc”文档内写出操作步骤,并在该文档内将下列操作界面截屏后保存:
阅读锁的信息,登录帐户信息。
(提示:
启动活动监视器)
1.3打开SQLServerProfiler,建立跟踪,对数据库活动进行监视,同时打开性能监视器,利用SQLServer:
SQLStatistics对象监视数据库服务器每秒的编译次数,运行3分钟后,观察重合时段内SQLServe的活动和上述性能计数器的值,请在“2.1.1.doc”文档内写出操作步骤,并在该文档内将下列三个操作界面截屏后依次保存:
1)在SQLServerProfiler中新建跟踪mytrace。
2)在性能监视器中新建SQLServer:
SQLStatistics计数器。
3)在SQLServerProfiler中查看指定性能计数器的情况。
2数据库备份计划
2.1利用维护计划功能,设置每天3:
00自动执行增量备份(差异备份)数据库model到文件夹C:
\Backup,并将操作步骤写在c:
\gatDoc\SQL3J2.2.1\2.2.1.doc文档里面,将下面两个操作界面截屏后依次保存在同一个文档里:
1)设置备份数据库任务的界面
2)维护计划设置完成的界面
2.2利用SQLServerAgent功能(作业功能),创建作业job1,设置每天5:
00完成以下步骤:
先删除备份文件c:
\gatDoc\SQL3J2.2.1\model.bak,然后对数据库model进行完全备份,保存为c:
\gatDoc\SQL3J2.2.1\model.bak,请在2.2.1.doc文档里写出操作步骤,并将下面三个操作界面截屏后依次保存:
1)设置删除备份文件的界面
2)设置对数据库model进行完全备份的界面
3)设置作业计划属性的界面
3数据库编程
*准备:
假设目前有一个数据库demo,里面有一个表Student,结构如下:
IDint,--学号
Namevarchar(20),--姓名
enterDatedatetime,--入学日期
jobvarchar(10),--职位
highnumeric(8,2),--身高
teacherIDint,--班主任代号
classIDint,--班级编号
练习时请同学自行创建以上数据库和数据表(考试时系统中已经创建好了)。
将下面操作的SQL脚本保存到c:
\gatDoc\SQL3J3.1.1\3.1.1.doc文档中。
3.1建立存储过程add_stu,输入学号、姓名、入学日期、职位、身高、班主任代号、班级编号,向表student插入数据。
3.2建立函数valid_id,根据输入的学号,检查学生是否存在,如果存在,则返回1,否则返回0。
(标量函数)
3.3建立函数get_high,根据输入的学号,返回姓名和身高,其中要求先调用函数valid_id确定该学生是否存在,不存在则显示消息“该学生不存在”。
(多语句表值)
3.4建立函数get_tab,根据输入的班级编号返回该班级所有学生信息。
(内联表值)
3.5编写存储过程disp_stu,根据输入的班级编号,采用游标方式按照下列格式输出该班级所有学生的姓名、职位、身高。
姓名职位身高
-------------------------------------------
-------------------------------------------
参考答案:
1.1
selecttop20sql_handle,sum(total_worker_time)ascpu_time
fromsys.dm_exec_query_stats
groupbysql_handle
orderbycpu_timedesc
*分析:
在sys.dm_exec_query_stats视图中,total_worker_time字段用来保存某个进程占用的cup时间,sql_handle表示某个进程编号。
这个视图在master数据库中的系统视图中可以找到。
(本图为操作参考,考试时不需要给出)
1.2
步骤:
(考试时不需要写步骤)
1.在SQLServerManangementStudio打开新查询。
2.选择Master数据库,点击工具栏中的“新建查询”。
3.在查询中执行下面的语句:
Seelct*fromsysobjects
4.在“管理活动监视器”中,右键选择“查看进程”,弹出活动监视器窗口,有多个进程,其中有一个帐户在访问数据库实例,双击该进程后弹出一个进程的详细信息窗口。
(提示:
使用Alt+PrtSc组合键,可以复制当前活动窗口图象)
1.3
步骤:
(考试时不需要写步骤)
1.在SQLServerManangementStudio的“工具”菜单中打开SQLServerProfiler。
2.点击“新建跟踪”。
3.填写跟踪名称myTrace,选中“保存到文件”,指定文件夹C:
\和文件名myTrace.trc,单击“运行”。
4.在SQLServerProfiler的“工具”菜单中打开性能监视器。
5.展开“性能日志和警报”,在“计数器日志”上右键选择“新建日志设置”,填写日志名称myLog。
6.点击“添加计数器”,在“性能对象”中选择“SQLServer:
SQLStatistics”,再从列表中选择一个计数器“SQLCompilations/sec”,然后点击“添加”,再点击“关闭”。
7.打开“日志文件”选项卡,在“日志文件类型”中选择“文本文件(用逗号分隔)”。
点击“配置”按钮,指定文件夹C:
\和文件名myLog.csv,然后按“确定”返回。
8.在查询工具中任意使用SQL语句执行一些数据库操作。
9.3分钟后,分别停止SQLServerProfiler和性能监视器的所有运行的任务。
10.关闭SQLServerProfiler的当前跟踪,在“文件”菜单中打开所保存的跟踪文件C:
\myTrace.trc,然后在“文件”菜单中选择“导入性能数据”,选择性能计数器保存的文件C:
\myLog.csv,并在“性能计数器限制对话框”中选中相应的计数器(见后面的参考图)。
(本图为操作参考,考试时不需要给出,所有选项都打勾)
2.1
步骤:
(考试时不需要写步骤)
1.在SQLServerManangementStudio的管理->维护计划中,右键点击“新建维护计划”,填写名称。
2.设置计划,选择“重复执行”,频率为每天一次,时间设定为3:
00。
3.在左边任务列表中将“备份数据库”任务拖曳到右边窗口,然后双击他。
4.选择数据库“model”,备份类型选“完整”,文件夹选“C:
\Backup”(直接打字,不要打开对话框进行选择)。
5.保存,退出。
2.2
步骤:
(考试时不需要写步骤)
1.在SQLServerManangementStudio的SQLServer代理->作业中,右键点击“新建作业”,填写名称。
2.点击“步骤”选项卡,新建一个步骤,命名为step1,类型选择“操作系统(cmdExec)”,命令栏目中填写:
delc:
\backup\model.bak,单击“确定”。
3.新建一个步骤,命名为step2,类型选择“Transact-SQL脚本(T-SQL)”,数据库选择“master”,命令栏目中填写:
backupdatabasemodeltodisk='c:
\backup\model.bak',单击“确定”。
4.点击“计划”选项卡,新建一个计划,命名为plan1,选择“重复执行”,频率为每天一次,时间设定为5:
00,单击“确定”。
5.单击“确定”,退出。
3.1(提示:
以下各题可以利用SQLServerManagementStudio中的相关生成工具搭好框架)
createprocedureadd_stu
@idint,@namevarchar(20),@enterdatedatetime,@jobvarchar(20),@highnumeric(8,2),@tIDint,@cIDint
as
begin
insertintostudentvalues(@id,@name,@enterdate,@job,@high,@tID,@cID)
end
*分析:
本题使用存储过程模板(找到指定数据库>可编程性>存储过程,右键“新建存储过程”)。
3.2
createfunctionvalid_id
(
@idint
)
returnsint
as
begin
declare@resultint
ifexists(select*fromstudentwhereid=@id)
set@result=1
else
set@result=0
return@result
end
*分析:
本题使用标量函数模板(找到指定数据库>可编程性>函数,右键“新建>标量值函数”)。
3.3
createfunctionget_high
(
@idint
)
returns@tabtable
(namevarchar(20),highnumeric(8,2),msgvarchar(20))
as
begin
ifdbo.valid_id(@id)=1
insertinto@tab(name,high)selectname,highfromstudentwhereid=@id
else
insertinto@tab(msg)values('该学生不存在')
return
end
*分析:
本题使用多语句表值函数模板(找到指定数据库>可编程性>函数,右键“新建>多语句表值函数”)。
3.4
createfunctionget_table
(
@classIDint
)
returnstable
as
return(select*fromstudentwhereclassID=@classID)
*分析:
本题使用内联表值函数模板(找到指定数据库>可编程性>函数,右键“新建>内联表值函数”)。
3.5
createproceduredisp_stu
@classIDint
as
begin
declare@namevarchar(20),@jobvarchar(20),@highnumeric(8,2)
declarec_rscursorfor
selectname,job,highfromstudentwhereclassID=@classID
openc_rs
print'姓名职位身高'
print'----------------------------'
fetchnextfromc_rsinto@name,@job,@high
while@@fetch_status=0
begin
print@name+''+@job+''+cast(@highasvarchar)
fetchnextfromc_rsinto@name,@job,@high
end
closec_rs
deallocatec_rs
end
*分析:
本题使用存储过程模板(找到指定数据库>可编程性>存储过程,右键“新建存储过程”)。