Oracle数据库面试题

1、什么是数据库?

使用数据结构存储数据的仓库。

2、什么是关系型数据库?

使用关系模型存储数据的数据库。

关系模型指表与表之间的关系,包含一对一、一对多、多读多。

3、什么是非关系型数据库?

使用非关系模型保存数据的数据库。例如列存储、键值对、文件形式。

4、说一说数据库三大范式?

第一范式,表中字段是原子的,不可再分;

第二范式,表中字段必须依赖主键的全部字段,不能只依赖一部分;

第三范式,表中字段必须直接依赖主键,不能存在传递依赖。

其实真正的数据库设计并没有遵循三大范式,特别是OLAP型数据库

5、说一说对DML、DDL、DCL语言的理解

DML:数据库操纵语言,例如update、insert、delete对表中数据操作的语言;

DDL:数据库定义语言,例如create、drop、alter、truncate等对数据库对象操作的语言;

DCL:数据库控制语言,例如grant、revoke、commit、rollback、savepoint对事物控制的语言。

6、delete与truncate的区别?

1)Delete是DML语言,truncate是DDL语言;

2)delete删除时写undo日志,truncate不写undo日志;

3)delete删除后可以找回数据,truncate是永久删除;

4)delete可以全删也可以删除部分数据,truncate只能全部删除数据;

5)delete删除高水位线不变,truncate删除会重置高水位线。

7、表的分类

1)堆组织表,我们最常用的一种表,分配的存储空间是不连续的,无组织的;

2)索引组织表,将表中所有字段有序存储的一张表,可以把整张表看作一个索引;关键字:

3)临时表,用来临时存储数据的表,可以用在存储过程中保存中间结果。关键字:

4)聚簇表,如果一些表有一些共同的列,则将这样一组表存储在相同的数据块中

聚簇还表示把相关的数据存储在同一个块上。分为:Hash clustered table与索引聚簇表。Hash clustered table与索引聚簇表非常相似,只有一个主要区别:聚簇键索引被一个hash函数所取代,表中的数据就是索引.

5)对象表,先定义一个对象类型,再创建一个对象类型的表

6)嵌套表,一个表作为另一个表的字段

7)外部表,使用外部文件存储数据,需要先在磁盘空间中指定一个目录存储数据文件

8、分区表的分类

范围分区、列表分区、哈希分区、复合分区(范围—列表、范围—哈希)

范围分区:每个分区给分区字段指定一个区间,最后需要创建一个maxvalue分区

列表分区:每个分区给分区字段设置一个或多个值,有时候需要创建一个default分区

哈市分区:分区的范围不可控,系统使用hash函数自动计算数据应存储在哪个分区

9、分区的优点和缺点

优点:

1)提高查询速度

2)减少IO操作

3)提高可用性,一个分区出错,不影响其他分区数据使用

4)减少恢复时间,一个分区出错,只对当前分区恢复

5)操作分区表可以像操作普通表一样简单

缺点:

数据如果没有映射到分区,将会报错

按时间划分的分区,需要定期增加分区

10、索引的是什么?使用索引的优缺点

索引是一种排好序的数据结构。

优点:提高查询速度

缺点:占用空间,insert、delete、update需要维护索引

11、索引分类

主键索引:作为主键的字段不能全空,主键必须唯一

唯一索引:作为索引的字段可以全为空,索引字段必须唯一

普通索引:

组合索引:一个索引包含两个及以上字段

函数索引:使用函数创建的索引

倒叙索引:将字段倒排序之后创建索引

反向键索引:将字段中数据从头到尾颠倒过来后创建索引

位图索引:与以上所有的数据结构不同,是一张表,对索引字段值组合出所有情况,并比较每一行数据的索引字段值的分部。

12、创建索引的注意事项

1)一个表上的索引个数不应超过5个

2)对经常一起使用的字段,建组合索引

3)不要在频繁修改的字段上建索引

4)不要对识别率不高的字段建索引

5)不要对持续增加分区的分区表建全局索引

13、避免索引失效的注意事项

1)不要对非函数索引的字段使用函数

2)不要在索引字段上运算

3)防止索引字段的类型发生转换

4)使用like 时不要将通配符放在字符首位

5)非位图索引不要用is null、is not null

6)不要使用<>

6)不要使用not in

14、存储过程与函数的区别

存储过程和函数的本质区别是:存储过程是为了解决某个业务逻辑组合起来的plsql代码块;函数是为了实现某中计算并返回计算结果的plsql代码块;

1)函数能返回结果;存储过程不能返回结果

2)调用方式不通

15、什么是包

包是对一个业务模块的封装,为了提高代码的安全性,防止代码被其他人员删除。

包分为包头和包体

包头:定义包中的对象,包含存储过程、函数、游标、变量、数组等

包体:对包头中存储过程和函数的实现

16、什么是触发器

触发器是在做一个数据库操作时触发的一个事假,常用的就是对表中数据修改时的触发器

表级触发器:对表操作时触发的,一次操作只触发一次

行级触发器:对表中每一行数据操作都触发一次

事前触发器:在对表修改前触发,可以获得新值和旧值

事后触发器:在对表修改后触发,可以获得新值

对表的触发事件有insert、delete、update

17、触发器中可以commit吗?

不可以,因为触发器的提交是与操作提交是一起的,如果触发器可以提交,操作报错,将无法回滚到开始时的状态。

18、使用视图的优缺点

优点

1)隐藏内部实现环节,提高安全性

2)减少查询字段,减少IO

3)降低开发复杂度,前端开发可以像使用表一样使用视图

缺点

写的不好的视图将会降低查询效率

19)数据库优化

数据库优化是个工程量很大的工作包括很多方面

1)sql语句方面

2)数据库方面

3)业务方面

4)IO方面

5)硬件网络方面

下面分开来说

Sql语句优化

保证正确结果的情况下,提高sql语句的执行速度,SQL优化的好坏只能用实际执行速度衡量,以下只是减少写出劣质SQL的建议

a)避免索引失效(注意点比较多)

b)不要关联不需要的表

c)不要写多余的关联条件和筛选条件

d)尽量使用系统函数而不是自定义函数

e)规范书写where子句(注意点比较多)

   in替换or

   union all替换or

   union替换union all

   >=替换>、<=替换<

   Exists替换in、not exists替换not in

   能在where中过滤的条件不写到having中去

f)全表删除用truncate替换delete

g)去重时使用rowid做条件删除

h)较少解析时间

   给表取别名,全大写

   绑定变量

   不用动态sql

i)一条sql语句关联大表应少于5个

j)用with tab as减少重复表的复杂关联

k)组合索引的第一个字段要的出现在条件中

l)避免对那些经常会被删除的的字段建索引

m)避免为那些唯一度不高的字段创建B*树索引

数据库级别优化

a)创建索引

b)使用分区表

c)多张大表关联,使用并行

d)olap型数据库增加large pool大小、增加临时表空间大小

f)oltp型数据库增加database buffer cache命中率,减少磁盘IO

业务方面优化

要根据实际业务优化数据加工的过程,需要熟悉非常熟悉业务逻辑

IO方面

减少物理和网络IO

a)使用分区表

b)前端代码查询时不要用select *

c)使用存储过程,避免前端代码与数据库频繁交互

硬件网络方面

a)增加cpu和内存

b)使用千兆光纤和高性能交换机

20、事务的四大特性

1)原子性:事务要么全做,要么全不做

2)一致性:事务完成签后状态一致,不能产生错误结果

3)隔离性:各个事务见状态不可见,且互补影响

4)永久性:事务一旦完成,结果永远不会改变,即使机器故障,也能通过日志恢复

21、对数据操作时存在的问题

脏读、不可重复读、幻读、覆盖

22、事务隔离级别

读未提交:不解决问题

读提交:解决脏读、覆盖 (Oracle默认支持级别)

可重复读:解决脏读、覆盖、不可重复读

序列化:解决脏读、不可重复读、幻读、覆盖 (Oracle支持级别)

23、锁的分类

1)两种锁机制

独占锁(Exclusive Lock):即X锁,又称排它锁,是用来防止同时共享相同资源的锁。加了独占锁的数据库对象不能被其它事务读取和修改。
共享锁(Share Lock):即S锁,是通过对数据存取的高并行性来实现的。加了共享锁的数据库对象可以被其它事务读取,但是不能被其它事务修改。

2)锁类型

DML锁(data locks,数据锁):用于保护数据的完整性,能够防止同步冲突的DML和DDL操作的破坏性交互。
DDL锁(dictionary locks,字典锁):用于保护数据库对象的结构,如表、索引等的结构定义。
内部锁和闩(internal locks and latches):保护数据库的内部结构,如数据文件,对用户是不可见的。

3)DML锁

DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁

TM锁:当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位

TX锁:Transaction Exclusive Lock行级排它锁,对一条记录加上TX锁后,其他用户不能修改、删除该记录

4)DDL锁

DDL锁包括三种类型:排它的DDL锁定、共享的DDL锁定、可打破的解析锁定

排它的DDL锁定:大部分的DDL操作都会在被操作的对象上添加排他的DDL锁定,从而防止在DDL命令执行期间,对象被其他用户所修改。

共享的DDL锁定:用来保护被DDL的对象不被其他用户进程所更新,但是允许其他进程在对象上添加共享的DDL锁定。如果是对表进行DDL命令,则其他进程可以同时修改表里的数据。比如我们发出create view命令创建视图时,在视图的所引用的表(这种表也叫基表)上添加的就是共享的DDL命令。

5)内部锁和闩

内部锁保护内部数据库结构,如数据文件,对用户是不可见的。

24、实例与数据库的区别

实例是内存中一块空间和一些进程的组合,用来管理数据库,数据库是磁盘上的文件,为实例运行提供支持。实力和数据库关系,单机:一对一;RAC多对一

25、SGA的组成部分

数据库缓冲区缓存(Database buffer cache)、重做日志缓冲区(redo buffer)、共享池(share pool)、大池(large pool)、Java池(Java pool)、流池(stream pool)

共享池包含:库缓存(library cache)、数据字典缓存

数据库缓冲区缓存:存储从数据文件中读取到的数据块

重做日志缓冲区:保存重做日志

库缓存:存储sql语句解析以及执行计划

数据字典缓存:存储解析sql语句以及管理数据库的信息

大池:并行操作时、数据库恢复时使用

26、后台进程

SMON:系统管理进程,管理

PMON:进程管理进程,

DBWn:将数据库缓冲区缓存中的脏块写入数据文件

      每3秒一次

      遇到检查点进程执行时

      缓存满时

      脏块达到1/4时

      表空间只读或脱机时

LGWR:将重做日志缓冲区中的日志写入在线重做日志文件

Commit

日志1/3时

DBWn写脏数据时

CKPT:检查点,定时执行,更新更新控制文件和数据文件头

ARCn:归档模式下,将在线重做日志写入归档日志

27、数据库文件包含

参数文件、控制文件、数据文件、重做日志文件、归档日志文件

28、数据库数据文件逻辑结构

表空间:一个表属于一个表空间,一个表空间包含多个数据文件

段:通常理解一张表就是一个段,分区表一个分区就是一个段

    数据段:对应数据表

索引段:对应索引

临时段:用来保存执行过程中的临时数据

LOB段:保存表中LOB字段类型的数据

undo段:update、delete时保存操作之前的数据

区:

块:IO读写的最小粒度

29、数据导入导出方式

Exp/imp

数据泵

Plsql工具

Sqlldr、spool

30、数据库冷备份与热备份以及他们的优缺点

冷备份:在数据库关闭状态下备份,拷贝参数文件、控制文件、数据文件、日志文件。

热备份:在数据库运行时,开启归档模式下进行备份

冷备份优缺点:

优点:

备份简单,出错率低。只需找到数据文件备份即可

缺点:

备份期间数据库需要关闭

只能恢复到某一时间点的数据

只能全库恢复

热备份优缺点

优点:

不需要关闭数据库,备份和恢复时时数据库也可以工作

可以按照数据库文件和表空间进行备份

可以恢复到秒级的数据

缺点:

备份不能出错,一旦出错此次备份不可用。

31、什么是游标?隐式游标与显式游标的区别?

游标是用例执行SQL时保存其数据结果集

32、Awr工具

1)授权

2)执行awr工具sql语句

@/u01/app/oracle/product/11.2.0/db_1/rdbms/admin/awrrpt.sql

3)选择报错报告文件格式

Type Specified:  html

4)要查询近几天的快照

Enter value for num_days: 7

5)输入开始快照号

Enter value for begin_snap: 1457

6)输入结束快照号

Enter value for end_snap: 1458

7)输入报告文件名称

Enter value for report_name: /home/oracle/23.html

8)执行结束,找到文件

Report written to /home/oracle/123.html

33、Awr报告使用说明

主要查看

1)Top 5 Timed Foreground Events

2)CPU内存利用率

3)SQL ordered by Elapsed Time(执行时间排序)

34、sqlldr工具

1)ctl控制文件格式

·  LOAD DATA

·  TRUNCATE|APPEND|DELETE| REPLACE INTO TABLE MANAGER

·  FIELDS TERMINATED BY "," 外部文件的数据以“,”分隔

·  OPTIONALLY ENCLOSED BY '"' 部分字段可以用双引号包起来

·  railing nullcols  表中的字段没有对应的值时填充空值

·  (MGRNO,MNAME,JOB,REMARK char(100000))

2)sqlldr命令

Sqlldr user/[email protected]/ora11g data=1.txt control=1.ctl log=1.log bad=1.bad skip=1

35、spool命令

spool的作用可以用一句话来描述:在sqlplus中用来保存或打印查询结果。

方式一

set trimspool on

set linesize 120

set pagesize 2000

set newpage 1

set heading off

set term off

spool 路径+文件名

select col1||','||col2||','||col3||','||col4||'..' from tablename;

spool off

方式二

#!/bin/sh

DB_USER=zxdbm_ismp                                 #DB USER

DB_PWD=zxin_smap                                    #DB PASSWORD

DB_SERV=zx10_40_43_133                           #DB SERVICE NAME

sqlplus -s $DB_USER/$DB_PWD@$DB_SERV<

set trimspool on

set linesize 120

set pagesize 2000

set newpage 1

set heading off

set term off

spool promt.txt

select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'YYYYMMDD')) from ssrv_sendsms_task;

spool off

EOF

参数说明:

set arraysize 5000;  //此参数可提高SPOOL卸载的速度,最大可以设置为5000
set autotrace on;    //设置允许对执行的sql进行分析
set colsep ',';   //域输出分隔符
set echo off;    //显示start启动的脚本中的每个sql命令,缺省为on
set feedback off;  //回显本次sql命令处理的记录条数,缺省为on,设置显示“已选择XX行”
set heading off;   //输出域标题,字段的名称,缺省为on
SET LINESIZE 2500;   //每行允许的最大字符数,设置大些,免得数据被截断,但不宜过大,太大会大大降低导出的速度(注意必须与trimspool结合使用防止导出的文本有太多的尾部空格)
set newpage 1;       //设置页与页之间的分隔{1|n|NONE};当值为0时在每页开头有一个小的黑方框;当值为n时在页和页之间隔着n个空行;当为none时,会在页和页之间没有任何间隔;
set newp none;       //设置查询出来的数据分多少页显示,如果需要连续的数据,中间不要出现空行就把newp设置为none,这样输出的数据行都是连续的,中间没有空行之类的
set num 18;          //设置数字的长度,如果不够大,则用科学记数法显示
set numwidth 12;    //输出number类型域长度,缺省为10
SET NULL text;       //显示时,用text值代替NULL值
set pagesize 2000;  //输出每页行数,页面大小,缺省为24,为了避免分页,可设定为0
set serveroutput on; //设置允许显示输出类似dbms_output;--编写存储过程时,大多会将必要的信息输出;
SET SPACE 0;
set term off;        //不在屏幕上输出执行结果
set termout off;   //显示脚本中的命令的执行结果,缺省为on
set timing on;       //显示每个sql语句花费的执行时间,设置显示“已用时间:XXXX”
set trimout on;   //去除标准输出每行的拖尾空格,缺省为off
set trimspool on;  //去除重定向(spool)输出每行的拖尾空格,缺省为off
set verify off       //是否显示替代变量被替代前后的语句
SET wrap on;         //输出行长度大于设置行长度时(用set linesize n命令设置);值为on时,多余的字符另起一行显示,否则多余的字符将被切除,不予显示;

36、Rman工具

RMAN(Recovery Manager)恢复管理器,它是一种oracle的专用备份恢复工具。

RMAN实际上是物理备份,任意时间点的恢复可以做到。

archivelog模式,归档模式

noarchivelog模式,非归档模式

RMAN都可以执行脱机备份。

如果数据库处于归档模式,RMAN既可以做脱机备份(冷备份)也可以做联机备份(热备份)。

如果数据库处于非归档模式,RMAN是不能进行联机备份的。

热备份:数据库OPEN状态

冷备份:数据库MOUNT状态

37、RAC

集群分为高可用集群和负载均衡集群,下面我将不区分这两个概念,以防迷糊,我下面说的集群直接是指负载均衡集群。所谓集群就是通过配置搭建一个这样的环境,环境中有两个或两个以上的服务器(节点),这些节点上分别运行着同一个服务,对于服务请求,这些节点将均衡请求负载,而当一个节点down掉之后,原本在这个节点处理的请求会自动的转移到其他可用的节点上面。而对于用户而言,整个环境内部是透明的,就如同一台服务器一样。这就是集群的概念。

Oracle数据库面试题_第1张图片

Oracle数据库面试题_第2张图片

Oracle数据库面试题_第3张图片

36、Grid

在oracle 10g中,grid方案的实现所需的软件包含在不同的地方,主要有clusterware集群软件,database中的RAC实现,以及database中dbca建库中的ASM的实现等。到了oracle  11g后,oracle公司讲实现grid的这些个组件整合到了一起,构成了Grid Infrastructure(GI),这样就像clusterware对于集群一样,GI就是用来实现grid的软件。这时候要注意,GI不等于grid。

GI主要包括了两个主要部分,即clusterware和ASM,当然还有一些其他组件,比如grid control、data pump等。从11gR2开始,如果用户想使用clusterware或者ASM的话,则必须下载安装这个软件。

37、data guard

DATA GUARD的最主要的功能是冗灾。当然根据配置的不同,DATA GUARD还可以具备以下特点:高可用、性能提升、数据保护以及故障恢复等。

Data Guard运行要求:
1.主机必需运行在归档模式下。
2.主备数据库的版本必须一样,操作系统必须一样,版本可不同,主备机可使用不同的目录结构。
3.主备机必须都要运行在32位或64位下。
4.主库避免nologing的方式,这样会导致备机无法与主机同步。

你可能感兴趣的:(数据库,oracle)