选择题
从中选 10 道。
-
Oracle的管理与开发工具不包括( D )。
A. OEM B. SQL*PLUS C. ONCA D. PHPPHP 是一种编程语言,不是 Oracle 的工具。
-
下面文件属于物理文件的是( C )。
A. 概要文件 B. 闪回文件
C. 数据文件 D. 逻辑文件数据文件是数据库中存储数据的物理文件。
-
用于记录用户对数据库改变操作的物理文件是( C)。
A. 控制文件 B. 归档文件
C. 重做日志文件 D. 警告文件重做日志文件用于记录对数据库的改变操作。
-
数据文件的扩展名是 C
A . CTL B. TCL C. DBF D. LOG -
描述整个数据库结构信息的是(A )。
A. 控制文件 B. 归档文件
C. 重做日志文件 D. 警告文件 -
对于表空间描述正确的是 D
A 一个数据库只能有一个表空间
B 一个数据库只能有一个临时表空间
C 一个表空间只能由一个用户使用
D 一个表空间可以由多个数据文件组成一个表空间可以有多个数据文件来存储数据。
-
在创建表空间时,使用(C )关键字,可以创建临时表空间
A. system B. uniform C. temporary D. temp -
段的集合是( C )
A 区 B 块 C 表空间 D 数据库 -
下面属于系统表空间的是( C )。
A. 撤销表空间 B. 临时表空间
C. SYSTEM表空间 D. 用户表空间 -
把多路镜像控制文件存于不同磁盘最大的好处是(B )。
A.数据库性能提高
B.防止数据库的崩溃
C.提高归档速度
D.能并发访问提高控制文件的写入速度 -
将修改过的数据块写入数据文件的进程是(A )。
A.DBWR B.LGWR
C.PMON D.SMONDBWR(数据库写进程)负责将修改过的数据块写入数据文件。
-
下列说法错误的是(D )。
A. SGA中内存的分配和回收是以特定单位进行的
B. PGA主要保存当前用户私有的数据和控制信息
C. PGA由排序区,会话区,游标区和堆栈区组成
D. 对数据高速缓冲区,日志缓冲区,保留池,共享池的内存调整,
系统可以自动进行系统不会自动调整所有这些内存区域的大小。
-
指定哪个表空间参与排序操作,可以提高排序效率(B )。
A.SYSEM B.TEMPORARY
C.ROLLBACK D.USERS临时表空间(TEMPORARY)用于排序操作。
-
关于数据文件的管理, 下面说法错误的是( C )。
A.数据文件是依附于表空间存在的
B.可以通过联机或脱机来改变数据文件的可用性
C.一个数据文件可以从属多个表空间
D.一个表空间可以有多个数据文件一个数据文件只能从属于一个表空间。
-
DBWR进程的作用是( B )。
A.把重做记录写入重做日志文件中永久保存
B.把数据高速缓冲区中被修改过的数据写入数据文件中保存
C.执行检查点,更新控制文件
D.回收空白的数据块DBWR 进程负责将数据块从缓冲区写入数据文件。
-
在Oracle数据库的逻辑结构中, 最小的存储单元是(A )。
A.块 B.区
C.段 D.表空间 -
在Oracle数据库的逻辑结构中, 存储空间分配和回收的最小单位是( B)。
A.块 B.区
C.段 D.表空间 -
下面哪个不是Oracle的后台进程( D )。
A. RECO B. LGWR
C. ARCH D. CALL -
CKPT进程的作用是( C )。
A.把重做记录写入重做日志文件中永久保存
B.把数据高速缓冲区中被修改过的数据写入数据文件中保存
C.执行检查点,更新控制文件
D.回收空白的数据块 -
回滚段的作用是 ( D )。
A.数据的读一致性 B.事务回滚
C.数据库恢复 D.以上都是 -
下面不属于SGA的是( D )。
A. 数据高速缓冲区 B. Java池
C. 共享池 D. 排序区排序区不是 SGA 的一部分,排序区是 PGA 的一部分。
-
下面数据库对象不属于模式对象的是( D )。
A. 表 B. 索引
C. 分区表 D. 用户 -
创建Oracle数据库时会自动创建一些用户,其中不包括( B )。
A. SYS B. USER C. SCOTT D. SYSTEM -
实现列的添加可以使用( D )语句。
A. INSERT TABALE…ADD
B. CREATE TABALE…ADD
C. MODIFY TABALE…ADD
D. ALTER TABALE…ADD -
下面哪个命令用于删除约束( B )。
A. ALTER TABLE MODIFY CONSTRAINT
B. ALTER TABLE DROP CONSTRAINT
C. DROP CONSTRAINT
D. ALTER CONSTRAINT DROP -
平衡树索引适合建于( A )的列。
A.索引基数高 B.索引基数低
C.插入率高 D.修改率高 -
下列说法错误的是( D )。
A. Oracle 会自动在UNIQUE约束上创建唯一性索引
B. 默认情况下,Oracle创建的索引是非唯一性索引
C. 相比于重建索引,合并索引不会改变B树的高度
D. 函数索引只能是标准的B树索引函数索引不一定只能是标准的 B 树索引。
-
关于约束下列说法正确的是( C )。
A. 5种约束都可以是列级约束,也都可以是表级约束
B. 定义表级约束时可以不指定列名
C. 外键约束只能参照主表的主键约束列或者唯一性约束列
D. 一个表中只能有一个唯一性约束 -
位图索引适合建于怎样的列( B)。
A.索引基数高 B.索引基数低
C.插入率高 D.修改率高 -
创建分区表的方法不包括( A )。
A. 组合分区 B. 散列分区 C. 列表分区 D. 范围分区 -
数据在各个分区中分布不均匀,此时可以采用( C )创建分区表。
A. 复合分区 B. 列表分区
C. 散列分区 D. 范围分区 -
如果用户拥有数据库对象,则删除用户时必须在DROP USER语句中使用( B )选项。
A.WITH ADMIN OPTION B.CASCADE
C.COMMIT D.EXCEPT -
关于权限管理说法错误的是(D )。
A. CREATE权限属于系统权限,INSERT权限属于对象权限
B. 有的对象并没有对象权限,只能通过系统权限进行控制
C. 一个用户被多次授予同一个对象权限后,只要回收一次,该用户不再拥有相应的对象权限
D. A用户将对象权限授予B用户,A用户的对象权限被回收后,B用户的对象权限依然在 -
下面权限属于对象权限的是( C )。
A. ALERT B. CREATE
C. UPDATE D. DROP -
关于用户, 下面说法错误的是( D )。
A.SYS和SYSTEM 是Oracle数据库自动创建的用户
B.创建用户后,数据库会创建一个同名模式
C.ALTER USER语句与CREATE USER 相比,多了 DEFAULT ROLE 选项目
D.数据库身份认证的方式将口令和加密方式保存在操作系统Oracle数据库通常会在数据库字典中保存用户账号信息,而不是将这些信息保存在操作系统中。
-
关于角色管理,下面说法错误的是( C)。
A. 角色是相关权限的集合
B. Oracle预定义了一些角色
C. 不能将角色授予另外一个角色
D. 通过角色向用户授权的过程实际上是一个间接的授权过程角色可以授予其他角色。
-
关于闪回技术下面说法错误的是 ( C )。
A. 要使用闪回技术必须启用撤销表空间自动管理回滚信息
B. 闪回删除的实现主要是通过“回收站”技术实现的
C. 任何情况下的数据丢失或损坏都可以使用闪回技术恢复
D.启动闪回数据库的功能时,数据库必须处于归档模式并非所有情况下都能使用闪回技术恢复数据。
-
下面描述不属于Oracle故障类型的是( B )。
A. 语句故障 B. 服务器故障
C. 网络故障 D. 介质故障 -
概要文件不能限制( D)。
A.CPU 占用时间
B.用户连接数据库的时间
C.每个用户的并发会话数
D.读取数据块时间 -
根据数据文件损坏程度的不同,数据库完全恢复可分为数据文件级,数据库级和( A )。
A.表空间级 B.表级
C.版本级 D.事务级 -
下面不属于闪回技术的是(B )。
A.闪回表 B.闪回数据
C.闪回删除 D.闪回数据库 -
关于闪回技术下面说法错误的是 (C )。
A. 要使用闪回技术必须启用撤销表空间自动管理回滚信息
B. 闪回删除的实现主要是通过“回收站”技术实现的
C. 任何情况下的数据丢失或损坏都可以使用闪回技术恢复
D.启动闪回数据库的功能时,数据库必须处于归档模式闪回技术不适用于所有数据丢失或损坏的情况。
-
Oracle数据库中,要具有闪回数据库功能所需要的条件不包括( D )。
A. 数据库处于归档模式
B. 数据库设置了闪回恢复区
C. 数据库启用了FLASHBACK DATABASE
D. 采用字典管理方式 -
下面操作不属于DML语言的是( A )。
A. SELECT B. UPDATE
C. DELETE D. INSERTSELECT 不是 DML 语言,它是数据查询语言(DQL)。
-
下面操作不属于DDL语言(数据定义语言)的是( B )。
A.ALERT B. UPDATE
C. REVOKE D. GRANT -
为了去除结果集中重复的行,可在SELECT 语句中使用下列哪个关键字( B )。
A、ALL B、DISTINCT
C、EXISTS D、HAVING -
查询一个表的总记录数,可以采用( C )统计函数。
A.AVG(*)
B.SUM(*)
C.COUNT(*)
D.MAX(*)
-
在GROUP BY 子句中使用( A )选项可以生成横向统计,纵向统计和不分组统计。
A. CUBE B. ROLLUP
C. STDDEV D. AVG -
下面关于SQL语言的描述正确的是( C)。
A. ALERT属于数据操纵语言(DML)
B. WHERE子句既可以作用于记录也可以作用于组
C. 若要统计不重复的行信息,可使用DISTINCT选项
D. 用DELETE语句删除数据时,直接释放存储空间,且可回滚 -
可以使用下面哪个子句对查询结果进行排序( A )。
A、ORDER BY B、 GROUP BY
C、JOIN ON D、ASC -
检索游标使用( D )语句。
A. CURSOR B. SELECT
C. DECLARE D. FETCH…INTO -
在PL/SQL语言中,用户定义异常的抛出语法是( C )。
A. SQLERRM B. PRAGMA EXCEPTION_INIT
C. RAISE D. EXCEPTION -
下面描述不属于PL/SQL语言特点的是( B )。
A.减小网络流量 B. 高度的非过程化
C. 与SQL语言紧密集成 D. 服务器端程序设计可移植性好PL/SQL 是过程化的语言,不是非过程化。
-
在PL/SQL语言中,函数和存储过程的不同之处在于( C )。
A. 存储过程可以重新编译
B. 函数在SQL语句和PL/SQL程序均可被调用
C. 函数必须包含RETURN语句
D. 存储过程可将PL/SQL块或元素组织在一起,成为完整的单元存储过程不需要返回值,但函数必须包含 RETURN 语句。
-
下面关于PL/SQL的控制结构描述错误的是 (B )。
A.PL/SQL的逻辑运算结果有TRUE, FALSE和NULL三种
B.CASE语句只能进行等值比较
C.FOR循环中不需要定义循环变量
D.跳转结构中,不能从外层块跳到内层块在 PL/SQL 的 CASE 两种用途,一是等值比较;二是多重条件的比较。
填空题
1、数据库实例的构成
数据库实例由内存结构(如SGA系统全局区和PGA程序全局区)和后台进程(如DBWR、LGWR等)组成。
2、表空间的管理方式
表空间的管理方式分为字典管理方式和本地管理方式,其中本地管理采用位图来管理空间分配。
3、oracle数据库中进程的分类
Oracle数据库服务器中的进程分为用户进程、服务器进程和后台进程。
4、段的分类
根据存储对象类型的不同,段在Oracle中有数据段、索引段、回滚段、临时段的类型。
5、备份方式分类
根据备份方式分为物理备份和逻辑备份。
根据备份时是否关闭数据库服务器分为冷备份和热备份。
根据备份的规模分为完全备份和部分备份。
根据数据库是否运行在归档模式分为归档备份和非归档备份。
6、分区表的分类
Oracle支持的分区表类型有范围分区、列表分区、散列分区和复合分区。
简答题
六个选四个。
1、数据库表空间、数据文件和数据对象的关系?
- 表空间是Oracle数据库中的逻辑存储单位,表示用于存储数据库对象(如表、索引等)的空间。一个表空间可以包含一个或多个数据文件。
- 数据文件是物理存储文件,存储在操作系统中,包含了表空间的数据。每个数据文件只能属于一个表空间,但一个表空间可以包含多个数据文件。
- 数据对象(如表、索引等)则是存储在表空间中的具体数据结构,它们与表空间和数据文件关联。例如,表的数据存储在某个表空间内的某些数据文件中。
书上表述:数据文件是依附于表空间而存在的,一个表空间可以包含几个数据文件,但一个数据文件只能从属于一个表空间。在逻辑上,数据库对象都存放在表空间中,实质上是存放在表空间所对应的数据文件中 (P30)一个表空间对应一个或多个数据文件,数据文件的大小决定了表空间的大小(P49)
2、DBWR的启动条件(什么情况下会启动)?
- DBWR(数据库写进程) 在以下情况下启动:
- 服务器进程在数据高速缓存区中搜索一定数量的缓存块后,仍然没有找到可用的空闲缓存块,此时 DBWR 进程将被启动
- 检查点发生时,将启动 DBWR 进程
- 当数据高速缓冲区中LRU列表长度达到初始化参数DB_BLOCK_WRITE_BATCH指定值的一半时,DBWR进程将被启动
- DBWR进程发生超时(约3s),DBWR进程将被启动
3、合并索引和重建索引的比较?
相同点:清除索引碎片。
不同点:
合并索引 | 重建索引 |
---|---|
不能将索引转移到其他表空间中 | 可以将索引转移到其他表空间中 |
代价较低,不需要使用额外的存储空间 | 代价较高,需要使用额外的存储空间 |
只能在B树的同一子树中进行合并,不会改变树的高度 | 重建整个B树,可能会降低树的高度 |
可以快速释放叶子节点中未使用的存储空间 | 可以快速更改索引的存储参数。在重建过程中如果指定了ONLINE关键字,不会影响对当前索引的使用 |
4、索引的作用及类型?
- 作用:
- 加速查询:用于提高数据的查询速度。
- 唯一性保证:通过索引可以保证数据的唯一性(如主键索引)。
- 排序和分组:索引能够帮助快速排序和分组操作。
- 类型:
- 根据索引值是否唯一分为唯一性索引和非唯一性索引;
- 根据索引的组织结构不同分为平衡树索引和位图索引;
- 根据索引基于的列数不同分为单列索引和复合索引;
- 其他还有函数索引。
5、重做日志的工作过程?
每个数据库至少需要两个重做日志文件,采用循环写的方式进行工作。这样就能保证,当一个重做日志文件在进行归档时,还有另一个重做日志文件可用。
当一个重做日志文件被写满后,后台进程LGWR开始写入下一个重做日志文件,即日志切换,同时产生一个“日志序列号”,并将这个号码分配给即将开始使用的重做日志文件。
当所有的日志文件都写满后,LGWR进程再重新写入第一个日志文件。
6、游标的概念及显示游标的操作过程?
-
游标的概念:
当在PL/SQL块中执行查询语句(SELECT)和数据操纵语句(DML)的,Oracle会在内存中分配一个缓冲区,缓冲区中包含了处理过程的必需信息,包括已经处理完的行数、指向被分析行的指针和查询情况下的活动集,即查询语句返回的数据行集。该缓冲区域称为上下文区,游标是指向该缓冲区的句柄或指针。 -
显示游标的操作过程:
- 定义游标:使用
CURSOR
关键字定义游标,并指定查询语句。DECLARE CURSOR cur_name IS SELECT column1, column2 FROM table_name;
- 打开游标:使用
OPEN
语句打开游标并执行查询。OPEN cur_name;
- 检索数据:使用
FETCH INTO
语句获取游标中的数据行。FETCH cur_name INTO variable1, variable2;
- 关闭游标:当查询结束时,使用
CLOSE
语句关闭游标。CLOSE cur_name;
- 定义游标:使用
编程题
实验报告里面出。
1、事务和闪回
事务提交和闪回删除
事务提交是指将当前事务中的所有操作永久性保存到数据库中。闪回删除则是指删除某个数据对象时,通过闪回技术恢复该数据对象删除前的状态。
例子:事务提交
-- 开始事务
BEGIN
-- 插入一条记录
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1001, 'John', 'Doe');
-- 提交事务
COMMIT;
END;
例子:闪回删除
-- 删除记录
DELETE FROM employees WHERE employee_id = 1001;
-- 使用闪回删除恢复删除的记录
FLASHBACK TABLE employees TO TIMESTAMP (SYSDATE - INTERVAL '1' HOUR);
-- 将数据库闪回到scn1时的状态
FLASHBACK DATABASE TO SCN scn1;
解释:
- 在事务提交部分,
BEGIN
到COMMIT
之间的操作将作为一个原子操作进行执行,一旦提交,所有操作将永久保存。 - 闪回删除部分使用
FLASHBACK
命令恢复在过去1小时内删除的记录。
2、用户和权限
登录并赋予权限
-- 创建用户
CREATE USER user1 IDENTIFIED BY password1;
-- 为用户1赋予权限 CONNECT, RESOURCE
GRANT CONNECT, RESOURCE TO user1;
-- 创建第二个用户
CREATE USER user2 IDENTIFIED BY password2;
-- 为第二个用户赋予权限
GRANT CONNECT TO user2;
-- 创建用户,自己的姓名的英语, 密码自己的学号后四位。
-- 默认表空间为USERS。皆不限制配额(quota unlimited)
CREATE USER haoxiugong IDENTIFIED BY 0619
DEFAULT TABLESPACE USERS
QUOTA UNLIMITED ON USERS;
第二个用户登录并创建概要文件
-- 登录为user2
-- 创建概要文件
CREATE PROFILE user2_profile LIMIT
SESSIONS_PER_USER 5
CPU_PER_SESSION 10000
IDLE_TIME 30;
-- 将概要文件赋给某个用户
ALTER USER user1 PROFILE user2_profile;
-- 收回user1创建表格的权限
REVOKE CREATE TABLE FROM user1;
解释:
- 用户
user1
和user2
分别被创建并赋予了不同的权限。 user2
登录后创建了一个概要文件user2_profile
,然后将该概要文件应用到user1
。
3、SQL 的查询语句
-
查询所有数据:
SELECT * FROM employees;
-
查询特定列:
SELECT first_name, last_name FROM employees;
-
插入一条记录:
INSERT INTO employees (employee_id, first_name, last_name) VALUES (1002, 'Jane', 'Smith');
-
更新记录:
UPDATE employees SET first_name = 'John', last_name = 'Doe' WHERE employee_id = 1001;
-
删除记录:
DELETE FROM employees WHERE employee_id = 1002;
-
查询带条件的数据:
SELECT * FROM employees WHERE department_id = 10;
-
聚合查询(COUNT、SUM、AVG):
SELECT COUNT(*) FROM employees; SELECT AVG(salary) FROM employees;
-
使用GROUP BY进行分组:
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id;
-
查询排序结果:
SELECT * FROM employees ORDER BY salary DESC;
-
连接查询:
SELECT e.first_name, e.last_name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id;
4、PL/SQL 程序
循环、异常、函数调用、定义
例子:PL/SQL程序 - 使用循环和异常
DECLARE
v_employee_id employees.employee_id%TYPE;
v_salary employees.salary%TYPE;
BEGIN
FOR v_employee_id IN 1000..1010 LOOP
BEGIN
-- 查询员工的薪资
SELECT salary INTO v_salary
FROM employees
WHERE employee_id = v_employee_id;
-- 如果薪资低于5000,则抛出异常
IF v_salary < 5000 THEN
RAISE_APPLICATION_ERROR(-20001, 'Salary too low');
END IF;
-- 输出员工薪资
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee_id || ', Salary: ' || v_salary);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Employee ID ' || v_employee_id || ' not found');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error occurred for Employee ID ' || v_employee_id);
END;
END LOOP;
END;
解释:
- 循环:使用
FOR
循环遍历员工ID。 - 异常:使用
EXCEPTION
处理查询中的异常情况。NO_DATA_FOUND
:没有找到对应的员工。OTHERS
:其他所有异常。
- 函数调用:使用
DBMS_OUTPUT.PUT_LINE
输出员工薪资信息。
例子:PL/SQL程序 - 函数调用和定义
-- 定义一个简单的函数
CREATE OR REPLACE FUNCTION get_employee_salary (p_employee_id IN NUMBER)
RETURN NUMBER
IS
v_salary employees.salary%TYPE;
BEGIN
-- 获取员工薪资
SELECT salary INTO v_salary
FROM employees
WHERE employee_id = p_employee_id;
RETURN v_salary;
END;
/
-- 调用函数
DECLARE
v_emp_salary NUMBER;
BEGIN
v_emp_salary := get_employee_salary(1001);
DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || v_emp_salary);
END;
解释:
- 函数定义:定义了一个
get_employee_salary
函数,接受员工ID作为输入参数,返回该员工的薪资。 - 函数调用:在匿名块中调用该函数并输出结果。