Oracle复习题

Oracle复习题

1、同义词是模式对象的一个别名,模式对象包括表、索引、视图等。

2、Oracle 11g的全局数据库名称由数据库名称和网域名称组成。

3、Oracle 11g数据库服务器由Oracle数据库软件和Oracle实例组成。

4、总体来说,数据库系统由数据库、硬件、软件和数据库管理员组成。

5、表空间有三种类型:永久性、临时性和还原性。

6、状态选项用于设置表空间状态,状态有读写、只读和脱机三种。

7、在Order By子句中,用于升序排列的关键字是ASC。

8、用户账号拥有的对象集称为用户的方案。

9、用于指出一个字符串是否与指定的字符串相匹配的谓词是Like。

10、禁用约束所使用的关键字是Disable。

11、段空间管理又分为手工段和自动段两种空间管理方式。

12、在Oracle系统中,为列指定别名既可以使用AS关键字,也可以不使用任何关键字而直接指定。

13、在Order By子句中,用于降序排列的关键字是DESC。

14、如果要在Oracle中另外创建索引,一般有两种方法:使用SQL Developer和PL/SQL命令。

15、激活约束所使用的关键字是Enable。

16、Oracle提供了3类运算符:算数运算符、关系运算符和逻辑运算符。

17、整个PL/SQL块分3部分:声明部分、执行部分和异常处理部分。

18、表空间有三种类型:永久性、临时性和还原性。

19、Oracle的自定义异常可以分为错误编号异常和业务逻辑异常两种。

20、能够引起触发器运行的操作就被称为触发事件。

21、一般情况下,Oracle的锁可以分为:DML锁、DDL锁和内部锁。

22、数据字典是Oracle存放数据库内部信息的地方,用来描述数据库内部的运行和管理情况。

23、用于消除结果集中的重复行的关键字是DISTINCT。

24、在Oracle中,通过游标操作数据主要使用显示游标和隐式游标。

25、事务的提交方式包括:显式提交、自动提交和隐式提交。

26、DDL锁有独占DDL锁、共享DDL锁和可破的分析DDL锁。

27、根据系统管理方式的不同,在Oracle数据库中将权限分为两大类:系统权限和对象权限。

28、角色是一个独立的数据库实体,它包括一组权限。

29、数据字典是Oracle存放数据库内部信息的地方,用来描述数据库内部的运行和管理情况。

30、按照索引列的个数又可以将索引分为单列索引和复合索引。

31、事务的状态分为:活动状态、部分提交状态、失败状态、提交状态和中止状态。

32、在建立数据库之前,必须指定数据库实例的系统表示符,此系统标识符就是SID。

33、PL/SQL中的循环语句主要包括:Loop语句、While语句和for语句3种。

34、根据异常产生的机理和原理,可将Oracle系统异常分为两大类:预定义异常和自定义异常。

35、审计用来监视和记录所选用的数据活动。

36、视图是一个虚拟表,它由存储的查询构成,可以将它的输出看作一个表。

名词解释

1、非归档模式。

非归档模式就是指在系统运行期间,所产生的日志信息不断地记录到日志文件组中,当所有重做日志组被写满后,又重新从第一个日志组开始覆写。

非归档模式的运行机制是:不备份,恢复能力有限。

特点是:缺点 占空间小 优点 恢复能力差。

2、归档模式。

归档模式就是指各个日志文件都被写满并即将被覆盖之前,先由递归进程将即将被覆盖的日志文件中的日志信息读出,并将“读出的日志信息”写入归档日志文件中,这个过程又被称为归档操作。

归档模式运行机制是:重复写数据,当文件写满重新备份再写、恢复强、占空间。

特点是:缺点 占地方 优点 恢复能力强。

3、B树索引。

Oracle的标准索引结构是是一个典型的B树结构,其包含的组件主要是:

  1. 叶子结点:包含条目直接指向表里的数据行

  2. 分支结点:包含的条目指向索引里其他的分支节点或者叶子节点

  3. 根节点:一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点

    B树索引

4、外键。

外键(foreign key)是指“当前表”引用“另外一个表”的某个列或某几个列,而“另外一个表”中被引用的列必须具有主键约束或者唯一性约束。

5、回退事务。

回退事务(rollback语句)是指撤销对数据库进行的全部操作,Oracle利用回退段来存储修改前的数据,通过重做日志来记录对数据所做的修改。

回退点又称为保存点,指在含有较多SQL语句的事务中间设定的回滚标记,其作用类似于调试程序的中断点。利用保存点可以将事务划分为若干部分,可以回滚到指定的保存点,保存点记录的是当前数据库的状态

在事务commit提交前,可以使用rollback 到指定的保存点,来回退到指定的保存点

在事务commit提交后,保存点会被删除,这个时候,就无法进行回退了

这里在使用保存点之前,强调一点,任何commit操作,也就是事务提交操作,都会导致savepoint的被删除!!!

6、提交事务

当执行使用commit语句可以提交事务.当执行了commit语句后,会确认事务的变化、结束事务、删除保存点、释放锁。在此之前,与当前事务相关的数据都会被加锁,直到当前事务进行了commit操作,如果在这个过程中有其他回话试图操作相关数据,(这些数据已经被当前事务加锁),那么其他回话会进行等待,或者直接返回错误。

注意:只有在提交事务之后也就是进行commit操作之后,数据才会真正的发生改变,在commit提交之前操作,全部被记录入Oracle日志系统

7、视图。

视图是一个虚拟表,它由存储的查询构成,可以将它的输出看作一个表。视图同真的表一样,也可以包含一系列带有名称的列和行数据,但是视图并不在数据库中存储数据值,其数据值来自定义视图的查询语句所引用的表,数据库只在数据字典中存储视图的定义信息。

视图是一个逻辑表,是查看表的一种方式。视图是对根据预定义的选择标准、由一个或者多个行的集合建立起来的动态表的静态定义。

8、变量。

变量是指其值在程序运行过程中可以改变的数据存储结构,定义变量必需的元素就是变量名和数据类型.另外还有可选择的初始值,其标准语法格式如下:

1
<变量名> <数据类型> [(长度):=<初始值>];

9、常量。

常量是指其值在程序运行过程中不可改变的数据存储结构,定义常量必需的元素包括常量名、数据类型、常量值和constant关键字,例如一年四个季度,9月有30天,圆周率等,其标准语法格式如下:

1
<常量名> constant <数据类型>:=<常量值>;

10、连接。

连接(Join)是把两个表中的行按照给定的条件进行拼接而形成新表。

多个数据表,每个表的信息不是独立存在,而是存在一定关系,当用户查询某个表的信息时,很可能需要查询关联数据表的信息,这就是多表关联查询。

简答题

1、在Oracle 11g系统中,约束的类型包括哪几种?

约束分为5种: 非空(NOT NULL)约束、 唯一性(UNIQUE)约束、主键(PRIMARY KEY)约束、外键(FOREIGN KEY)约束、检查(CHECK)约束。

  非空(NOT NULL)约束:顾名思义,所约束的列不能为NULL值。否则就会报错
  唯一(UNIQUE)约束:在表中每一行中所定义的这列或这些列的值都不能相同。必须保证唯一性。否则就会违法约束条件。

  主键(PRIMARY KEY)约束:唯一的标识表中的每一行,不能重复,不能为空。 创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)。需要注意的是:每个表只能有且有一个主键约束。

  外键(FOREIGN KEY)约束:用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等SQL性能的额外开销,不少系统里面通过业务逻辑控制来取消外键约束。例如在数据仓库中,就推荐禁用外键约束。

  检查(CHECK)约束:表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。
  REF约束的定义:REF column by definition references an object in another object type or in a relational table. A REF constraint lets you further describe the relationship between the REF column and the object it references.

2、Oracle 11g默认创建的主要表空间有哪些?

SYSTEM、USERS、TEMP、SYSAUX、UNDOTBS1、EXAMPLE

SYSTEM:system表空间是永久表空间,用于存储SYS用户的表、视图、存储过程对象。

每个ORACLE数据库至少有一个SYSTEM表空间,这是数据库创建时自动创建的。

USERS:users表空间是永久表空间,存储数据库用户创建的数据库对象

TEMP:temp表空间是临时表空间,用户存储SQL语句处理的表示索引信息。

SYSAUX:作为SYSTEM的辅助表空间。

UNDOTBS1:Undotbs1表空间是存储撤销信息的undo表空间。

EXAMPLE:安装Oracle数据库示例的表空间

3、Oracle的系统全局(SGA)的主要部件有哪些?

SGA是所有用户进程共享的一块内存区域,主要部件有高速数据缓冲区、共享池、重做日志缓冲区、Java池和大型池。

(1)数据高速缓冲区:存放着Oracle系统最近使用过的数据库数据块。

(2)共享池:相当于程序高速缓冲区,所有的用户程序都存放在共享SQL池中。

(3)重做日志缓冲区:用于缓冲区在对数据进行修改的操作过程中生成的重做记录.
(4)大型池:在SGA区中不是必需的内存结构,只在某些特殊情况下,实例需要使用大型池来减轻共享池的访问压力,常用情况有:备份和恢复、执行具有大量排序操作的SQL语句、使用并行查询时。

4、在哪些情况下,实例需要使用大型池来减轻共享池的访问压力?

(1)使用恢复管理器进行备份和恢复操作时,大型池将作为I/O缓冲区使用。

(2)使用I/O Slave仿真异步I/O功能时,大型池将被作为I/O缓冲区使用。

(3)执行具有大量排序操作的SQL语句。     

(4)当使用并行查询时,大型池作为并行查询进程彼此交换信息的地方。

5、回滚到指定保存点时,将完成哪些主要的工作?

  1. 回滚保存点之后的部分事务。
  2. 删除在该保存点之后建立的全部保存点,但保留该保存点,以便多次回避。
  3. 解除保存点之后表的封锁或行的封锁。

6、自治事务提供了一种利用PL/SQL控制事务的新方法,可以用于哪几种情况?

  • 顶层匿名块
  • 本地(过程中的过程)、独立或打包的函数和过程
  • 对象类型的方法
  • 数据库触发器

编程题

1、在scott模式下,创建学生表(XSB),其表结构如下:

列名 数据类型 是否可空 默认值 说明 列名含义
XH char(6) 主键 学号
Xm char(8) 姓名
Xb char(2) “男” 性别
Cssj date 出生日期
Zy char(12) 专业
Zxf number(2) 0 总学分
Bz varchar2(200) 备注
1
2
3
4
5
6
7
8
9
CREATE TABLE XSB(
XH char(6) NOT NULL PRIMARY KEY,
XM char(8) NOT NULL,
XB char(2) DEFAULT '1' NOT NULL,
CSSJ date NOT NULL,
ZY char(12) NULL,
zxf number(2) NULL,
BZ varchar2(200) NULL
);

2、在scott模式下,创建课程表(KCB),其表结构如下:

列名 数据类型 是否可空 默认值 说明 列名含义
KCH char(3) 主键 课程号
KCM char(16) 课程名
KKXQ number(1) 1 开课学期
XS number(2) 0 学时
XF number(1) 0 学分
1
2
3
4
5
6
7
CREATE TABLE KCB(
KCH char(3) NOT NULL PRIMARY KEY,
KCM char(16) NOT NULL,
KKXQ number(1) DEFAULT '1',
XS number(2) DEFAULT '0',
XF number(1) DEFAULT '0'
);

3、假设有一个与jobs表结构一样的表jobs_temp,然后将jobs表中最高工资额(max_salary)大于10000的记录插入到新表jobs_temp中。

1
insert into jobs_temp select * from jobs where jobs.max_salary>10000;

4、在scott模式下,把emp表中职务为销售员(SALESMAN)的工资上调20%。

1
update emp set sal=sal*(1+0.2) where job='SALESMAN';

5、在emp表中,查询工资大于部门编号为10的任意一个员工工资的其他部门的员工信息(包括部门编号,员工名和工资)。

1
select deptno,ename,sal from emp where sal>any(select sal from emp where DEPTNO=10)and deptno!=10;

6、在Scott模式下,查询emp表中所有管理者所管理的下属员工信息。

1
select e2.ename as 上层管理层,e1.ename as 下属员工 from emp e1 left join emp e2 on e1.mgr=e2.empno order by e1.mgr

7、声明一个检索emp表中雇员信息的游标,该游标名为cur_emp,然后打开游标,并指定检索职务是“MANAGER”的雇员信息(包括:empno,ename,sal),接着使用fetch…into语句和while循环读取游标中的所有雇员信息,最后输出读取的雇员信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
set serveroutput on/**/
declare
/*声明游标,检索信息*/
cursor cur_emp(var_job in varchar2:='SALESMAN')
is select empno,ename,sal from emp where job=var_job;
type record_emp is record /*声明一个记录类型(RECORD类型)*/
(
/*定义当前记录的成员变量*/
var_empno emp.empno%type,
var_ename emp.ename%type,
var_sal emp.sal%type
);
emp_row record_emp; /*声明一个RECORD——emp类型的变量*/
begin
open cur_emp('MANAGER'); /*打开游标*/
fetch cur_emp into emp_row; /*先让指针指向结果集中的第一行,并将值保存到emp_row*/
while cur_emp%found loop
dbms_output.put_line(emp_row.var_ename||'的编号是'||emp_row.var_empno||',工资是'||emp_row.var_sal);
fetch cur_emp into emp_row; /*让指针指向结果集中的下一行,并将值保存到emp_row中*/
end loop;
close cur_emp; /*关闭游标*/
end;
/

8、在Scott模式下,把emp表中销售员(即SALESMAN)的工资上调20%,然后使用隐式游标sql的%rowcount属性输出上调工资的员工数量。

1
2
3
4
5
6
7
8
9
10
set serveroutput on/**/
begin
update emp set sal=sal*(1+0.2) where job='SALESMAN';
if sql%notfound then /*若update语句没有影响到任何一行数据*/
dbms_output.put_line('无员工上调工资');
else /*若update语句至少影响到一行数据*/
dbms_output.put_line('有'||sql%rowcount||'个雇员工资上调20%');
end if;
end;
/

Oracle复习题
http://example.com/2021/08/23/Oracle复习题/
Author
lzdong
Posted on
August 23, 2021
Licensed under