数据库oracle面试题及答案
‘壹’ Oracle面试题(基础篇)
Oracle面试题(基础篇)
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。以下是关于Oracle面试题(基础篇),希望大家认真阅读!
1. Oracle跟sql Server 2005的区别?
宏观上:
1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性
2). oracle使用的脚本语言为PL-SQL,而sql server使用的脚本为T-SQL
微观上: 从数据类型,数据库的结构等等回答
2. 如何使用Oracle的游标?
1). oracle中的游标分为显示游标和隐式游标
2). 显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;隐式游标是在执行插入 (insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。
3). 显式游标的操作:打开游标、操作游标、关闭游标;PL/SQL隐式地打开SQL游标,并在它内部处理SQL语句,然后关闭它
3. Oracle中function和procere的区别?
1). 可以理解函数是存储过程的一种
2). 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值
3). 函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程
4). 在sql数据操纵语句中只能调用函数而不能调用存储过程
4. Oracle的导入导出有几种方式,有何区别?
1). 使用oracle工具 exp/imp
2). 使用plsql相关工具
方法1. 导入/导出的是二进制的数据, 2.plsql导入/导出的是sql语句的文本文件
5. Oracle中有哪几种文件?
数据文件(一般后缀为.dbf或者.ora),日志文件(后缀名.log),控制文件(后缀名为.ctl)
6. 怎样优化Oracle数据库,有几种方式?
个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本身的一些优化,逻辑优化是指应用程序级别的优化
物理优化的一些原则:
1). Oracle的运行环境(网络,硬件等)
2). 使用合适的优化器
3). 合理配置oracle实例参数
4). 建立合适的索引(减少IO)
5). 将索引数据和表数据分开在不同的表空间上(降低IO冲突)
6). 建立表分区,将数据分别存储在不同的分区上(以空间换取时间,减少IO)
逻辑上优化:
1). 可以对表进行逻辑分割,如中国移动用户表,可以根据手机尾数分成10个表,这样对性能会有一定的作用
2). Sql语句使用占位符语句,并且开发时候必须按照规定编写sql语句(如全部大写,全部小写等)oracle解析语句后会放置到共享池中
如: select * from Emp where name=? 这个语句只会在共享池中有一条,而如果是字符串的话,那就根据不同名字存在不同的语句,所以占位符效率较好
3). 数据库不仅仅是一个存储数据的地方,同样是一个编程的地方,一些耗时的操作,可以通过存储过程等在用户较少的情况下执行,从而错开系统使用的高峰时间,提高数据库性能
4). 尽量不使用*号,如select * from Emp,因为要转化为具体的列名是要查数据字典,比较耗时
5). 选择有效的表名
对于多表连接查询,可能oracle的优化器并不会优化到这个程度, oracle 中多表查询是根据FROM字句从右到左的数据进行的,那么最好右边的表(也就是基础表)选择数据较少的表,这样排序更快速,如果有link表(多对多中间表),那么将link表放最右边作为基础表,在默认情况下oracle会自动优化,但是如果配置了优化器的情况下,可能不会自动优化,所以平时最好能按照这个方式编写sql
6). Where字句 规则
Oracle 中Where字句时从右往左处理的,表之间的连接写在其他条件之前,能过滤掉非常多的数据的条件,放在where的末尾, 另外!=符号比较的列将不使用索引,列经过了计算(如变大写等)不会使用索引(需要建立起函数), is null、is not null等优化器不会使用索引
7). 使用Exits Not Exits 替代 In Not in
8). 合理使用事务,合理设置事务隔离性
数据库的数据操作比较消耗数据库资源的,尽量使用批量处理,以降低事务操作次数
7. Oracle中字符串用什么符号链接?
Oracle中使用 || 这个符号连接字符串 如 ‘abc’ || ‘d’
8. Oracle分区是怎样优化数据库的`?
Oracle的分区可以分为:列表分区、范围分区、散列分区、复合分区。
1). 增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;
2). 减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,可能比整个大表修复花的时间更少;
3). 维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多;
4). 均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;
5). 改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快
6). 分区对用户透明,最终用户感觉不到分区的存在。
9. Oracle是怎样分页的?
Oracle中使用rownum来进行分页, 这个是效率最好的分页方法,hibernate也是使用rownum来进行oralce分页的
select * from
( select rownum r,a from tabName where rownum <= 20 )
where r > 10
10. Oralce怎样存储文件,能够存储哪些文件?
Oracle 能存储 clob、nclob、 blob、 bfile
Clob 可变长度的字符型数据,也就是其他数据库中提到的文本型数据类型
Nclob 可变字符类型的数据,不过其存储的是Unicode字符集的字符数据
Blob 可变长度的二进制数据
Bfile 数据库外面存储的可变二进制数据
11. Oracle中使用了索引的列,对该列进行where条件查询、分组、排序、使用聚集函数,哪些用到了索引?
均会使用索引, 值得注意的是复合索引(如在列A和列B上建立的索引)可能会有不同情况
12. 数据库怎样实现每隔30分钟备份一次?
通过操作系统的定时任务调用脚本导出数据库
13. Oracle中where条件查询和排序的性能比较?
Order by使用索引的条件极为严格,只有满足如下情况才可以使用索引,
1). order by中的列必须包含相同的索引并且索引顺序和排序顺序一致
2). 不能有null值的列
所以排序的性能往往并不高,所以建议尽量避免order by
14. 解释冷备份和热备份的不同点以及各自的优点?
冷备份发生在数据库已经正常关闭的情况下,将关键性文件拷贝到另外位置的一种说法
热备份是在数据库运行的情况下,采用归档方式备份数据的方法
冷备的优缺点:
1).是非常快速的备份方法(只需拷贝文件)
2).容易归档(简单拷贝即可)
3).容易恢复到某个时间点上(只需将文件再拷贝回去)
4).能与归档方法相结合,作数据库“最新状态”的恢复。
5).低度维护,高度安全。
冷备份不足:
1).单独使用时,只能提供到“某一时间点上”的恢复。
2).在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3).若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。
4).不能按表或按用户恢复。
热备的优缺点
1).可在表空间或数据文件级备份,备份时间短。
2).备份时数据库仍可使用。
3).可达到秒级恢复(恢复到某一时间点上)。
4).可对几乎所有数据库实体作恢复。
5).恢复是快速的,在大多数情况下在数据库仍工作时恢复。
热备份的不足是:
1).不能出错,否则后果严重。
2).若热备份不成功,所得结果不可用于时间点的恢复。
3).因难于维护,所以要特别仔细小心,不允许“以失败而告终”。
15. 解释data block , extent 和 segment的区别?
data block 数据块,是oracle最小的逻辑单位,通常oracle从磁盘读写的就是块
extent 区,是由若干个相邻的block组成
segment段,是有一组区组成
tablespace表空间,数据库中数据逻辑存储的地方,一个tablespace可以包含多个数据文件
;‘贰’ oracle面试题
3.select ename,(select ename from emp where empno in(a.mgr)) from emp a ;
整个查询分为子查询和父查询,(select ename from emp where empno in(a.mgr))为子查询,emp a指的是员工表,a为这个查询为emp表指定的别名,知道了a
代表什么,a.mgr就好理解了,a.mgr其实就是emp.mgr,表示emp员工表中的mgr(上级编号)字段,emp表中记录了员工及员工上级的信息,a.mgr就用来指明员工
的上级的编号,然后输出员工姓名及他上级姓名。
6.虽然dname和ename在不同的两张表中,但是通过语句where deptno in(a.deptno)将两张表的信息关联上了,这样就能得到员工姓名及该员工所在的部门名称。
14.a.deptno,b.deptno分别代表部门表中的部门编号字段和员工表中的部门编号字段,它们的作用是将独立的部门表和员工表中的信息关联起来,令两个表的信息
一一对应起来,emp b用来输出ename,sal字段,b为emp表在查询中的别名,可以任意命名,因为a这个名称已经赋予给dept这个表,若再将a赋予emp表,则会造成
数据库无法识别a代表的是dept表还是emp表,所以此处命名为b而不是a。
16.group by有分类作用,此处表示,安装job的类型将查询结果分为几类,每一类工作中包含很多不同的工资,然后用min函数从里面选出最小的工资,当需要对
查询结果进行聚合时,便可使用group by语句,其后紧跟聚合函数外的所有字段,比如此处的job字段。
‘叁’ oracle数据库题,求答案
答案如下,正确为T,错误为F
1、 oracle数据库系统中, 启动数据库的第一步是启动一个数据库实例。 ( T ) 2、Oracle服务器端的监听程序是驻留在服务器上的单独进程,专门负责响应客 户机的连接请求。( F) 3、 oracle数据库中实例和数据库是一一对应的 (非ORACLE并行服务, 非集群) 。 ( T) 4、系统全局区SGA 是针对某一服务器进程而保留的内存区域,它是不可以共享 的。( F ) 5、数据库字典视图ALL_***视图只包含当前用户拥有的数据库对象信息。 ( F ) 8、数据字典中的内容都被保存在SYSTEM表空间中。( T ) 9、HAVING后面的条件中可以有聚集函数,比如SUM(),AVG()等, WHERE 后面的 条件中也可以有聚集函数。( F ) 10、"上海西北京" 可以通过like ‘%上海_’查出来。( F
)
11、 表空间是oracle 最大的逻辑组成部分。Oracle数据库由一个或多个表空间 组成。 一个表空间由一个或多个数据文件组成,但一个数据文件只能属于一个表 空间。( T ) 12、表空间分为永久表空间和临时表空间两种类型。( T ) 13、truncate是DDL操作,不能 rollback。( T ) 14、 如果需要向表中插入一批已经存在的数据, 可以在INSERT语句中使用WHERE 语句。( F ) 15、Oracle数据库中字符串和日期必须使用双引号标识。( F ) 16、Oracle数据库中字符串数据是区分大小写的。( T )
17、Oracle数据库中可以对约束进行禁用,禁用约束可以在执行一些特殊操作 时候保证操作能正常进行。( F )
18、为了节省存储空间,定义表时应该将可能包含NULL值的字段放在字段列表 的末尾。( T ) 20、在连接操作中,如果左表和右表中不满足连接条件的数据都出现在结果中, 那么这种连接是全外连接。( T ) 21、自然连接是根据两个表中同名的列而进行连接的,当列不同名时,自然连接 将失去意义。( T ) 23、PL/SQL代码块声明区可有可无。( T ) 24、 隐式游标与显式游标的不同在于显式游标仅仅访问一行, 隐式的可以访问多
行。( F )
25、隐式游标由PL/SQL维护,当执行查询时自动打开和关闭。( T ) 26、显式游标在程序中显式定义、打开、关闭,游标有一个名字。( T )
27、隐式游标的游标属性前缀是SQL。( T ) 28、显式游标的游标属性的前缀是游标名。( T ) 29、隐式游标的属性%ISOPEN总是为FALSE。(
T ) 30、显式游标的%ISOPEN根据游标的状态确定值(
F )
31、隐式游标的SELECT语句带有INTO子串,只有一行数据被处理。( T ) 32、 显式游标可以处理多行数据, 在程序中设置循环, 取出每一行数据。 ( T
)
34、可以在PL/SQL中使用GOTO语句使运行流程进行跳转。( F )
35、因为存储过程不返回值,使用时只能单独调用;而函数却能出现在能放置表 达式的任何位置。( Y )
查看页面:http://wenku..com/view/d64574cd8bd63186bcebbc8c.html
‘肆’ oracle数据库面试题
1、b没有访问表employee的权限,或者有权限但是在做desc时没有加用户名在表前面。
2、在建表时设置了max extent参数导致了表extent数满了之后不能再进行扩展。
3、tablespace full表示该表空间没有可扩展的块了,这是设置了datafile为autoextend off后或者系统中没有可扩展的物理空间导致。
4、首先我需要有一张主表(pri)拥有关键字段(id),然后分两种情况,一种是目标表不存在的情况那么我需要建立目标表,如:create table oerder(id not null,aa char(8),id_p int, primary key(id),forergn key (id_p) references pri(id));。另一种情况是目标表存在,则增加约束条件:alter table order add foreign key (id_p) references pri(id);
5、pct_increase代表的是表在做了第一次extent后,下次再扩展时的增量,它是一个百分比值,也就是说,如果你设置了该值为50那么在表下一次扩展时扩展量就增加为150%。这是个很“恐怖”的设置,如果你使用了它那么有可能你会发现你的表空间很快就没有可扩展的地方了。
6、英文不好,题目意思没读懂。
7、这题还是分两种情况,一种是nt server就是你的database server,那么你可能需要先在nt server上确认listener已经启动,然后进行ping和tracert看看是否是网络问题,最后检查pc上的tnsnames.ora配置文件是否正确,在pc上做tracerc看网络链接是否正常?检查pc上防火墙的设置等。如果nt server 不是你的database server那么说明你的database server的网络链接是正常的,那么需要的就是:检查pc上的tnsnames.ora配置文件是否正确,在pc上做tracerc看网络链接是否正常,检查pc上防火墙的设置等。当然还有一种比较特殊的情况,在pc安装了64位win操作系统+32位的oracle时会发生在cmd下可以进行链接,但是使用oracle的其他连接方式如客户端,oem等等就会报tns错误,这是oracle本身的bug。
8、char和varchar2最根本的区别就在于一个是固定长度,另一个是可变长度。它们对空间的占用量是不同的,在同样长度的字符下char类型的需要用空字符补充不足的字符数,而varchar2则不会。当然运行效率上char占优。
9、这个太长,懒得打了。
‘伍’ oracle面试题
第一题选B,过程完全可以调用函数,只要接收回值就和调用其他过程一样。
第二题选C,oracle 提供的包就是一些pl/sql形式的API,当然可以调用了。
第三题选B,一个使用 begin/end 的块中可以包含其他 begin/end 块。
‘陆’ ORACLE数据库面试题
1.
update t
set logdate=to_date('2003-01-01','yyyy-mm-dd')
where logdate=to_date('2001-02-11','yyyy-mm-dd');
2.
select *
from t
where name in (select name from t group by name having coung(*)>1)
order by name;--没说清楚,到底是升序还是降序
3.
select ID,NAME,ADDRESS,PHONE,LOGDATE
from
(
select t.*,row_number() over(partition by name order by name) rn
from t
)
where rn = 1;
4.
update t
set (address,phone)=
(select address,phone from e where e.name=t.name);
5.
select *
from t
where rownum <=5
minus
select *
from t
where rownum <=2;
也没什么特别的地方,有些题目用oracle特有的函数去做会比较简单,像在第三题中用到的oracle的分析函数,以及在第一题中用到的oracle的to_char()函数。
这几个题目主要是看你能不能使用oracle的函数去处理
‘柒’ 面试的时候问你熟悉oracle数据库吗
如果是开发的话,那还是基于SQL这种语言的语法了,要多自己使用才能熟悉的。 对于oracle数据库来说,PL/SQL delelopment是重点,除了SQL,还要了解触发器trigger,存储过程procere,任务job,视图view等等。
‘捌’ 做几道关于Oracle的面试题. 很简单的,, 急急
4in where id in (1,2,3) 查出 id是1,或2,或3的
where exist id= 1 只要存在id = 1 就返回
not in 和 not exist 和上面的相反,但效率上差,不建议使用
5.请说说你对oracle的事务,锁以及一致性的认识.
上网搜把很多的
6.请说说你对dml和ddl操作的认识.
dml 数据操作语言 如insert ,update ,delete
他会引起事务
ddl 数据声明语言 如 create drop等
null
1、等价于没有任何值、是未知数。
2、NULL与0、空字符串、空格都不同。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、NULL的处理使用NVL函数。
5、比较时使用关键字用“is null”和“is not null”。
6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,
count(*)中,用nvl(列名,0)处理后再查。
7、排序时比其他数据都大(索引默认是降序排列,小→大),
所以NULL值总是排在最后。
8,
select decode(sex ,1,‘男’,2,‘女’,'无性别')from person
如果sex字段是一得话 返回男 2 返回女 否则返回无性别
其他上网搜吧
9,上网搜吧 很多的
10al是个虚表
比如 select to_char(sysdate,'yyyy-mm-dd') from al
返回今天的时间