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
C.bitmap
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
C.7,1,5,2,3,6,4
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. 删除表中的记录时,也会删除索引中相应的记录。
1.下面哪语句属于DML语句(ACD );哪些属于DDL(BE )语句。
A. INSERT
B. CREATE
C. UPDATE
D. SELECT
E. TRUNCATE
F. COMMIT
2.(多选)CAP理论,该理论包含以下 ( abd )
A、Consistency 一致性
B、Availability 可用性
C、Tolerance ofnetwork Partition 分区容忍性
D、Performance 高性能
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);