oracle面试题
Posted 陈如水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle面试题相关的知识,希望对你有一定的参考价值。
索引原理
1,表中的数据按照索引从大到小排列;
2,取出两个字段,索引字段(sal)和rowid;
3,把这个结果集保存在一张特殊的表里面---->索引表;
4,根据索引表建立一颗Btree,使用二分查找法进行查找数据。
数据库的三大范式是什么?
1)第一范式:原子性,要求表中的每一列不可拆分
2)第二范式:一张表只描述一个实体
3)第三范式:所有列与主键直接相关,而不是间接相关
怎样优化Oracle数据库?
个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO。
优化的一些原则:
1). Oracle的运行环境(网络,硬件等)
2). 使用合适的优化器;
3). 合理配置oracle实例参数;
4). 建立合适的索引(减少IO);
5). 将索引数据和表数据分开在不同的表空间上(降低IO冲突)
6). 建立表分区,将数据分别存储在不同的分区上(以空间换取时间,减少IO)。
sql语句应该考虑哪些安全性?
1).防止sql注入,对特殊字符进行转义,过滤
2).使用预编译的sql语句绑定变量。
3).最小权限原则,特别是不要用root账户,为不同的类型的动作或者组建使用不同的账户。
4).当sql运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄漏服务器和数据库相关信息。
请简述项目中优化sql语句执行效率的方法?
1)将where中用的比较频繁的字段建立索引;
2)减少表之间的关联,少使用join;
3)避免在索引列上使用计算,not,in和<>等操作;
4)select子句中避免使用‘*’,只查询使用的字段;
5)尽量用PreparedStatement来查询,不要用Statement。
什么情况下设置了索引但无法使用
1)以“%”开头的LIKE语句 (模糊查询);
2)OR语句前后没有同时使用索引;
3)数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型);
请简述oracle中的锁
行级锁主要是在执行操作过程中,锁定指定的行。主要的锁行语句有:
insert ,update,delete ,及select ....for update。
表级锁:指在运行操作指令过程中,由用户指定锁定某张表。
lock table XXX in mode share;--共享锁,
3)oracle中的锁分为共享锁,排他锁,共享排它,行共享,行排他等
怎样创建一个一个索引,索引使用的原则,有什么优点和缺点 ?
创建索引的基本语法:
CREATE INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名;
索引使用原则:
1)索引字段建议建立NOT NULL约束
2)经常与其他表进行连接的表,在连接字段上应该建立索引;
3)经常出现在Where子句中的字段,应该建立索引;
4)频繁DML的表,不要建立太多的索引;
5)不要将那些频繁修改的列作为索引列;
6)表中数据量少时,不适合创建索引
索引优点:
1)创建唯一性索引,保证数据库表中每一行数据的唯一性
2)大大加快数据的检索速度,这也是创建索引的最主要的原因
3)加速表和表之间的连接
4)在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
索引缺点:
1)索引创建在表上,不能创建在视图上
2)创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
3)索引需要占物理空间
4.)当对表中的数据进行增删改的时候,索引也要动态的维护,降低了数据的维护速度
oracle用户是干嘛的,oracle用户的概念
oracle用户,通俗的讲就是访问oracle数据库的“人”。下面就让我们一起来了解一些oracle用户方面的知识。
一、用户的概念
oracle用户,即user,通俗的讲就是访问oracle数据库的“人”。在oracle中,可以对oracle用户的各种安全参数进行控制,以维护数据库的安全性,这些概念包括模式(schema)、权限、角色、存储设置、空间限额、存取资源限制、数据库审计等。每个用户都有一个口令,使用正确的用户/口令才能登录到数据库进行数据存取。
二、用户默认表空间
表空间是信息存储的逻辑单位、当oracle用户连接到数据库进行资料存储时,若未指出数据的目标存储表空间时,则数据存储在用户的默认表空间中。比如:create table mytable(id varchar2(20),name varchar2(100)); 这条语句创建了一个表mytable,并将其存储在当前用户的默认表空间中,若要指定表空间,则:create table mytable(id varchar2(20),name varchar2(100)) tablespace tbs1;。用户的默认表空间可以在创建用户时指定,也可以使用aler user命令进行指定,具体语法见后面的介绍。
三、用户临时表空间
临时表空间主要用于order by语句的排序以及其它一些中间操作。在oracle9i之前,可以指定用户使用不同的临时表空间,从9i开始,临时表空间是通用的,所的用户都使用TEMP作为临时表空间。
四、用户资源文件
oracle用户资源文件用来对用户的资源存取进行限制,包括:cpu使用时间限制、内存逻辑读个数限制、每个用户同时可以连接的会话数据限制、一个会话的空间和时间限制、一个会话的持续时间限制、每次会话的专用SGA空间限制。
五、用户表空间限额
表空间存储限制是用户在某一个表空间中可以使用的存储空间总数。在创建或修改用户时,可以由参数quota指出。若用户在向表空间存储数据时,超出了此限额,则会产生错误。错误信息如:'ORA-01536:space quota exceeded for tablespace tablespacename..'。可以通过查询字典dba_ts_quotas查看表空间限额信息。
以上是关于oracle面试题的主要内容,如果未能解决你的问题,请参考以下文章