oracle期末复习题及答案 下载本文

内容发布更新时间 : 2024/5/16 3:45:37星期一 下面是文章的全部内容请认真阅读。

二、 Oracle 9i中的三种数据保护模式分别是什么? 最大保护模式 (MAXIMIZE PROTECTION)

提供最高等级的数据保护,重作信息从主库同步送到备用库。直到备用库成功接收重作信息,主库上的事务才会提交。但是如果由于网络等问题,导致备用库不可用,那么主库也同时会被关闭。这种模式保证了完全没有数据丢失。

最大性能模式(MAXIMIZE PERFORMANCE)

这种模式下,主库上的重作信息是异步传递到备用库上,不论备用库上是否已经成功接收了重作信息,主库上的操作都会成功执行。所以这种模式提供了最好的性能,但是最低的数据保护。这种情况下容易造成数据丢失。

最大可用性模式(MAXIMIZE AVAILABILITY)

在备用库正常的情况下,该模式提供了跟“最大数据保护模式”一样的机制,保证没有任何数据丢失。如果备用库不可用,那么将转换到“最大性能模式”,用户可以在主库上继续执行。当备用库重新可用之后,将会继续同步。但是如果在同步完成之前,主库由于故障损坏,将会丢失数据。

三、 本地索引与全局索引的差别与适用情况? 差别:

本地索引适用于sql语句种限定一个范围的查询比如时间之类

的, 全局索引适用于在全部记录中查询,比如要查询一个手机号之类的。

全局索引总可能出现unused的情况,需要重建 适用情况:

本地索引适合条件中包含partition key的,当然不是绝对的 全局索引总可能出现unused的情况,通常的处理方式是这样的: 9i里面有update global index 的子句(ALTER TABLE sales DROP PARTITION dec98 UPDATE GLOBAL INDEXES;)

四、 数据库切换日志的时候,为什么一定要发生检查点?这个

检查点有什么意义?

当日志文件被覆盖的时候一定要确保 相关 dirty buffer 一定被写入 数据文件, 所以日志的切换必须引起 检查点。 二、填空题(每空2分,共40分)

1、假设已在某远程客户端完成网络服务名配置,服务名为aptech,请写出用户MARTIN

(用户口令martinpass)连接到服务器的命令: Connect martin/martinpass@aotech

2、SYS用户以管理员身份登录后,要授予用户MARTIN可以对SCOTT用户的EMP表进

行查询的权限,请写出授权命令:(假设MARTIN用户已存在)

Grant select on scott.emp to martin

3、创建表employee的副本,但不包含表中的记录: CREATE TABLE employee_copy AS Select * from employee where 1=2;

4、查询itemfile表中itemrate列的信息,要求将数值转换为字符串,并使用当前货币符号 作为前缀:

SELECT to_char (itemrate,'C99999') FROM itemfile; 5、查itemfile表中itemdesc、re_level列的信息,要求re_level为NULL时显示为0

SELECT itemdesc, NVL(re_level,0) FROM itemfile;

6、完成以下PL/SQL块,功能是:显示2 到50的25个偶数。 BEGIN

FOR even_number IN 1..25 LOOP

DBMS_OUTPUT.PUT_LINE(even_number*2); END LOOP END;

7、完成以下PL/SQL块,功能是:接受职员编号并检索职员姓名。将职员姓名存储在变量

empname中,如果代码引发VALUE_ERROR异常,则向用户显示错误消息。 DELCARE

empname employee.ename%TYPE;; eno employee.empno%TYPE; BEGIN eno:=’&employee_number’;

SELECT ename INTO empname FROM employee WHERE empno=eno;

DBMS_OUTPUT.PUT_LINE(||empname); EXCEPTION WHEN VALUE_ERROR THEN

DBMS_OUTPUT.PUT_LINE(‘要存储在变量中的值过大’) END;

8、完成以下PL/SQL块,功能是:使用游标,显示所有单价低于250元的玩具的单价。 DECLARE

my_toy_price toys.toyprice%TYPE; CURSOR toy_cur IS SELECT toyprice FROM toys WHERE toyprice<250; BEGIN OPEN toy_cur LOOP

FETCH toy_cur INTO my_toy_price; EXIT WHEN toy_cur%NOTFOUND;

DBMS_OUTPUT.PUT_LINE (toy_cur%ROWCOUNT || '. 玩具单价:' || my_toy_price);

:’

END LOOP; CLOSE toy_cur; END;

9、完成以下PL/SQL块,功能是:使用游标显示销售报表。如果目标销售额(tsales)大于实际销售额(asales),则显示消息?需提高销售额?。如果tsales等于asales,则显示消息?已达到销售额?,否则显示消息?销售业绩出色? DECLARE

CURSOR sales_cur IS SELECT * FROM salesdetails; BEGIN

FOR sales_rec IN sales_cur LOOP IF sales_rec.tsales > sales_rec.asales THEN

DBMS_OUTPUT.PUT_LINE('产品:'||sales_rec.pid||' 需提高销售额'); ELSE

IF sales_rec.tsales = sales_rec.asales THEN

DBMS_OUTPUT.PUT_LINE('产品:'||sales_rec.pid||'已达到销售额');

ELSE DBMS_OUTPUT.PUT_LINE('产品:' ||sales_rec.pid||'销售业绩出色'); END IF; END IF;