2013年数据库技能鉴定试题

 

一、单选(每题2分)

1. 下列说法正确的是 (  )
A. 复合索引中选择率低的应该放在第一位
B. 如果能够确保数据都在数据缓存中,大数据量全表扫描是可以接受的
C. 在查询条件的字段有索引情况下,也可能全表扫描。

D. 索引愈多查询性能愈好

 

2.关于RAID,下面说法正确的是 ( B )

A. RAID 1为硬盘条带,可以提高读写性能

B. 5块73G的硬盘组成RAID 5,可使用的空间为292G

C. RAID 0+1中一块硬盘损坏后,IO性能影响不大

D. RAID 0中一块硬盘损坏后,数据不丢失

 

3.有如下两个表EMP 和DEPT,表结构和数据如下:

EMP:

EMP_ID  EMP_NAME

----   ----   

1101    SMITH           

1102    ELLE           

1105    BLACK           

1103    SCOTT           

 

DEPT:

DEPT_ID   DEPT_NAME

-------------------

1101        市场   

1102        研发   

1103        行政   

1104        销售   

 

现在执行下列SQL语句

 

SELECT  A. EMP_NAME ,B.EDPT_NAME

FROM EMP A RIGHT JOIN DEPT B

ON A.DEPT_ID = B.DEPT_ID;

 

 

 

FROM EMP A RIGHT JOIN DEPT B

ON A.DEPT_ID = B.DEPT_ID;

请问哪个输出结果是正确的(a )

A.

EMP_NAME   EDPT_NAME

---------- ----------

SMITH      市场

ELLE       研发

SCOTT      行政

           销售

 

B.

EMP_NAME   EDPT_NAME

---------- ----------

SMITH      市场

ELLE       研发

SCOTT      行政

BLACK     

 

C.

 EMP_NAME  EDPT_NAME

---------- ----------

SMITH      市场

ELLE       研发

BLACK      研发

SCOTT      行政

 

 

D.

EMP_NAME   EDPT_NAME

---------- ----------

SMITH      市场

ELLE       研发

BLACK      研发

SCOTT      行政

           销售

 

4. 何时使用“FULL OUTJOIN” (a  )

A.两个表都存在NULL

B.想要返回两个集合的交集
C.想要返回两个集合的并集

D.想要返回两个集合的补集
E.想要返回两个集合的迪卡尔集

 

5. 在SQL语言中,一个基本表被删除,则与此基本表相关的下列内容中哪些也会被自动删除或失效?(A )

1)在此表中的数据          2)在此表上建立的索引          3)在此表上建立的视图

A. 1)和2)  

B. 2)和3)

C. 1)和3)

D. 全部

 

6. 分析下面逻辑块

if  v_price > 1000  then

    v_new_prcie := v_price/2;

elsif v_price > 2000 then

    v_new_prcie := v_price/4;

elsif v_price > 4000 then

    v_new_prcie := v_price/5;

elsif v_price > 5000 then

    v_new_prcie := v_price/8;

else

    v_new_prcie := v_price/10;

end if;

如果v_prcie=8000 那么v_new_prcie 应该等于多少?(  )

A.    800

B.   1000

C.   1600

D.   2000

E.   4000

 

7. 关于事物粒度下列说法错误的是(  a)

A.程序中要尽可能多的使用commit,事物粒度越小越好;

B. 频繁COMMIT可能会造成程序性能降低,因为造成了log file sync事件的大量时间花费;

C. 频繁commit会造成UNDO覆盖,容易产生ORA-01555;

D. 事物粒度过大会造成所等待时间延长及undo表空间不足

 

8. 当表的重复行数据很多时,应该创建的索引类型应该是(  )

A.B树

B.reverse

Cbitmap

D.函数索引

 

9. 在启动Oracle数据库实例的时候,下面操作的顺序如何排列?( c )

1)分配SGA

2)读取控制文件

3)读取redo文件

4)启动实例恢复

5)启动后台进程

6)检查数据文件的一致性

7)读取初始化参数文件    7,1,5,2,6,3,4

 

A.1,2,3,7,5,6,4

B.1,2,4,5,3,6,7
C7152364

D.7,1,4,5,2,3,6
E.7,2,3,6,4,5,1

F.2,7,1,3,6,5,4

 

10. (单选)关于表和索引的描述,错误的是 (c  )
A. 表中插入新记录时,也会在索引中增加相应的记录。
B. drop表后,该表的所有索引也会被drop。

C. 索引不需要占用存储空间。
D. 删除表中的记录时,也会删除索引中相应的记录。

 

二、多选(每题3分,每题少选得1分,多选或错选均为0分)

1.下面哪语句属于DML语句(ACD );哪些属于DDL(BE )语句。

A. INSERT

B. CREATE 

C. UPDATE

D. SELECT 

E. TRUNCATE 

F. COMMIT

 

2.(多选)CAP理论,该理论包含以下 ( abd )

AConsistency 一致性

BAvailability 可用性 

C、Tolerance ofnetwork Partition 分区容忍性

DPerformance 高性能

 

3. 以下那些聚集函数是有效的 (CDE )

SQL> desc t_userinfo

Name      Type             Nullable

--------      ------------        --------   

USERID     NUMBER(5)       

USERNAME  VARCHAR2(20)  Y  

IDCARD     VARCHAR2(40)  Y  

BIRTHDAY  DATE 

 

A. sum(birthday)

B. avg(birthday)

C. count(birthday)

D. maximum(birthday)

E. min(birthday)

 

4. 下面哪些选项描述是正确的:(acd )

A.  order by缺省排序查询显示结果是升序排列的。

B. 在order by 子句中不能用字段的别名。

C. 在group by 子句中不能用字段的别名。

D.  null值在升序排列中是被排列在所有非空值之后的。

E. 如果没有order by子句,查询结果将按照select列的第一个字段降序排列。

 

5. 优化OLTP SQL的措施一般有:(abc )

A. 避免全表扫描

B. 合理建立索引

C. 选择恰当的连接方式

D. 增加表关联的个数

 

6. 对查询结果进行排序会一定程度地降低系统的性能,下列哪些操作用在SQL语句中会启动SQL引擎执行消耗系统资源的排序?(abdf )

供选择的答案:

A.  DISTINCT

B. MINUS

C. INTERSECT

D.  UNION

E.  UNION ALL

F.  ORDER BY

 

7. 在我们的日常工作中,合理的建立索引还不够,还需要在我们编写SQL语句是注意如何让我们编写的正确的使用索引,下列哪些选项能让我们正确使用上索引?(cd

A.  增加查询的范围,限制全范围的搜索。

B. 在索引列上进行运算操作,应把运算操作右移。

C. 利用hint 强制指定索引。

D.  避免不必要的类型转换,要了解“隐藏”的类型转换。

 

8. 关于AWR说法正确的是(cd )

A.通过@ORACLE_HOME/rdbms/admin/addmrpt.sql脚本收集日志;

B. 取样时间段尽可能长;

C. 一般通过DB TIME 和Elapsedtime 来衡量数据库负载;

D. AWR信息是有MMON 进程生成

 

9. 数据库中清除表中的数据并保留表student结构的SQL是( de )

A. DROP TABLE student;

B. DROP TABLE student purge;

C. TRUNCATE TABLE student KEEP STRUCTURE;

D. TRUNCATE TABLE student REUSE STORAGE;

E. DELETE* FROM student ;

 

10. 以下关于设计说法正确的是:(abcdf )

A. 任何表的设计都要考虑到数据的删除策略,表中的数据不能无止境的增长而不删除

B. 严禁将业务数据放在系统表空间(system)中,必须有独立的表空间存放业务数据

C. 在不同业务系统共用同一个数据库时,要注意不同业务系统的对象必须存放在不同的用户下面,绝不能混放在同一用户下

D. 严禁使用sys/system用户存放任何业务数据

E. 不可以对表或索引指定并行度,如果使用Oracle并行处理方式(并行查询、并行DML),只能在具体语句中指定并行度

F. 表的设计必须满足第三范式(3NF),避免出现数据不一致。

三、问答题

1. 修改如下有错误的PL/SQL程序块(10分)

declare

vn_serv_id     number(11);

vn_loop        number(6);

cursor get_serv_id is  select serv_id  from serv;

begin

vn_loop = 0;  // vn_loop := 0;

openget_serv_id; 

loop   

    fetch get_serv_idinto :vn_serv_id;   //fetch get_serv_id into vn_serv_id;

        exit when get_serv_id%notfound; 

        vn_loop ++;    //vn_loop:=  vn_loop + 1;

    ifvn_loop >= 1000 then

      dbms_output.put(vn_loop);   //dbms_output.put_line(vn_loop);

      end if;                 

 end loop;

                                          //close  get_serv_id; 

end ;

 

 

2. 简述ORACLE数据库响应用户修改数据操作的基本流程(20)

 

1)       需要更新的数据在Data buffer cache中直接更新该数据,如果需要更新的数据不在Data buffer cache中则先到Data files中把数据加载到Data buffer cache中再进行更新;

2)       进行更新操作时需要对数据进行加锁;

3)       把更新日志写入Redo log buffer;

4)       再到Data buffer cache中写数据;

为什么要先到Redo log buffer中写更新日志再到Data buffer cache中写数据?

数据库的高可靠性与Redolog buffer有关。对数据库的所有操作都会记录日志,这样会放置数据丢失。因为写Redo log buffer特别快,一旦出现在写Data buffer cache断电情况下,数据库重启之后会根据Redo log buffer中的日志恢复到断电前状态继续写Data buffer cache数据。

CommitProcessing操作介绍。

Commit Processing操作共分以下4部分:

1)       Server Process通知Redo log buffer需要进行Commit操作;

2)       LGWR把Redo log buffer中的内容刷新到Redo log files中;

3)       Server Process通知User Process以完成commit操作;

4)       Server Process释放数据锁;

 

 

3.完成以下操作(20)

建表:

create table table_a(

studid    varchar2(10),--学号

studname    varchar2(40),--姓名

depart      varchar2(50),--系别

studscore  varchar2(10) --学分

);

insert into

table_a(studid,studname,depart,studscore)

values ('08001','李明','计算机',80);

insert into

table_a(studid,studname,depart,studscore)

values ('08002','张三', '信息技术',95);

insert into

table_a(studid,studname,depart,studscore)

values ('08005','王五', '信息技术',96);

 

 

create table table_b (

studid   varchar2(10), --学号

studname    varchar2(40), --姓名

depart      varchar2(50), --系别

studscore  varchar2(10)  --学分

);

insert into

table_b(studid,studname,depart,studscore)

values ('08001','李明','计算机',80);

insert into

table_b(studid,studname,depart,studscore)

values ('08002','张三', '信息技术',100);

insert into

table_b(studid,studname,depart,studscore)

values ('08003','李四','数学系',65);

insert into

table_b(studid,studname,depart,studscore)

values ('08004','张飞','英语系',77);


问题1:请将table_a 的studid字段建成唯一索引,写出sql语句。

create unique indexidx_unique_taba_studid on table_a(studid);

 

问题2:请用table_b中姓名为张飞的学分更新table_a中姓名为李明的学分,写出sql语句。

update table_b setstudscore=(select studscore from table_a where studname = '李明')where studname = '张飞';

 

问题3:请把table_a中的数据全部更新到table_b中,以学号,姓名及院系为KEY值,有则更新学分,无则插入,写出sql语句。

Mergeinto table_b b

Using table_aa

On(b.studid=a.studid and b.studname= a.studname and b.depart =a.depart)

Whenmatchedthen

   Updateset studscore = a.studscore

Whennotmatchedthen

   Insertvalues(a.studid,a.studname,a.depart, a.studscore);

问题4:请用命令对table_b扩展一个字段 studsex  varchar2(4),写出sql语句。

alter table table_b addstudsex varchar2(4);

 

问题 5:建立一个视图v_table,要求是v_table 是table_a 和table_b的并集,当学号,姓名及院系一致时,而学分不一致时,以table_a学分为准。

  Createorreplaceview v_table as

     select studid,studname,depart,studscore from

       ((select studid,studname,depart,studscore from table_a

        unionall

        select studid,studname,depart,studscore from table_b 

       )

       minus

       (selectb.studid,b.studname,b.depart,b.studscore from table_b b, table_a a where b.studid = a.studidand b.studname =a.studname

        and b.depart = a.depart and b.studscore !=a.studscore)

       );

问题 6:根据studid找出table_b中不存在table_a 的数据。

select * from table_b where studid not in (select studidfrom table_a);

你可能感兴趣的:(oracle,编程)