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掉之后,原本在这个节点处理的请求会自动的转移到其他可用的节点上面。而对于用户而言,整个环境内部是透明的,就如同一台服务器一样。这就是集群的概念。
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的方式,这样会导致备机无法与主机同步。