数据库应用技术复习题 联系客服

发布时间 : 星期六 文章数据库应用技术复习题更新完毕开始阅读9ef14bda6529647d2628524e

2.启动到mount状态,这个阶段数据库打开控制文件,验证控制文件。. 3..启动到open状态,这个阶段数据库打开控制文件里描述的文件。 2、简述Oracle必须启动的四个后台进程。

答:安装和打开数据库SMON。用户会话是连接到服务器进程的用户进程PMON。会话不直接将数据写入磁盘,而是写入到数据库高速缓存区DBWn。日志写入器将日志缓冲区的内容写入到磁盘上的联机日志文件中LGWR。系统崩溃后,必须从重做日志提取与脏缓冲区对应的所有更改矢量,并将其应用于数据块CKPT。(第五一般没有ckpt) 3、解释冷备份和热备份的不同点以及各自的优点。

答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。缺点只能在归档模式下进行,归档模式会对系统性能尤其是磁盘i/o造成一定的影响。冷备份的优点就是操作简单,数据库性能比归档模式稍高。缺点就是等下次恢复的时候是一种不完全恢复,也就是说会有数据丢失,那么在生产库上如果用这种模式是非常危险的。

热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。

3、当用户进程发出conn scott/tiger@210.30.12.60:ORCL的请求后,请结合监听的概念,简述会话(Session)建立的过程。 答:(1)用户进程根据本地net服务名中的信息,联系主机210.30.12.60的TCP协议的1521端口,该端口有监听程序Listener在运行。(2)用户进程联系到Listener后,Listener会根据本地Net服务名中的服务名(ORCL)将该连接请求转接到相应的Oracle服务器上。(3)如果这个连接请求通过权限身份验证,就启动一个服务进程与用户进程会话,这样一个会话就建立了,监听也完成了它的历史使命,以后的会话过程不再通过监听。

5、B用户当前有Create Session、Create Table的权限,并在userdata表空间有50M的配额,现该用户需要创建一个表B_Table1,该表的字段StaffNO上有一个外码,该外码指向A用户的表A_Table2中的Staff#字段,要完成B_Table1的创建需要进行什么授权? Grant reference(Staff#)on A_Table to B;

6、某用户user1正与Oracle服务器进行事务处理,突然另外一个用户user2发出shutdown immediate命令,请简述该命令会对user1的影响。

答:系统立即强行中断正在处理的SQl语句,并将任何没有提交的事务全部强行回退,然后断开所有连接。对已经提交的事务,系统则将缓存区中的信息写入磁盘中,以维护数据库的一致性。

四、数据库维护应用题

1、数据库在某时刻执行了全库的冷备份,并且有自备份以来的所有归档日志。 1)发现user01.dbf文件损坏,试给出数据库完全恢复的过程。 使用备份的数据文件替代损坏的数据文件;从数据文件中挑选出时间点最旧的文件,从该数据文件的时间点开始重做事务。

2)发现所有的控制文件损坏,试给出数据库恢复的过程。

答:1)使用备份的数据文件替代损坏的数据文件;从数据文件中挑选出时间点最旧的文件,

从该数据文件的时间点开始重做事务。

2)关闭数据库后,根据参数文件所列控制文件清单,在操作系统下,用拷贝命令将备份的控制文件依次替代损坏的文件,如果因为介质故障备份控制文件不能拷贝回原处,可以拷贝至新地点,但必须在参数文件中修改其路径,且文件名不能改变,并不能出现新的控制文件名。进行下面操作:

SQLDBA>startup mount (打开数据库至mount状态)

SQLDBA>recover database using backup controlfile (进行数据库恢复工作) 数据库恢复过程中,DBA 根据需要输入日志文件名,包括online redo log 和archive redo log,直到恢复工作完成,ORACLE 将给出下列信息: Media recover complete.

2某数据库运行在非归档模式,现要求能对该数据库执行热备份,请写出将数据库调整到归档模式的过程。 答:(1)关闭数据库

SQL>shutdown immediate; (2)启动数据库到mount状态

SQL>startup mount;

(3)启动归档模式

SQL>alter database archivelog; (4)打开数据库alter database open;

3 某银行的账户表account非常重要,可是该表却在2011.12.26日被误删除了,幸好有该数据库在2011.12.10日和2011.12.27日的实体数据库热备份,现在(2012.2.21日)发现这个account表已经丢失了,写出该表恢复的过程。

五、PL/SQL编程 某表如下:

1、Create table student( sno char(10) primary key, sname char(30), birthday date, sage smallint)

完成表的创建后有以下插入语句:

Insert into student values(‘0201’, ‘xiaoli’, ‘1997-06-04’, 11) Insert into student(sno, sname) values(‘0202’, ‘xiaowei’)

请书写存储过程完成如下功能:如果有该学生的birthday字段有值则更新该学生的年龄,如无则打印“xxx学生birthday值无值”。并写一个匿名块调用该存储过程。 //创建存储过程

create or replace procedure my(mysno in student.sno%type,mysname out student.sname%type,mybir out student.birthday%type,mysage out student.sage%type) is begin

select sname,birthday,sage into mysname,mybir,mysage from student where sno=mysno; if mybir is null then

dbms_output.put_line(mysname||'学生birthday值无值。'); else

update student set sage=months_between(sysdate,mybir)/12 where sno=mysno ; end if; end;

//调用 declare

mysname student.sname%type; mybir student.birthday%type; mysage student.sage%type; begin

my('0202',mysname,mybir,mysage); end;

1、已知学院成绩管理系统中有如下关系表:学生表 students ( student_number ,student_name , major_name, current_credits ); 课程表course( course_name , description, max_students , current_students , num_credits ); 成绩表SC (student_number ,course_name ,grade );其中student_number 学号,student_name学生姓名, major_name 专业名, current_credits当前所选修学分,course_name课程名称,description 课程描述,max_students最大选修的学生人数,current_students当前选修的学生人数,num_credits学分数,grade 成绩。基于以上成绩管理系统中的关系表,写一个过程,传入某学生的学号,打印出该生选修的所有的课程名。

答: create or replace procedure cur_courses(stuID in SC.student_number%type ) Is

courName SC.course_name; CURSOR courses _cursor IS

Select cour_name from SC where SC.student_number=stuID;

Begin

OPEN courses _cursor;

LOOP

FETCH courses _cursor INTO courName ; EXIT WHEN v_emp_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE(courName ); END LOOP;

CLOSE v_emp_cursor; End;

第一题的黄淮学院成绩管理系统中相关表,请编写触发器完成以下功能:当对SC表执行插入操作的时候,应相应的对students和classes表的相应字段更新。比如,当向SC表插入一行数据时,则该生的当前所选修学分(current_credits)字段应增加,同时,对应的课程的当前学生数(current_student)字段也应增加。 create or replace trigger t_student After insert on sc for each ROW DECLARE

v_cnt NUMBER; BEGIN

SELECT COUNT(*) INTO v_cnt IF v_cnt = 0 THEN

INSERT INTO student (student_number) VALUES

(:NEW.student_number); INSERT INTO course (current_students) VALUES

(:NEW. current_students); END IF;

END t_student;

FROM student;