您的当前位置:首页正文

Oracle期末模拟题

2022-09-16 来源:个人技术集锦
--

一.单选题 13分

1.Oracle数据库的恢复可分为两大类:Instance recovery和media recovery,其中前者是由(A)进程自动执行的? A.SMON

B.PMON

C.DBWN

D.LGWN

2.显示数据库归档模式的数据字典是(C)

A.V$ACCESS B.V$SESSION C.V$ARCHIVELOG D.V$CONTEXT 3.PL/SQL不包括以下哪一部分?(C) A.DECLARE

B.BEGIN

C.END

D.EXCEPTION

4.增加外键约束的时候加()选项可以在子表记录存在的情况下直接删除父表记录,而不用受约束的限制;在delete语句的末尾加上(),就可以实现两张表的级删除。(B) A.ON DELETE, \\

B. ON DELETE CASCADE, CASCADE C. ON DELETE, CASCADE D. ON DELETE CASCADE, \\

5. select distinct name, id from A,这句语句去重的是(A) A.name,id

B.name

C.id

D.都没有去重

6. select id, distinct name from A,这句语句的执行情况是(D) A.对id和name同时去重 B.对name去重

C.执行成功,但没有去重

D.会提示错误,因为distinct必须放在开头

7.若关系中的某一属性组的值能唯一地标识一个元组,我们称之为(B) A.主码

B.候选码

C.外码

D.联系

8.以下不属于数据模型的三要素的是(C)

A.数据结构 B.数据操纵 C.数据控制 D.完整性约束

--

--

9.在Oracle的逻辑存储结构中,(A)是最小的I/O单元。 A.块

B.区

C.段

D.表空间

10.解析后的SQL语句在SGA的哪个区域中进行缓存?(C) A.数据缓冲区

B.日志缓存区

C.共享池

D.大池

11.如果一个服务进程非正常终止,Oracle系统将使用下列哪一个进程来释放它所占用的资源?(D) A.DBWR

B.LGWR

C.SMON

D.PMON

12.当数据库运行在归档模式下时,如果发生日志切换,为了保证不覆盖旧的日志信息,系统将启动如下哪个进程?(D) A.DBWR

B.LGWR

C.SMON

D.ARCH

13.如果服务器进程无法在数据缓冲区中找到空闲缓存块,以添加从数据文件中读取的数据 块,则将启动如下哪一个进程?(D) A.CKPT

B.SMON

C.LGWR

D.DBWR

14.下列哪一个进程用于将修改过的数据从内存保存到磁盘数据文件中?( A) A.DBWR

B.LGWR

C.RECO

D.ARCH

15.SQL*Plus工具中,复制输出结果到文件的命令是(A) A.spoll

B.edit

C.describe

D.get

16.将SQL*Plus的显示结果输出到d:\\data1.txt文件中的命令是(D) A.write to d:\\data1.txt C.spool on d:\\data1.txt

B.spool to d:\\data1.txt D.spool d:\\data1.txt

17.在SQL*Plus中执行刚输入的一条命令用(A) A.正斜杠(/)

B.反斜杠(\\)

C.感叹号(!) D.句号(.)

18.创建大文件表空间,使用(B)关键字 A.temporary

B.bigfile

C.undo

D.blocksize

19.()选项表示删除表空间的所有对象,()表示级联删除所有数据对象(C) A.including contents, including contents

--

--

B.including contents and datafiles, including contents and datafiles C.including contents, including contents and datafiles D.including contents and datafiles, including contents

20.在自己的模式中创建一个新表,用户必须具有()系统权限,如果要在其他用户模式中创建表,则必须具有()系统权限。(B) A.create table, create table C.create any table, create table

B.create table, create any table D.create any table, create any table

21.如果要为学生表的三个字段:姓名、性别和出生日期分别创建索引,该如何创建?(D) A.都创建B树索引 B.都创建位图索引

C.分别创建B树索引、位图索引和位图索引 D.分别创建B树索引、位图索引和B树索引 22.唯一约束与主键约束的一个区别是(C)

A.唯一位数的字段的值不可以有重复值 B.唯一约束的字段的值可以不是唯一的 C.唯一约束的字段不可以为空值

D.唯一约束的字段可以为空值

23.如果在包规范mypackage中没有声明某个过程myprocedure,而在创建包体时包含了该过程,那么对该过程叙述正确的是(D)

A.包体将无法创建成功,因为在包体中含有包规范中没有声明的元素 B.该过程影响包体的创建,因为它属于包的私有元素 C.可以通过mypackage.myprocedure调用该过程 D.无法在包体外使用该过程

24.向用户授予系统权限时,使用()选项表示该用户可以将此系统权限再授予其他用户。向用户授予对象权限时,使用()选项表示该用户可以将此权限再授予其他用户。(A) A.with admin option, with grant option C.with admin option, with admin option 二.多选题 10分

B.with grant option, with admin option D.with grant option, with grant option

--

--

1.SGA由什么组成(ABC) A、共享池

B、数据缓存区

C、重做日志缓存区

2.后台进程主要完成什么任务?(ABCD) A、在内存和磁盘之间进行I/O操作 C、协调各个服务器进程的任务

B、监视各个服务器的进程状态 D、维护系统性能和可靠性

3.Oracle数据库系统的物理存储结构主要是由三类文件组成,分别是(ACD) A.数据文件

B.地址文件

C.控制文件

D.日志文件

4.下列哪些是可以保证用户对数据库所做的修改在没有保存的情况下,不会丢失修改数据?(AC) A.CKPT

B.LGWR

C.控制文件

D.日志文件组

5.表空间的状态属性主要有(ABCD) A.联机

B.读写

C.只读

D.脱机

6.下列关于数据文件的说法正确的是(AB)

A.数据文件有ONLINE、OFFLINE、OFFLINE DROP三种状态 B.ONLINE表示数据文件可以使用

C.OFFLINE表示当数据库运行在非存档模式下时,数据文件不可以使用 D.OFFLINE表示当数据库运行在存档模式下时,数据文件不可以使用 7.下列可以切换为脱机状态的表空间有(BCD) A.系统表空间SYSTEM C.用户表空间USER

B.临时表空间TEMP D.索引表空间INDEX

8.以下哪些表空间不可重命名(ACD) A.SYSTEM表空间

B.USER表空间

C.SYSAUX表空间

D.OFFLINE状态的表空间

9.数据文件在哪些情况下不能被删除(ABC) A.数据文件中存在数据

B.数据文件是表空间中唯一的或第一个数据文件

--

--

C.数据文件或数据文件所在的表空间处于只读状态 D.任何情况都不能删

10.关于模式的描述下列哪一项不正确?(BC) A.表或索引等模式对象一定属于某一个模式

B.在Oracle数据库中,模式和数据库用户并不是一一对应的。 C.一个表可以属于多个模式 D.一个模式可以拥有多个表

11.下列哪一项表述是正确的(ACD) A.视图不占用实际的存储空间 B.索引不占用实际的存储空间 C.创建视图必须使用子查询

D.利用视图可以将复杂数据永久地保存起来 12.在DML语句中,删除记录可以用(CD) A.insert

B.update

C.delete

13.下列属于select查询的集合运算符的是(ABD) A.union

B.intersect

C.add

14.下列哪些是Oracle的伪列?(ACD) A.rowid

B.row_number()

C.level

15.下列哪些变量名不合法?(ACD) A._number01

B.number01

C.number-01

16.调用存储过程的方式有(BCD) A.使用/或RUN

B.使用EXECUE(简写EXEC)命令调用 C.使用CALL命令调用

D.在匿名的程序块中直接以过程名调用

--

D.truncateD.minus

D.rownumD.number

--

17.系统全局区包括下面那些区域?(ACD) A.java池

B.软件代码区

C.数据缓冲区

D.日志缓冲区

18.在用户配置文件中能限定如下哪种资源?(ACD) A.单个用户的会话数 C.用户的密码有效期 三.判断题 7分

1.SGA(系统全局区)随着数据库实例的启动向操作系统申请分配一块内存结构,随着数据库实例的关闭而释放(对)

2.每一个Oracle数据库实例可以有多个SGA(错,每个Oracle数据库实例有且只有一个SGA,如果多个用户连接到同一个数据库实例,则在实例的SGA中数据可为多个用户共享) 3.数据高速缓存中的数据交换采用最近最少使用算法(LRU,Least Recently Used)。(对) 4.Oracle先写数据再写日志(错,日志写优先原则) 5.日志缓冲区是个循环缓存区(对) 6.STARTUP FORCE启动到Mount状态(对)

7.用户退出会话后Oracle会自动删除临时表结构以及表中数据(错,用户退出会话后Oracle不会自动删除临时表结构, 但会删除表中数据) 8.最基本的表类型是堆表(对)

9.使用游标更新数据要用到FOR UPDATE语句(对)

10.替代触发器既能建立在视图上,又能建立在表上(错,替代触发器只能建立在视图上) 11.用户对数据库的操作如果产生日志信息,则该日志信息直接由DBWN进程保存到数据文件中(错,如果产生日志信息,则该日志信息首先被存储在日志缓存区,随后由LGWN进程保存到日志文件中)

12.每一个表空间由一个或多个数据文件组成,一个数据文件也可以属于多个表空间(错,一个数据文件只可以属于一个表空间)

13.修改存储过程是在创建存储过程的语句中添加or replace选项(对) 14.启动所有角色应使用set role all enable(错,应使用set role all) 四.简答题 30分

B.数据库的会话数 D.用户的空闲时长

--

--

1.后台的可选进程包括什么?它们各自的作用是?

Oracle后台进程主要包含SMON(系统监视进程)、DBWN(数据写进程)、PMON(进程监视进程)、CKPT(检查点进程)、LGWR(日志写进程)等进程。 DBWR:数据库写入进程,负责将脏数据块从数据缓存写回磁盘。 LGWR:日志写入进程,负责将日志缓冲区中的数据写入重做日志。

PMON:进程监视进程,负责监视数据库的处理情况,并负责清除死掉的进程。

SMON:系统监视进程,负责在实例启动时恢复实例,包括清除临时段以及恢复因系统崩溃而中断的事物。

CKPT:检查点进程,负责向DBWR进程发送信号,要求执行一次检查点,并更新数据库的所有数据和控制文件。

2.数据字典:user_; dba_;all_有什么区别?

USER_*存储了当前用户所拥有的对象信息;ALL_*存储了当前用户可以访问的对象信息;DBA_*存储了数据库所有对象的信息。 3.简述视图、索引、序列和同义词的含义。

视图是从一个或多个表或视图中提取出来的数据的一种表现形式。

索引是数据库中用于存放表中每一条记录的位置的一种对象,主要用于加快对标的查询操作。

序列也称为序列生成器,它能以串行方式生成一系列顺序整数。 同义词是表,索引,视图或其他模式对象的一个别名。 4.约束有哪些类型?请简单描述。

主键约束: 确保一个表中没有重复主键值的数据行

唯一性约束: 确保表中值为非空的某列或列的组合具有唯一性. 检查约束: 限制列的取值范围.

外键约束: 使得数据库中表和表之间建立了父子关系. 非空约束:限制列的取值不能为空.

5.简述char和varchar2两种字符数据类型的区别。假设学生表中的姓名字段和性别字段均为字符类型,请问这两个字段在定义其数据类型时应分别选择CHAR和VARCHAR2的哪一

--

--

个?

CHAR的长度是固定的,而VARCHAR2的长度是可以变化的。CHAR的效率比VARCHAR2的效率稍高。 姓名字段应用VARCHAR2,性别字段应用CHAR。

6.标准的SQL语言的语句类型可分为哪三类,每种语句类型分别用来操作哪些语句? (1)数据操纵语言(DML),DML允许用户对数据库中的数据进行查询、插入、更新和删除等操作,包括select,call,commit和rollback等等。

(2)数据定义语言(DDL),DDL用于创建和定义数据库对象,并且将对这些对象的定义保存到数据库中,包括create,alter,drop,rename和truncate。

(3)数据控制语言(DCL),DCL用来设置或更改数据库用户或角色的权限,包括grant和revoke。

7.简述INSTEAD OF触发器的作用。

替代触发器用于执行一个替代操作来替代触发事件的操作,而触发事件本身最终不会被执行。替代触发器只能建立在视图上,不能建立在表上。用户在视图上执行的DML操作将被替代触发器的操作所代替。 五.应用题 40分

1.自定义角色my_role,该角色拥有创建表的权限,创建用户my_user,将my_role以及更新表的权限赋予该用户。 create role my_role; grant create table to my_role; create user my_user;

grant my_role, update any table to my_user;

2.写出为my_user授予在emp表上插入和更新权限(my_user可将此权限授予别人)的sql语句,并写出收回更新权限的sql语句。

grant insert,update on emp to my_user with admin option; revoke update on emp from my_user;

3.执行更新操作后如果要撤销应用什么语句?提交到数据库应用什么语句?写出以下要求的语句:向scott.emp表中插入员工编号为1111的记录,设置一个保存点,然后用update命令将该记录的员工姓名修改为李明,然后用rollback命令回滚到保存点。

--

--

(1)rollback; (2)commit;

(3)insert scott.emp(empno) values(1111); savepoint p1;

update scott.emp set ename=’李明’ where empno=1111; rollback to p1;

4.以sys登录,并将密码改为cat,以及修改默认表空间为user2。 conn scott/tiger as sysdba; alter user scott identified by cat; alter user scott default tablespace user2;

5.创建一个学生表(student),表中包括学号(sno)、姓名(sname)、年龄(sage)和性别(gender),并在该表的姓名字段创建名为sname_lower_index的基于LOWER函数的索引。 create table student (sno number(3) primary key,sname varchar2(8) constraint c1 not null,sage number(2) check (sage<25),gender number(1) check (gender in (1,2)) );

create index sname_lower_index on student (lower(sname)) tablespace myspace; 6.定义参数游标emp_cursor,用FOR循环遍历查询到的指定部门的员工姓名。 DECLARE

CURSOR emp_cursor(no NUMBER) IS

SELECT ename from scott.emp WHERE deptno=no; BEGIN

FOR emp_record IN emp_cursor(&no) LOOP

dbms_output.put_line(‘姓名是:’||emp_record.ename); END LOOP;

--

--

END;

7.输入部门编号,按照下列加薪比例执行(用CASE实现,创建一个emp1表,修改emp1表的数据),并将更新前后的数据输出。 deptno raise(%) DECLARE

cursor crs_caseTest is

select * from empl for update of sal; r_caseTest crs_caseTest%rowtype; salInfo empl.sal%type; BEGIN

for r_caseTest in crs_caseTest loop case

when r_caseTest.deptno=10 then

salInfo:=r_caseTest.sal*1.05; when r_caseTest.deptno=10 then

salInfo:=r_caseTest.sal*1.1; when r_caseTest.deptno=10 then

salInfo:=r_caseTest.sal*1.15; when r_caseTest.deptno=10 then

salInfo:=r_caseTest.sal*1.2;

end case;

update empl set sal=salInfo where current of crs_caseTest; end loop;

10 5% 20 10% 30 15% 40 20% --

--

END

8.首先利用scott.emp表和scott.dept表创建一个视图,然后在视图上创建一个替代触发器,允许用户利用视图修改基础表中的数据。 connect scott/tiger;

create view emp_dept_view as select empno,ename,sal,dname from emp e,dept d where e.deptno=d.deptno;

create or replace trigger update_view instead of update on emp_dept_view declare

id depf.deptno%type; begin

select deptno into id from dept where dname:=:new.dname; update emp set deptno=id where empno=:old.empno; end update_view; /

9.查询公司雇用的前8名雇员;查询公司的部门数;查询还没有分配部门的员工

select ename,hiredate from (select ename,hiredate from emp order by hiredate) where rownum < 8;

select count(distinct deptno) from emp;

select * from emp where deptno is null;

--

因篇幅问题不能全部显示,请点此查看更多更全内容