(招聘面试)DBA面试大全
一份 ORACLE DBA 面试题
一:SQL tuning 类
1:列举几种表连接方式
答:merge join,hash join,nested loop
2:不借助第三方工具,怎样查看 sql的执行计划
答:sqlplus
set autotrace ...
创建 plan_table表
3:如何使用 CBO,CBO与 RULE的区别
答 :在初始化参数里面设置 optimizer_mode=choose/all_rows/first_row等可以使用
cbo.<br />rbo会选择不合适的索引,cbo需要统计信息。
4:如何定位重要(消耗资源多)的 SQL
答:根据 v$sqlarea 中的逻辑读/disk_read。以及寻找 CPU使用过量的 session,查出当前
session的当前 SQL语句,或者:监控 WIN平台 Oracle的运行
5:如何跟踪某个 session的 SQL
答 :先 找 出 对 应 的 'sid,serial',然 后 调 用
_sql_trace_in_session(sid,serial,true);参考:跟踪某个会话
6:SQL调整最关注的是什么
答:逻辑读。IO量
7:说说你对索引的认识(索引的结构、对 dml影响、对查询影响、为什么提高查询性能
答:默认的索引是 b-tree.
对 insert的影响.(分裂,要保证 tree的平衡)
对 delete的影响.(删除行的时候要标记改节点为删除).
对 update的影响,如果更新表中的索引字段,则要相应的更新索引中的键值。
查询中包含索引字段的键值和行的物理地址。
8:使用索引查询一定能提高查询的性能吗?为什么
答:不能。如果返回的行数目较大,使用全表扫描的性能较好。
9:绑定变量是什么?绑定变量有什么优缺点
答:通俗的说,绑定变量就是变量的一个占位符,使用绑定变量可以减少只有变量值不同的
语句的解析。
10:如何稳定(固定)执行计划
答:使用 stored outline.
11:和排序相关的内存在 8i和 9i分别怎样调整,临时表空间的作用是什么
答 i:使用 sort_area_size,hash_area_size,每个 session分配相同的值,不管有无使用。
9i: 使用 pga_aggregate来统一管理。
临时表空间的作用:
在 sort_area_size中不能完成的部分在临时表空间完成,临时表空间在重建索引,创建临
时表等都要用到。
还有 hash join不能完成的也在临时表空间中做。
12:存在表 T(a,b,c,d),要根据字段 c排序后取第 21—30条记录显示,请给出 sql
select a,b,c,d from (select a,b,c,d from T order by c) where rownum<=30
minus
select a,b,c,d from (select a,b,c,d from T order by c) where rownum <=20;
或者:
select * from (select rownum rn,a.* from (select a,b,c,d from T order by c)
a )where rn between 21 and 30;
二:数据库基本概念类
1pctused and pctfree 表示什么含义有什么作用
答:表示数据块什么时候移入和移出 freelist。
pctused:如果数据块的使用率小于 pctused的值,则该数据块重新加入到 fresslist中。
pctfree:如果数据块的使用率高于 pctfree的值,则该数据块从 freelist中移出。
2:简单描述 table / segment / extent / block之间的关系
答:一个 table至少是一个 segment,如果分区表,则每个分区是一个 segment,table可以
看成是一个逻辑上的概念,segment可以看成是这个逻辑概念的物理实现;
segment由一个或多个 extents组成,segment不可以跨表空间但可以跨数据文件;
extent由多个连续的 blocks组成,不可以跨数据文件;
block由 1-多个 os块组成,是 oracle i/o的最小存储单位。
3:描述 tablespace和 datafile之间的关系
答:tablespace是逻辑上的概念,datafile是物理上的概念。
一个 tablespace可以由多个 datafile组成,一个 datafile不能跨越多个 tablespace。
4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点
答:一个使用 freelist管理,一个使用位图管理。
5:回滚段的作用是什么
答:保存数据的前像,保证数据读取的时间点一致性。Oracle里数据的多版本特性就是通
过回滚段来实现的,正因为此,Oracle数据库实现了读写不竞争的性能优势!
6:日志的作用是什么
答:纪录对数据库的操作,便与恢复。
7:SGA主要有那些部分,主要作用是什么
答 : db_cache(缓 存 数 据 块 ),shared_pool(缓 存 sql,执 行 计 划 , 数 据 字 典 信 息
等),large_pool(MTS模式、parallel 、rman等要用到),java pool(java程序如 SQLJ存储
过程运行时要用到)
8:racle系统进程主要有哪些,作用是什么
答:smon(合并空间,实例恢复),pmon(清理失败的进程),归档进程(负责在日志切换的
时候归档日志文件),lgmr(日志书写器进程,负责写日志),ckpt(检查点进程,触发检查
点),dbwr(数据库写入器,负责把数据写入导 datafile)
三:备份恢复类
1:备份如何分类
答:逻辑备份(exp)与物理备份。
或者冷备份与热备份。
2:归档是什么含义
答:把日志文件放到另一个地方。
3:如果一个表在 2004-08-04 10:30:00 被 drop,在有完善的归档和备份的情况下,如何恢
复
答:拷贝备份,
recover database until time 2004-08-04 10:30:00
alter database open resetlogs;
4:rman是什么,有何特点
答:rman叫恢复管理器.
特点很多。可以在线备份,到少目标数据库是 mount状态。
1:热备份。
2:可以存储脚本。
3:可以增量备份。
4:自动管理备份集。
5:standby的特点
答:利用传输重做日志来达到同步的目的。可以设定多个保护级别,9i后支持逻辑standbyDB。
6:对于一个要求恢复时间比较短的系统(数据库 50G,每天归档 5G),你如何设计备份策略
答:每天一个全备份。
四:系统管理类
1:对于一个存在系统性能的系统,说出你的诊断处理思路
答:做一个 statspack,根据 top 5,system load,top sql等来做相应的调整。
2:列举几种诊断 IO、CPU、性能状况的方法
答:hp-unix:iostat -x 1 5;
top/vmstat/glance
3:对 statspack有何认识
答:一个性能诊断工具而已,其本质就是在两个时间点采样两个系统数据。(动态性能视图),
然后根据两个 snapshot,产生一个报告。
4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减
小对应用的影响
答:1:增大 sort_area_size(8i)/pga_aggregate_target(9i)值。
2:如果表有分区(一般大表都要用到分区的),按分区逐个建索引,如果是本地索引的话;
3:系统空闲的时候建。
5:对 raid10 和 raid5有何认识
答:raid10是先镜像后条带,适合对写入速度要求较高的数据库系统,特别是 online
redolog文件,raid5适合大部分的数据库系统和数据仓库系统,读性能优于写性能。
五:综合随意类
1:你最擅长的是 oracle哪部分?
答:性能/sql 调优、备份恢复。
2:喜欢 oracle吗?喜欢上论坛吗?或者偏好 oracle的哪一部分?
答:http://?
42. You create a private database link and upon connection,
fails with: ORA-2085: connects to .
What is the problem? How would you go about resolving this error?
43. I have my backup RMAN script called "". I am on the
target database. My catalog username/password is rman/rman. My catalog db is
called rman. How would you run this shell script from the O/S such that it
would run as a background process?
44. Explain the concept of the DUAL table.
45. What are the ways tablespaces can be managed and how do they differ?
46. From the database level, how can you tell under which time zone a
database is operating?
47. What's the benefit of "dbms_stats" over "analyze"?
48. Typically, where is the conventional directory structure chosen for
Oracle binaries to reside?
49. You have found corruption in a tablespace that contains static tables
that are part of a database that is in NOARCHIVE log mode. How would you
restore the tablespace without losing new data in the other tablespaces?
50. How do you recover a datafile that has not been physically been backed
up since its creation and has been deleted. Provide syntax example.
如何获得 Oracle DBA工作?
不过 48个小时,就有 120封 Oracle 数据库管理员的求职信堆在了 Debbie Reames的桌子
上,Reames是位于洛杉矶的商业编程公司的高级技术招聘人员。然后 Reames做了许多招聘
人员都做的事情。她通过三个步骤的过程剔除了其中的一般简历。需要 H-1B visa信用卡?
走吧。需要重新安置?不适合这个工作。只在小公司工作过?这个职位对你来说太大了。
根据多项调查,除了 IT历史上最低迷的时期之外,Oracle总是为那些经过认证的专业
人士和数据库管理员提过了大量的工作机会。当然,具有资格的候选人的列表就更长了。当
在市场上寻找一份工作的时候,即使是最资深的 IT专家都需要记住一些他们在很久以前就
学到的规则,并且同时采用一些新的策略。
数据库管理员市场可以按照以多种方式分为两个部分——初级和高级。
Don Burleson,位于美国北卡罗来纳州 Kittrell的 BEI Oracle顾问公司的所有者,说,
那些工作经验少于 3年的初级数据库管理员,经常会面临失业和低等的工作市场。Burleson
曾写过与 Oracle技术和职业生涯有关的 17本书,其中包括《Oracle工作面试指导
(Conducting the Oracle Job Interview)》,这本书是为那些需要评估 Oracle周围候选人
的 IT经理们准备的指南。
“过去,许多公司都不会雇佣初学者,” Burleson说。
然而,Burleson说,那些初级数据库管理员仍然是有希望的。那些不愿意花 12万美元
年薪雇佣经验丰富的专家的公司有时候会雇佣这些新手并对他们进行培训。Burleson建议
那些新入门的数据库管理员可以到体检行业和大学这两个地方去找到他们的第一份工作。
政府安全检查对资深人员很关键
然后就是资深人士。那些拥有超过 10年经验的,拥有高级学位,并且具有专业技能的
数据库管理员仍然有很大的需求量。
Oracle财务知识,SAP,PeopleSoft, 9i RAC, 9iAS 和 Unix都是重要的能力,Burleson
说。还有,政府安全调查是在第一轮的简历挑选中排除许多 Oracle数据库管理员的一项。
另外,开发技能,例如 Java,Windows,J2EE和门户,都是候选人具有竞争力的优势。
更重要的是,Reames说,候选人的技能需要与公司的需要相匹配。“他们真的需要拥有
全面技能,” Reames说。
“如果工作需要的是能够进行数据建模的人,”她说,“并且我没有在简历中看见任何的
数据建模经验,那么我就会对这个人大打折扣。”
除了专业技能之外,Burleson说,许多的公司都愿意要那些有教育背景的人,倾向于
雇佣那些拥有研究生学位或者 MBA的候选人。公司认为那些懂得财务或者会计,具有数据库
管理员支持的业务过程知识的数据库管理员有价值。
打跟进电话,第一轮面试
对于两个群体,要通过关键的第一轮面试都有一些基本的规则需要遵守。
今早地投递简历是有帮助的。如果有 120份简历需要阅读的话,Reames也许不会把所
有简历都读完就找到了达到面试要求,具有足够特点的候选人。
候选人应该给招聘人员打电话确认他们的简历被收到了,她说。“不要害怕打跟进电话,”
Reames说。“这会带给你一个优势,否则我们可能就不会看你的简历。”
通过第一轮筛选的申请人通常是在电话中面试。记住面试你的人也许没有任何技术背景,
这一点很重要,Burleson说。在这一点上,是对候选人从技术之外的其他品质上进行判断。
专家说,此时沟通技巧非常重要。
因为沟通技巧在工作中是如此的重要,Burleson推荐候选人提供给潜在的雇主写作样
例,尤其是那些得到发表的。有几个在线网站,包括这一个,都接受技术贴士投稿,他指出。
实际的技术对话
少数能够通过电话面试的候选人能够到工作地点去进行面试,Burleson称之为候选人
的技术化。他建议面试人员提出一些专业的问题,例如“Oracle中的 SYS用户默认密码是
多少?”
这些问题没有捏造的答案,面试人员可以轻松地判断候选人的技术能力。“只有那些实
践过的数据库管理员知道答案是‘change_on_install,’” Burleson说。“经验丰富的数据
库管理员可以立即发现谎话。”
然后就是最后一个阶段,与公司的 IT人员在线会见。这些会见通常会持续半天,这是
真正在测试你是否会被雇佣。有时候是一些开放的问题,例如“如果一个终端用户抱怨性能
差劲,你要做的第一件事情是什么?”这些问题的答案非常具有启发性,Burleson说,因为
他们也没有正确答案,他们只是看看候选人是如何独立思考的,或者是数据库管理员有多少
创新思维。
也许更重要的是,这个最后的交流就是判断一些无形的,例如人际关系技巧的过程。拥
有一个能够成为团队中一员的数据库管理员对于大多数公司(即使不是所有的公司)来说都
是优先考虑的。在很多情况下 ,这些无形的东西形成了差别。
“我见过公司拒绝了技术能力最强的候选人。这样的事情总是发生,” Burleson指出。
“数据库管理员需要与其他人打好关系。”
最后,Burleson说,忘掉星期五可以穿便装的习惯。
“面试中穿得太随便是对自己的极度不负责,”他说。
“外表确实重要。”
整理了几个 Oracle面试中的技术问题,各位可以借鉴一下:
1.解释冷备份和热备份的不同点以及各自的优点
解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指
在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据
库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和
恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归
档模式稍好。(因为不必将 archive log写入硬盘)
2.你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
解答:重建控制文件,用带 backup control file 子句的 recover 命令恢复数据库。
3.如何转换 到 spfile?
解答:使用 create spfile from pfile 命令.
4.解释 data block , extent 和 segment的区别(这里建议用英文术语)
解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储
空间时,连续的 data block就组成了 extent . 一个数据库对象拥有的所有 extents被称
为该对象的 segment.
5.给出两个检查表结构的方法
解答:命令
_DDL 包
6.怎样查看数据库引擎的报错
解答:alert log.
评价:这里的回答并不是十分全面,这些问题可以通过多个角度来进行解释,也许你不必在
面试过程中给出完全详尽的答案,只需要通过你的解答使面试考官了解你对 ORACLE概念的
熟悉程度。
Oracle DBA 问题记录
执行时 oracle内部的过程
分析:其中包括语法分析、语义分析、视图转换、表达式转换、选择优化器、选择连接
方式、选择连接顺序、选择数据搜索路径等等,然后在 SGA中的共享 SQL区中找是否执行过
该语句,如找到则直接执行已编译的 SQL语句,如没有找到,则先编译后放入 SGA,并执行
编译后的 SQL语句。
执行:在执行编译过的 SQL语句时,先在 SGA中的数据库缓冲区内查找是否存在所需要
的数据,如有直接读取,如果没有,则从物理文件中读取至数据库缓冲区并读取。
返回结果:对 SELECT 语句需要返回结果的语句,先看是否需要排序,需要,则排序后
返回给用户,然后根据内存的大小不同,可以一次取出一行数据,也可以一次取一组数据。
2.热备份导致非一致性解决方法
使用热备份会导致备份的数据具有非一致性,在 Oracle提供的 RMAN工具中可以依靠联
机重做日志解决恢复备份时导致的非一致性。
3.热备份所备份文件
数据库文件
日志文件
控制文件
参数文件
口令文件
网络参数文件
4.数据库中的最小读写操做以什么为单位
Oracleblock是 Oracle数据库中读写操作的最小单元。一个 Oracleblock由三个部分
组成,分别是数据块头、自由空间、实际数据三部份组成。
数据块头:主要包含有数据块地址的一些基本信息和段的类型,以及表和包含有数据的
实际行的地址。
自由空间:是指可以为以后的更新和插入操作分配的空间,大小由 PCTFREE和 PCTUSED
两个参数影响。
实际数据:是指在行内存储的实际数据。
当创建或者更改任何表和索引的时候,Oracle在空间控制方面使用两个存储参数:
PCTFREE: 为将来更新已经存在的数据预留空间的百分比。PCTUSED:用于为插入一新行数据
的最小空间的百分比。这个值决定了块的可用状态。可用的块时可以执行插入的块,不可用
状态的块只能执行删除和修改,可用状态的块被放在 freelist中。
5.数据库的两种连接模式
1.专用服务器连接(dedicated server)
在专用服务器模式下,优点就是每个用户都有一个连接,所以大家不至于有的应用占着
连接造成别的客户的请求给挂起了。而最大的缺点在于内存管理上。
2.共享服务器连接(shared server)
而共享连接方式优点在于连接数量固定,所以内存数量不会占用很多。共享服务器的最
大的缺点还是在于数据仓库模式下运行的时候,如果有大量的请求需要长时间占用服务器,
那么就会造成很多别的请求的挂起,导致整个服务器性能的降低。
服务器的体系结构
oracle系统体系结构由实例、逻辑结构和物理结构组成。
1.实例:SGA、系统监视 SMON、进程监视 PMON、数据库写入器 DBWn、日志写入器 LGWR、
检查点 CKPT等进程组成。
2.逻辑结构:主要由:表空间、段、区和数据块等概念组成。逻辑结构是面向用户的,
用户使用 Oracle开发应用程序使用的就是逻辑结构。数据库存储层次结构及其构成关系,结
构对象也从数据块到表空间形成了不同层次的粒度关系
3.物理结构:主要是数据库文件,包括控制文件、重做日志文件、数据文件等等。
实际应用群集
RAC允许不同计算机上的多个实例打开共享磁盘系统上的一个或多个公用数据库,它极
大地提高了数据库的性能、容错和可伸缩性。多对多的架构也可用较低的价格扩展数据库规
模。
启动过程
poweron --BIOS自 检 --LILO/GRUB调 用 ---KERNEL 调 用 --INIT 调 用
---MIGGETTY--LOGIN
决定开机后是否进入 GUI界面的配置文件名
在 UNIX/Linux中一般将运行级别分为 7级(一说九级,但实际应用为六级,保留一级):
0 系统停机
1 单用户模式
2 多用户模式
3 网络多用户模式
4 保留
5 X11模式(即进入图形界面模式)
6 重起
系统将其设置在/etc/inittab配置文件中:
id:3:initdefault:
调整工具
:通过 Statspack我们可以很容易的确定 Oracle数据库的瓶颈所在,记录
数据库性能状态。
Tuning:SQL Tuning Advisor用一个调整工具集作为输入,检查其中的语句并
为它们提出优化建议。
Guard
Oracle9i Data Guard 通过使用称为 standby database的数据库来防止出现数据的灾
难。它通过将 primary database数据库的重做日志传到并应用到 standby database数据库
来使 standby database数据库与 primary database数据库同步。
OracleStandby Database 是最经常使用的最有效的灾难解决方案。在过去版本的基础
上,Oracle9i 又进行了许多改进,使其功能远远超过了基本的灾难恢复要求。通过将复杂
的工作自动化,并对监控、警告、以及控制机制的大规模改进,Standby Database 和一些
新的模块可以帮助 DBA从错误操作、瘫痪、以及其它的灾难中恢复(这些灾难都可能毁掉数
据库)。另外,通过使用 Oracle9i Standby Database,由于硬件和软件升级造成的宕机时
间也可以极度缩短。
Oracle9i 将改进过的 8版本的 Standby Database功能,与几个新增加的防止用户错误
和瘫痪的模块合起来称为 Oracle9i Data Guard。
oracle 存储过程的基本语法
oracle 存储过程的基本语法
1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字
(
参数 1 IN NUMBER,
参数 2 IN NUMBER
) IS
变量 1 INTEGER :=0;
变量 2 DATE;
BEGIN
END 存储过程名字
INTO STATEMENT
将 select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
记录,否则抛出异常(如果没有记录抛出 NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 变量 1,变量 2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...
判断
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
循环
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
5.变量赋值
V_TEST := 123;
6.用 for in 使用 cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名 1+cur_result.列名 2
END;
END LOOP;
END;
7.带参数的 cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(变量值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;
8.用 pl/sql developer debug
连接数据库后建立一个 Test WINDOW
在窗口输入调用 SP的代码,F9开始 debug,CTRL+N单步调试
关于 oracle存储过程的若干问题备忘
1.在 oracle中,数据表别名不能加 as,如:
select from appinfo a;-- 正确
select from appinfo as a;-- 错误
也许,是怕和 oracle中的存储过程中的关键字 as冲突的问题吧
2.在存储过程中,select某一字段时,后面必须紧跟 into,如果 select整个记录,利用游
标的话就另当别论了。
select into kn from APPFOUNDATION af where =aid and
=fid;-- 有 into,正确编译
select from APPFOUNDATION af where =aid and
=fid;-- 没有 into,编译报错,提示:Compilation
Error: PLS-00428: an INTO clause is expected in this SELECT statement
3.在利用 select...into...语法时,必须先确保数据库中有该条记录,否则会报出"no
data found"异常。
可以在该语法之前,先利用 select count(*) from 查看数据库中是否存在该记录,如
果存在,再利用 select...into...
4.在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错
select keynode into kn from APPFOUNDATION where appid=aid and
foundationid=fid;-- 正确运行
select into kn from APPFOUNDATION af where =appid and
=foundationid;-- 运行阶段报错,提示
ORA-01422:exact fetch returns more than requested number of rows
5.在存储过程中,关于出现 null的问题
假设有一个表 A,定义如下:
create table A(
id varchar2(50) primary key not null,
vcount number(8) not null,
bid varchar2(50) not null -- 外键
);
如果在存储过程中,使用如下语句:
select sum(vcount) into fcount from A where bid=''xxxxxx'';
如果 A表中不存在 bid="xxxxxx"的记录,则 fcount=null(即使 fcount定义时设置了默认值,
如:fcount number(8):=0依然无效,fcount还是会变成 null),这样以后使用 fcount时
就可能有问题,所以在这里最好先判断一下:
if fcount is null then
fcount:=0;
end if;
这样就一切 ok了。
调用 oracle存储过程
().execute(
new HibernateCallback() ...{
public Object doInHibernate(Session session)
throws HibernateException, SQLException ...{
CallableStatement cs = session
.connection()
.prepareCall("{call
modifyapppnumber_remain(?)}");
(1, foundationid);
();
return null;
}
});
ORACLE里锁有以下几种模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁
3:Row-X 行专用(RX):用于行的修改
4:Share 共享锁(S):阻止其他 DML操作
5:S/Row-X 共享行专用(SRX):阻止其他事务操作
6:exclusive 专用(X):独立访问使用
数字越大锁级别越高, 影响的操作越多。
一般的查询语句如 select ... from ... ;是小于 2的锁, 有时会在 v$locked_object
出现。
select ... from ... for update; 是 2的锁。
当对话使用 for update子串打开一个游标时,
所有返回集中的数据行都将处于行级(Row-X)独占式锁定,
其他对象只能查询这些数据行,不能进行 update、delete或 select...for update操
作。
insert / update / delete ... ; 是 3的锁。
没有 commit之前插入同样的一条记录会没有反应,
因为后一个 3的锁会一直等待上一个 3的锁, 我们必须释放掉上一个才能继续工作。
创建索引的时候也会产生 3,4级别的锁。
locked_mode为 2,3,4不影响 DML(insert,delete,update,select)操作,
但 DDL(alter,drop等)操作会提示 ora-00054错误。
有主外键约束时 update / delete ... ; 可能会产生 4,5的锁。
DDL语句时是 6的锁。
以 DBA角色, 查看当前数据库里锁的情况可以用如下 SQL语句:
select object_id,session_id,locked_mode from v$locked_object;
select ,,
from v$locked_object t1,v$session t2
where _id= order by _time;
如果有长期出现的一列,可能是没有释放的锁。
我们可以用下面 SQL语句杀掉长期没有释放非正常的锁:
alter system kill session 'sid,serial#';
如果出现了锁的问题, 某个 DML操作可能等待很久没有反应。
当你采用的是直接连接数据库的方式,
也不要用 OS系统命令 $kill process_num 或者 $kill -9 process_num来终止用户连
接,
因为一个用户进程可能产生一个以上的锁, 杀 OS进程并不能彻底清除锁的问题。
记得在数据库级别用 alter system kill session 'sid,serial#';杀掉不正常的锁。
Oracle DBA有关回滚段管理试题精选
Q. 1 : What system privilege is required to create a rollback segment ?
1. Create database
2. Create rollback segment
3. Alter database
4. Create segment
KEY:2
Q. 2 : Oracle recommends this number of minimum extents in a rollback
segment
1. 0
2. 1
3. 2
4. 3
KEY:3
Q. 3 : Oracle recommends that the following segment size when creating a
rollback segment
1. INITIAL > NEXT
2. INITIAL = NEXT
3. INITIAL < NEXT
4. NONE OF THE ABOVE
KEY:2
Q. 4 : The OPTIMAL parameter for a rollback segment should be set
1. large for long-frequently running transactions, small for short
transactions.
2. small for long-frequently running transactions, large for small
transactions.
3. small for all transactions
4. large for all transactions
KEY:1
Q. 5 : In case of system failure, This type of segment is used to undo the
changes
1. Data Segment
2. Temp Segment
3. Redo Segment
4. Rollback Segment
KEY:4 : Rollback Segments are used to rollback information that has already
been applied to database. During recovery, the database is rolled forward and
then backwards to a consistent state.
Q. 6 : This is a valid storage parameter when creating a rollback segment
1. FREELISTS
2. OPTIMAL
3. PARTITION
4. NONE OF THE ABOVE
KEY:2
Q. 7 : Madhu created a couple of private rollback segments. What should he
do now to make them online automatically during startup
1. Grant online during startup to the segments
2. Add rollback_segments=(rbs1,rbs2) in parameter file
3. Drop segments and recreate them as protected
4. None of the above
KEY:2
Q. 8 : Which is true regarding rollback segments
1. System Rollback Segment Cannot be put in an offline mode
2. Tablespaces containing rollback segments with active transactions can be
put in offline mode
3. All of the above
4. None of the above
KEY:1
Q. 9 : A rollback segment ____
1. writes to the redo logs
2. requires one for each tablespace
3. records changes only after they are committed
4. provides for read consistency
KEY:4
Q. 10 : Which type of segment can record changes for multiple transactions
1. DATA SEGMENT
2. TEMP SEGMENT
3. ROLLBACK
4. NONE OF THE ABOVE
KEY:3
Q. 11 : The type of rollback segment that is created when a tablespace goes
offline is
1. PRIVATE
2. PUBLIC
3. DEFFERED
4. PROTECTED
KEY:3
如何快速的成为一个合格的 Oracle DBA?
作者:eygle
链接:http:///archives/2008/11/
在这样一个清晨写下这样一个题目,是因为最近有越来越多的人问起我这个问题,我想还是
试着把我的想法写下来。
1.快速有多快?
很多人都喜欢寻找捷径,所以经常问起快速,但是我经常反复告诉大家的是,没有捷径,或
者说没有轻而易举的捷径可循。
当然快速两个字也是有意义的,这是这个快速的社会对于年轻人的要求,在《深入解析
Oracle》一书的序言中,我写过这样一段话:随着技术以及时代的不断进步,社会留给 DBA
的成长时间越来越短,一个 DBA从入门到成长为资深的时间不会超过 2年。。。。张爱玲说过,
成名要趁早。做技术的也是如此,成长越早越好,越快越好。
理解快速两个字的涵义,推荐仔细阅读我的《深入解析 Oracle》一书序言,这里总结了很
多我的学习经验和学习历程:
http:///archives/2008/11/
2.该读什么书?
Oracle方面的书籍无疑已经是汗牛充栋了,那么在杂陈的书籍中,我们该读什么书来入门?
该读什么书来深入进阶呢?
我曾经推荐了几本书,并且我的观点是:书不在多,精读则灵。所以,认真细致的阅读对于
学习是必不可少的。
等你进入了 Oracle的大门,然后怎么阅读,读什么,就完全可以自己把握了。
推荐阅读:书不在多,精读则灵 - Oracle入门书籍推荐
http:///archives/2006/08/
3.如何获得成功?
无疑每个人都热切的期待成功,那么如何才能获得成功?
我曾经总结了一个简单的公式,罗列了我认为及其重要的成功因素:兴趣 + 勤奋 + 坚持
+ 方法 ≈ 成功
如果你对数据库感兴趣,由兴趣推动学习,再加上勤奋的努力,坚持不懈的探索,找到合适
的方法,那么这就是你的快速学习之路,快速成功之路。
推荐阅读:
http:///archives/2005/12/
4.三种境界
关于境界,我在多篇文章中都谈到过,最早在《Oracle数据库性能优化》一书的序言中我
引用了王国维的三种境界:
古今之成大事业、大学问者,罔不经过三种之境界。
"昨夜西风凋碧树。独上高楼,望尽天涯路。"此第一境界也。
"衣带渐宽终不悔,为伊消得人憔悴。"此第二境界也。
"众里寻他千百度,蓦然回首,那人却在灯火阑珊处。"此第三境界也。
这三种境界分别代表了,打下坚实的基础,不懈的坚持,峰回路转的提升,你在学习过程中,
一定会面对这样的阶段和情形,所以要有一定的思想准备,坚持不懈。
推荐阅读:
http:///archives/2005/08/
5.由点及面、深入浅出
在学习方法上,我主张由点及面、深入浅出,在《深入浅出 Oracle》一书的序言中,我这
样写道:
书中贯彻的也是我一直主张的"由点到线再及面"的学习方法。特别是对于初学者,如果
没有经过专门的培训和系统学习,那么自己通过实践的学习和思考就应当深入,在知识上,
从某个角度来说,是"不患寡,而患不精深"。在我们遇到问题时,就应该不断深入研究,直
至问题的核心本质,这样通过一个案例或实际问题的诊断学习和研究,我们就可以带动很多
连带知识的学习,这样从一个点深入下去就形成一条线,再横向扩展就可以形成一个知识网,
解决和研究的问题多了,就可以逐渐覆盖一个面,形成一个知识体系,这样慢慢的你就会觉
得学习不再困难,而是一件得心应手的事情。
推荐阅读:
http:///archives/2008/10/
6.工作机会
在工作选择上,如果能够快速进入 Oracle的领域可能是幸运的,但是如果第一份工作没有
找到理想的位置,那么接下来的职业道路可能就会稍微曲折一些。
很多朋友在进行了一段时间的学习之后,对转型迫不及待甚至焦虑不堪,这是不对的,在工
作中应当切忌浮躁,我们每个人从毕业到工作、再到找到适合自己的位置,这通常都要经过
一个较长的时期,学习、思考、进步、再次出发,所以要知道有时候等待是过程的必须。
如果你手上已经有了一份工作,那你需要做的是,做好它,哪怕那不是你喜欢的!
你必须证明给别人看你有做好一件事情的能力,别人才会给你下一个机会,如果你从来没能
很好的完成一项任务,那你应该冷静的反省一下。
对于处在这样境地的朋友们,我有 16个字可供借鉴:去除浮躁,认真学习,不断积累,寻
找机遇
推荐阅读:
http:///archives/2008/06/
7.如何在有限的环境中学习?
很多朋友的工作环境、条件有限,可能没有小型机、可能没有 UNIX,那么如何学习和提高
呢?
我想说的是不一定要在多大的生产环境里才能锻炼出高手。据我所知很多高手都是从个人的
简单环境中学习成长起来的,最重要的是自己学习一定要深入,多思考,多试验。
有朋友说:小库一样练水平。这句话是很有道理的。也有朋友在 ITPUB上不断试验和重复别
人有价值的试验或测试,说:不是自己的,通过试验动手,变成自己的。也说得非常好。
oracle笔记(DBA管理)
1、通常 oracle需要启动 OracleServiceORCL,OracleStartORCL,OracleTNSListener 任务
在 NT上至少要启动两个服务
oraclestartID和 oracleserverID
每个数据库都有一个系统标识符(SID),典型安装的数据库使用的系统标识符是 ORCL
2、启动关闭数据库
关闭:
svrmgr>connect internal/oracle
>shutdown --正常关闭数据库
svrmgr>shutdown immediate --立即关闭数据库
svrmgr>shutdown abort --一种最直接的关闭数据库的方式,执行之后,重新启动需要花
6-8小时
启动:
svrmgr>startup --正常启动
--等价于:startup nomount;
alter database mount;
alter database open;
svrmgr>startup mount; --安装启动:用于改变数据库的归档或执行恢复状态
svrmgr>startup nomount; --用于重建控制文件或重建数据库
svrmgr>startup restrict; --约束启动,能启动数据库,但只允许具有一定特权的用户访
问
如果希望改变这种状态,连接成功后
alter system disable restricted session;
svrmgr>startup force;当不能关闭数据库时,可采用强制启动数据库来完成数据库的关闭
操作。
svrmgr>startup pfile=d:\orant\database\ --带初始化参数文件的启动
3、缺省用户和密码
<1>. Oracle安装完成后的初始口令?
internal/oracle
sys/change_on_install
system/manager
scott/tiger
sysman/oem_temp
<2>. ORACLE9IAS WEB CACHE的初始默认用户和密码?
administrator/administrator
4、让定义自己的回滚段生效
在 中加入 rollback_segments=(rb0,rb1,...)
其中 rb0,rb1为自己定义的回滚段,可使这些回滚段在启动时生效
5、查看修改数据库的字符集
<1>数据库服务器字符集
在表 props$中
update props$ set value$='ZHS16CGB231280'
where name ='NLS_CHARACTERSET'
然后重新启动数据库,而不需要重新安装
8i以上版本可以通过 alter database来修改字符集,但也只限于子集到超集,不建议修改
props$表,将可能导致严重错误。
Startup nomount;
Alter database mount exclusive;
Alter system enable restricted session;
Alter system set job_queue_process=0;
Alter database open;
Alter database character set zhs16gbk;
sql> show parameter NLS
查看数据库字符集:
SELECT * FROM NLS_DATABASE_PARAMETERS;
SELECT * FROM V$NLS_PARAMETERS;
<2>
客户端字符集环境 select * from nls_instance_parameters,其来源于 v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
会话字符集环境 select * from nls_session_parameters,其来源于 v$nls_parameters,
表示会话自己的设置,可能是会话的环境变量或者是 alter session完成,如果会话没有特
殊的设置,将与 nls_instance_parameters一致。
客户端的字符集要求与服务器一致,才能正确显示数据库的非 Ascii字符。如果多个设置存
在的时候,alter session>环境变量>注册表>参数文件
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是 zhs16gbk,
则 nls_lang可以是 。
<3> 有时候用 crontab发起的时候,由于执行的 shell脚本的不同,导致很多的环境变量不
同。常常看到插入到数据库中的汉字变成乱码。
比如 shell脚本 如下内容。
#!/bin/ksh
export ORACLE_BASE=/u01/oracle/app/oracle
export ORACLE_HOME=${ORACLE_BASE}/product/
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:$LD_LIBRARY_PATH
export SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:/app/prepay/lib
/u01/oracle/app/oracle/product/ aicbs/aicbs@busi_cs <insert
into okcai values('okcai是个大好人呀');
commit;
quit
!
在 crontab中定时每天 20:19执行一次
19 20 * * * /bin/sh /app/prepay/ >/dev/null 2>&1 &
则可以看到数据库中数据变成了:
2LQSJY
当前数据库的字符集是
SELECT * FROM NLS_DATABASE_PARAMETERS
为了正常,必须保持客户端和数据库一致的字符集
改脚本如下即可
#!/bin/ksh
export ORACLE_BASE=/u01/oracle/app/oracle
export ORACLE_HOME=${ORACLE_BASE}/product/
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:$LD_LIBRARY_PATH
export SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:/app/prepay/lib
####下面就是增加的
export NLS_LANG=
/u01/oracle/app/oracle/product/ aicbs/aicbs@busi_cs <insert
into okcai values('okcai是个大好人呀');
commit;
quit
!
6、svgmgr>show sga
7、查询锁的原因
如果进程被死锁,可以按下面方式查询
<1> 从 v$session或者 v$locked_object找到此 session
<2> 如果有 lockwait,查询 v$lock,
select * from v$lock where kaddr = 'C00000024AB87210'
如果没有,根据 sid
select * from v$lock where sid = 438
<3> 查看 v$lock
lmode > 0,表示已经得到此锁
request > 0 表示正在请求此锁
根据 id1和 id2的值可以判断请求哪个锁的释放。
select * from v$lock where id1=134132 and id2 = 31431
8. 查询锁的状况的对象
V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS ;
查询锁的表的方法:
SELECT SESSION_ID, ,
DECODE(LMODE, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4,
'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(LMODE)) MODE_HELD,
DECODE(REQUEST, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4,
'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(REQUEST)) MODE_REQUESTED,
||'.'||_NAME||' ('||_TYPE||')', LOCK_TYPE,
LOCK_ID1, LOCK_ID2
FROM V$LOCK L, _OBJECTS O, V$SESSION S
WHERE = AND = _ID ;
9. 怎样查得数据库的 SID ?
select name from v$database;
也可以直接查看 文件
10、管理回滚段:
存放事务的恢复信息
建立回滚段
create public rollback segment SEG_NAME tabelspace TABLESPACE_NAME;
alter rollback segment SEG_NAME online;
删除回滚段
首先改变为 offline状态
直接使用回滚段
sql>set transaction use rollback segment SEG_NAME;
11. 计算一个表占用的空间的大小
select owner,table_name,
NUM_ROWS,
BLOCKS*AAA/1024/1024 "Size M",
EMPTY_BLOCKS,
LAST_ANALYZED
from dba_tables
where table_name='XXX';
Here: AAA is the value of db_block_size ;
XXX is the table name you want to check
12. 表在表空间中的存储情况
select segment_name,sum(bytes),count(*) ext_quan from dba_extents where
tablespace_name='&tablespace_name' and segment_type='TABLE' group by
tablespace_name,segment_name;
13. 索引在表空间中的存储情况
select segment_name,count(*) from dba_extents where segment_type='INDEX' and
owner='&owner'
group by segment_name;
14.查看某表/索引的大小
表
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&table_name');
索引
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&index_name');
15、确定可用空间
select tablespace_name,sum(blocks),sum(bytes) from _free_space group by
tablespace_name;
16、程序中报错:maxinum cursor exceed!
<1> 查看当前的 open cursor参数
sql> show parameter open_cursors
<2> 如果确实很小,应该调整数据库初始化文件
加如一项 open_cursors=200
<3> 如果很大,则
select sid,sql_text,count(*) from v$open_cursor
group by sid,sql_text
having count(*) > 200
其中 200是随便写一个比较大的值。查询得到打开太多的 cursor.
17、查看数据库的版本信息
SQL> select * from v$version;
包含版本信息,核心版本信息,位数信息(32位或 64位)等
至于位数信息,在 linux/unix平台上,可以通过 file查看,如
file $ORACLE_HOME/bin/oracle
18. 查看最大会话数
SELECT * FROM V$PARAMETER WHERE NAME LIKE 'proc%';
SQL>
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 4
log_archive_max_processes integer 1
processes integer 200
这里为 200个用户。
select * from v$license;
其中 sessions_highwater纪录曾经到达的最大会话数
19. 以 archivelog的方式运行 oracle。
log_archive_start = true
RESTART DATABASE
20. unix 下调整数据库的时间
su -root
date -u 08010000
电脑的安装方法
将 改为
22. 如何查询 SERVER是不是 OPS?
SELECT * FROM V$OPTION;
如果 PARALLEL SERVER=TRUE则有 OPS能
23. 查询每个用户的权限
SELECT * FROM DBA_SYS_PRIVS;
24.将表/索引移动表空间
ALTER TABLE TABLE_NAME MOVE TABLESPACE_NAME;
ALTER INDEX INDEX_NAME REBUILD TABLESPACE TABLESPACE_NAME;
25.在 LINUX,UNIX下启动 DBA STUDIO?
OEMAPP DBASTUDIO
下查询磁盘竞争状况命令?
Sar -d
下查询磁盘 CPU竞争状况命令?
sar -r
28. 查询表空间信息?
SELECT * FROM DBA_DATA_FILES;
29. 看各个表空间占用磁盘情况:
SQL> col tablespace format a20
SQL> select
_id 文件 ID号,
_name 表空间名,
字节数,
(-sum(nvl(,0))) 已使用,
sum(nvl(,0)) 剩余空间,
sum(nvl(,0))/()*100 剩余百分比
from dba_free_space a,dba_data_files b
where _id=_id
group by _name,_id,
order by _id
30. 如把 ORACLE设置为 MTS或专用模式?
#dispatchers="(PROTOCOL=TCP) (SERVICE=SIDXDB)"
加上就是 MTS,注释就是专用模式,SID是指你的实例名。
31. 如何才能得知系统当前的 SCN号 ?
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;
32. 修改 oracel数据库的默认日期
alter session set nls_date_format='yyyymmddhh24miss';
OR
可以在 中加上一行
nls_date_format='yyyymmddhh24miss'
33. 将小表放入 keep池中
alter table xxx storage(buffer_pool keep);
34. 如何检查是否安装了某个 patch?
check that oraInventory
35. 如何修改 oracle数据库的用户连接数?
修改 ,将 process加大,重启数据库.
36. 如何创建 SPFILE?
SQL> connect / as sysdba
SQL> select * from v$version;
SQL> create pfile from spfile;
SQL> CREATE SPFILE FROM PFILE='E:\ora9i\admin\eygle\pfile\';
文件已创建。
SQL> CREATE SPFILE='E:\ora9i\database\' FROM
PFILE='E:\ora9i\admin\eygle\pfile\';
文件已创建。
37. 内核参数的应用
shmmax
含义:这个设置并不决定究竟 Oracle数据库或者操作系统使用多少物理内存,只决定
了最多可以使用的内存数目。这个设置也不影响操作系统的内核资源。
设置方法:*物理内存
例子:Set shmsys:shminfo_shmmax=10485760
shmmin
含义:共享内存的最小大小。
设置方法:一般都设置成为 1。
例子:Set shmsys:shminfo_shmmin=1:
shmmni
含义:系统中共享内存段的最大个数。
例子:Set shmsys:shminfo_shmmni=100
shmseg
含义:每个用户进程可以使用的最多的共享内存段的数目。
例子:Set shmsys:shminfo_shmseg=20:
semmni
含义:系统中 semaphore identifierer的最大个数。
设置方法:把这个变量的值设置为这个系统上的所有 Oracle的实例的 中的最
大的那个 processes的那个值加 10。
例子:Set semsys:seminfo_semmni=100
semmns
含义:系统中 emaphores的最大个数。
设置方法:这个值可以通过以下方式计算得到:各个 Oracle实例的 里边
的 processes的值的总和(除去最大的 Processes参数)+最大的那个 Processes×2+10×
Oracle实例的个数。
例子:Set semsys:seminfo_semmns=200
semmsl:
含义:一个 set中 semaphore的最大个数。
设置方法:设置成为 10+所有 Oracle实例的 中最大的 Processes的值。
例子:Set semsys:seminfo_semmsl=-200
38. 怎样查看哪些用户拥有 SYSDBA、SYSOPER权限?
SQL>conn sys/change_on_install
SQL>select * from V_$PWFILE_USERS;
39. 如何查看数据文件放置的路径 ?
col file_name format a50
SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from
dba_data_files order by file_id;
40. 如何查看现有回滚段及其状态 ?
SQL> col segment format a30
SQL> SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM
DBA_ROLLBACK_SEGS
41. Oracle常用系统文件有哪些?
通过以下视图显示这些文件信息:v$database,v$datafile,v$logfile v$controlfile
v$parameter;
42.查看数据库实例
SQL>SELECT * FROM V$INSTANCE;
43. 怎样估算 SQL执行的 I/O数 ?
SQL>SET AUTOTRACE ON ;
SQL>SELECT * FROM TABLE;
OR
SQL>SELECT * FROM v$filestat ;
可以查看 IO数
44. 怎样扩大 REDO LOG的大小?
建立一个临时的 redolog组,然后切换日志,删除以前的日志,建立新的日志。
45. 查询做比较大的排序的进程?
<1>
SELECT , , ,
, ,
FROM v$session a,v$sort_usage b
WHERE = _addr
ORDER BY , ;
<2>. 查询做比较大的排序的进程的 SQL语句
select /*+ ORDERED */ sql_text from v$sqltext a
where _value = (
select sql_hash_value from v$session b
where = &sid and # = &serial)
order by piece asc ;
46. ORA-01555 SNAPSHOT TOO OLD的解决办法
增加 MINEXTENTS的值,增加区的大小,设置一个高的 OPTIMAL值。
如果是执行大的事务,报此错误,说明 oracle给此事务随机分配的回滚段太小了,这时可以
为它指定一个足够大的回滚段,以确保这个事务的成功执行.例如
set transaction use rollback segment roll_abc;
delete from table_name where ...
commit;
回滚段 roll_abc被指定给这个 delete事务,commit命令则在事务结束之后取消了回滚
段的指定.
47. 事务要求的回滚段空间不够,表现为表空间用满(ORA-01560错误),回滚段扩展到达
参数 MAXEXTENTS的值(ORA-01628)的解决办法.
向回滚段表空间添加文件或使已有的文件变大;增加 MAXEXTENTS的值。
48. 监控事例的等待
select event,sum(decode(wait_Time,0,0,1)) "Prev",
sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot"
from v$session_Wait
group by event order by 4;
49. 回滚段的争用情况
select name, waits, gets, waits/gets "Ratio"
from v$rollstat C, v$rollname D
where = ;
50 监控表空间的 I/O 比例
select _name name,_name "file", pyr,
pbr, pyw, pbw
from v$filestat A, dba_data_files B
where # = _id
order by _name;
51、监控文件系统的 I/O 比例
select substr( "#", substr(,1,30) "Name",
, , ,
from v$datafile C, v$filestat D
where # =
52、监控 SGA 的命中率
select + "logical_reads", "phys_reads",
round(100 * ((+)) / (+)) "BUFFER HIT RATIO"
from v$sysstat a, v$sysstat b, v$sysstat c
where # = 38 and # = 39
and # = 40;
53、监控 SGA 中字典缓冲区的命中率
select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio"
from v$rowcache
where gets+getmisses <>0
group by parameter, gets, getmisses;
54、监控 SGA 中共享缓存区的命中率,应该小于 1%
select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
sum(reloads)/sum(pins) *100 libcache
from v$librarycache;
select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins)
"reload percent"
from v$librarycache;
55、显示所有数据库对象的类别和大小
select count(name) num_instances ,type ,sum(source_size) source_size ,
sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size)
error_size,
sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size)
size_required
from dba_object_size
group by type order by 2;
56、监控 SGA 中重做日志缓存区的命中率,应该小于 1%
SELECT name, gets, misses, immediate_gets, immediate_misses,
Decode(gets,0,0,misses/gets*100) ratio1,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100) ratio2
FROM v$latch WHERE name IN ('redo allocation', 'redo copy');
57、监控内存和硬盘的排序比率,最好使它小于 .10,增加 sort_area_size
SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts
(disk)');
58、监控当前数据库谁在运行什么 SQL语句?
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where _address = order by address, piece;
59、监控字典缓冲区?
SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE;
SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM
V$ROWCACHE;
SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM
V$LIBRARYCACHE;
后者除以前者,此比率小于 1%,接近 0%为好。
SELECT SUM(GETS) "DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GET MISSES"
FROM V$ROWCACHE
60、监控 MTS
select busy/(busy+idle) "shared servers busy" from v$dispatcher;
此值大于 时,参数需加大
select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where
type='dispatcher';
select count(*) from v$dispatcher;
select servers_highwater from v$mts;
servers_highwater接近 mts_max_servers时,参数需加大
61、查看碎片程度高的表?
SELECT segment_name table_name , COUNT(*) extents
FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name
HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY
segment_name);
62、如何知道使用 CPU多的用户 session?
11是 cpu used by this session
select ,spid,status,substr(,1,40)
prog,,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where and = and = order by value desc;
63.如何检查操作系统是否存在 IO的问题
使用的工具有 sar,这是一个比较通用的工具。
#sar -u 2 10
即每隔 2秒检察一次,共执行 20次,当然这些都由你决定了。
示例返回:
HP-UX hpn2 U 9000/800 08/05/03
18:26:32 %usr %sys %wio %idle
18:26:34 80 9 12 0
18:26:36 78 11 11 0
18:26:38 78 9 13 1
18:26:40 81 10 9 1
18:26:42 75 10 14 0
18:26:44 76 8 15 0
18:26:46 80 9 10 1
18:26:48 78 11 11 0
18:26:50 79 10 10 0
18:26:52 81 10 9 0
Average 79 10 11 0
其中的%usr指的是用户进程使用的 cpu资源的百分比,
%sys指的是系统资源使用 cpu资源的百分比,
%wio指的是等待 io完成的百分比,这是值得我们观注的一项,
%idle即空闲的百分比。如果 wio列的值很大,如在 35%以上,说明你的系统的 IO存在瓶颈,
你的 CPU花费了很大的时间去等待 IO的完成。
Idle很小说明系统 CPU很忙。像我的这个示例,可以看到 wio平均值为 11说明 io没什么
特别的问题,而我的 idle值为零,说明我的 cpu已经满负荷运行了。
64.关注一下内存。
常用的工具便是 vmstat,对于 hp-unix来说可以用 glance,Aix来说可以用 topas,当你发现
vmstat中 pi列非零,memory 中的 free列的值很小,glance,topas中内存的利用率多于 80%
时,这时说明你的内存方面应该调节一下了,方法大体有以下几项。
a.划给 Oracle使用的内存不要超过系统内存的 1/2,一般保在系统内存的 40%为益。
b.为系统增加内存
c.如果你的连接特别多,可以使用 MTS的方式
d.打全补丁,防止内存漏洞。
65、查找前十条性能差的 sql.
SELECT * FROM
(
SELECT PARSING_USER_ID
EXECUTIONS,
SORTS,
COMMAND_TYPE,
DISK_READS,
sql_text
FROM v$sqlarea
ORDER BY disk_reads DESC
)
WHERE ROWNUM<10 ;
66、查看占 io较大的正在运行的 session
SELECT ,
,
,
,
,
,
,
_address,
,
,
_reads,
_changes
FROM v$session se,
v$session_wait st,
v$sess_io si,
v$process pr
WHERE =
AND =
AND =
AND >6
AND _time=0
AND NOT LIKE '%SQL%'
ORDER BY physical_reads DESC
对检索出的结果的几点说明:
<1> 我是按每个正在等待的 session已经发生的物理读排的序,因为它与实际的 IO相关。
<2> 你可以看一下这些等待的进程都在忙什么,语句是否合理?
Select sql_address from v$session where sid=;
Select * from v$sqltext where address=;
执行以上两个语句便可以得到这个 session的语句。
你也以用 alter system kill session 'sid,serial#';把这个 session杀掉。
<3> 应观注一下 event这列,这是我们调优的关键一列,下面对常出现的 event做以简要的
说明:
a、buffer busy waits,free buffer waits这两个参数所标识是 dbwr是否够用的问题,
与 IO很大相关的,当 v$session_wait中的 free buffer wait的条目很小或没有的时侯,
说明你的系统的 dbwr进程决对够用,不用调整;free buffer wait的条目很多,你的系统
感觉起来一定很慢,这时说明你的 dbwr已经不够用了,它产生的 wio已经成为你的数据库
性能的瓶颈,这时的解决办法如下:
增加写进程,同时要调整 db_block_lru_latches参数
示例:修改或添加如下两个参数
db_writer_processes=4
db_block_lru_latches=8
开异步 IO,IBM这方面简单得多,hp则麻烦一些,可以与 Hp工程师联系。
b、db file sequential read,指的是顺序读,即全表扫描,这也是我们应该尽量减少的部
分,解决方法就是使用索引、sql调优,同时可以增大 db_file_multiblock_read_count这
个参数。
c、db file scattered read,这个参数指的是通过索引来读取,同样可以通过增加
db_file_multiblock_read_count这个参数来提高性能。
d、latch free,与栓相关的了,需要专门调节。
e、其他参数可以不特别观注。
67. 文件说明
<1>监听器日志文件
以 8I为例
$ORACLE_HOME/NETWORK/LOG/
<2>. 监听器参数文件
以 8I为例
$ORACLE_HOME/NETWORK/ADMIN/
<3>. TNS 连接文件
以 8I为例
$ORACLE_HOME/NETWORK/ADMIN/
<4>. Sql*Net 环境文件
以 8I为例
$ORACLE_HOME/NETWORK/ADMIN/
<5>. 警告日志文件
以 8I为例
$ORACLE_HOME/ADMIN/SID/BDUMP/
<6>. 基本结构
以 8I为例
$ORACLE_HOME/RDBMS/ADMIN/
<7>. 建立数据字典视图
以 8I为例
$ORACLE_HOME/RDBMS/ADMIN/
<8>.建立审计用数据字典视图
以 8I为例
$ORACLE_HOME/RDBMS/ADMIN/
<9>. 建立快照用数据字典视图
以 8I为例
$ORACLE_HOME/RDBMS/ADMIN/
Oracle DBA笔试题参考答案
一:SQL tuning 类
1、列举几种表连接方式
答:hash join/merge join/nest loop(cluster join)/index join
解析:Hash join的主要资源消耗在于 CPU(在内存中创建临时的 hash表,并进行 hash计
算),而 merge join的资源消耗主要在于此盘 IO(扫描表或索引)。在并行系统中,hash
join对 CPU的消耗更加明显。所以在 CPU紧张时,最好限制使用 hash join。
在绝大多数情况下,hash join效率比其他 join方式效率更高:
在 Sort-Merge Join(SMJ),两张表的数据都需要先做排序,然后做 merge。因此效率相对最
差;
Nested-Loop Join(NL)效率比 SMJ更高。特别是当驱动表的数据量很大(集的势高)时。这
样可以并行扫描内表。
Hash join效率最高,因为只要对两张表扫描一次。
2、不借助第三方工具,怎样查看 sql的执行计划
程序代码
set autot on
explain plan set statement_id = &item_id for &sql;
select * from table();
3、如何使用 CBO,CBO与 RULE的区别
在 optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择 CBO,否
则选 RBO。RBO遵循简单的分级方法学,使用 15种级别要点,当接收到查询,优化器将评估
使用到的要点数目, 然后选择最佳级别(最少的数量)的执行路径来运行查询。 CBO尝试
找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同
的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。
4、如何定位重要(消耗资源多)的 SQL
答:根据 v$sqlarea 中的逻辑读/disk_read。以及寻找 CPU使用过量的 session,查出当前
session的当前 SQL语句,或者:监控 WIN平台 Oracle的运行
程序代码
select sql_text from v$sql
where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);
5、如何跟踪某个 session的 SQL
程序代码
exec _sql_trace_in_session(sid,serial#,&sql_trace);
select sid,serial# from v$session where sid = (select sid from v$mystat where
rownum = 1);
exec _ev(&sid,&serial#,&event_10046,&level_12,'');
6、SQL调整最关注的是什么
答 :逻 辑 读 ,IO量 ;查 看 该 SQL的 response time(db block gets/consistent
gets/physical reads/sorts (disk))
7、说说你对索引的认识(索引的结构、对 dml影响、为什么提高查询性能)
答:默认的索引是 b-tree.
对 insert的影响.(分裂,要保证 tree的平衡)
对 delete的影响.(删除行的时候要标记改节点为删除).
对 update的影响,如果更新表中的索引字段,则要相应的更新索引中的键值。
查询中包含索引字段的键值和行的物理地址
b-tree index/bitmap index/function index/patitional index(local/global)
索引通常能提高 select/update/delete的性能,会降低 insert的速度。
8、使用索引查询一定能提高查询的性能吗?为什么
索引就是为了提高查询性能而存在的, 如果在查询中索引没有提高性能, 只能说是
用错了索引,或者讲是场合不同
9、绑定变量是什么?绑定变量有什么优缺点?
答:通俗的说,绑定变量就是变量的一个占位符,使用绑定变量可以减少只有变量值
不同的语句的解析。绑定变量是相对文本变量来讲的,所谓文本变量是指在 SQL直接书写查
询条件,这样的 SQL在不同条件下需要反复解析,绑定变量是指使用变量来代替直接书写条
件,查询 bind value在运行时传递,然后绑定执行。优点是减少硬解析,降低 CPU的争用,
节省 shared_pool ;缺点是不能使用 histogram,sql优化比较困难
10、如何稳定(固定)执行计划
答:使用 stored outline。
程序代码
query_rewrite_enabled = true
star_transformation_enabled = true
optimizer_features_enable = 创建并使用 stored outline
oracle can automatically create outlines for all SQL statements, or you can
create them for specific SQL statements. In either case, the outlines derive
their input from the creates stored outlines automatically
when you set the initialization parameter Create_STORED_OUTLINES to true. When
activated, oracle creates outlines for all compiled SQL statements. You can
create stored outlines for specific statements using the Create OUTLINE
statement. 11:和排序相关的内存在 8i和 9i分别怎样调整,临时表空间的作用是什么
Oracle 8i中 sort_area_size/sort_area_retained_size决定了排序所需要的内存 如
果排序操作不能在 sort_area_size中完成,就会用到 temp表空间 Oracle 9i中如果
workarea_size_policy=auto时, 排序在 pga内进行,通常 pga_aggregate_target的
1/20可以用来进行disk sort; 如果workarea_size_policy=manual时,排序需要的内存
由 sort_area_size决 定 在 执 行 order by/group by/distinct/union/create
index/index rebuild/minus等操作时, 如果在 pga或 sort_area_size中不能完成,排
序将在临时表空间进行(disk sort), 临时表空间主要作用就是完成系统中的 disk
sort. 12:存在表 T(a,b,c,d),要根据字段 c排序后取第 21—30条记录显示,请给出 sql
程序代码
create table t(a number(,b number(,c number(,d number();
/
begin
for i in 1 .. 300 loop
insert into t values(mod(i,2),i/2,(1,300),i/4);
end loop;
end;
/
select * from (select c.*,rownum as rn from (select * from t order by c desc) c)
where rn between 21 and 30;
/
select * from (select * from test order by c desc) x where rownum < 30
minus
select * from (select * from test order by c desc) y where rownum < 20 order by
3 desc
相比之 minus性能较差
11、和排序相关的内存在 8i和 9i分别怎样调整,临时表空间的作用是什么?
答:8i:使用 sort_area_size,hash_area_size,每个 session分配相同的值,不管有无使
用。
9i: 使用 pga_aggregate来统一管理。
临时表空间的作用:
在 sort_area_size中不能完成的部分在临时表空间完成,临时表空间在重建索引,创
建临时表等都要用到。还有 hash join不能完成的也在临时表空间中做。
12、存在表 T(a,b,c,d),要根据字段 c排序后取第 21—30条记录显示,请给出 sql
select a,b,c,d from (select a,b,c,d from T order by c) where rownum<=30
minus
select a,b,c,d from (select a,b,c,d from T order by c) where rownum <=20;
或者:
select * from (select rownum rn,a.* from (select a,b,c,d from T order by c)
a )where rn between 21 and 30;
二:数据库基本概念类
1、pctused and pctfree 表示什么含义有什么作用
答:表示数据块什么时候移入和移出 freelist。
pctused:如果数据块的使用率小于 pctused的值,则该数据块重新加入到 fresslist中。
pctfree:如果数据块的使用率高于 pctfree的值,则该数据块从 freelist中移出。
2、简单描述 table / segment / extent / block之间的关系
答:一个 table至少是一个 segment,如果分区表,则每个分区是一个 segment,table可以
看成是一个逻辑上的概念,segment可以看成是这个逻辑概念的物理实现;
segment由一个或多个 extents组成,segment不可以跨表空间但可以跨数据文件;
extent由多个连续的 blocks组成,不可以跨数据文件;
block由 1-多个 os块组成,是 oracle i/o的最小存储单位。
3、描述 tablespace和 datafile之间的关系
答:tablespace是逻辑上的概念,datafile是物理上的概念。
一个 tablespace可以由多个 datafile组成,一个 datafile不能跨越多个 tablespace。
4、本地管理表空间和字典管理表空间的特点,ASSM有什么特点
答:一个使用 freelist管理,一个使用位图管理。
5、回滚段的作用是什么
答:保存数据的前像,保证数据读取的时间点一致性。Oracle里数据的多版本特性就是通
过回滚段来实现的,正因为此,Oracle数据库实现了读写不竞争的性能优势!
6、日志的作用是什么
答:纪录对数据库的操作,便与恢复。
7、SGA主要有那些部分,主要作用是什么
答 : db_cache(缓 存 数 据 块 ),shared_pool(缓 存 sql,执 行 计 划 , 数 据 字 典 信 息
等),large_pool(MTS模式、parallel 、rman等要用到),java pool(java程序如 SQLJ存储
过程运行时要用到)
8、racle系统进程主要有哪些,作用是什么
答:smon(合并空间,实例恢复),pmon(清理失败的进程),归档进程(负责在日志切换的
时候归档日志文件),lgmr(日志书写器进程,负责写日志),ckpt(检查点进程,触发检查
点),dbwr(数据库写入器,负责把数据写入导 datafile)
三:备份恢复类
1、备份如何分类
答:逻辑备份(exp)与物理备份。
或者冷备份与热备份。
2、归档是什么含义
答:把日志文件放到另一个地方。
3、如果一个表在 2004-08-04 10:30:00 被 drop,在有完善的归档和备份的情况下,如何恢
复
答:拷贝备份,
recover database until time 2004-08-04 10:30:00
alter database open resetlogs;
4、rman是什么,有何特点
答:rman叫恢复管理器.
特点很多。可以在线备份,到少目标数据库是 mount状态。
1:热备份。
2:可以存储脚本。
3:可以增量备份。
4:自动管理备份集。
5、standby的特点
答:利用传输重做日志来达到同步的目的。可以设定多个保护级别,9i后支持逻辑standbyDB。
6、对于一个要求恢复时间比较短的系统(数据库 50G,每天归档 5G),你如何设计备份策略
答:每天一个全备份。
四:系统管理类
1、对于一个存在系统性能的系统,说出你的诊断处理思路
答:做一个 statspack,根据 top 5,system load,top sql等来做相应的调整。
2、列举几种诊断 IO、CPU、性能状况的方法
答:hp-unix:iostat -x 1 5;
top/vmstat/glance
3、对 statspack有何认识
答:一个性能诊断工具而已,其本质就是在两个时间点采样两个系统数据。(动态性能视图),
然后根据两个 snapshot,产生一个报告。
4、如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量
减小对应用的影响
答:1:增大 sort_area_size(8i)/pga_aggregate_target(9i)值。
2:如果表有分区(一般大表都要用到分区的),按分区逐个建索引,如果是本地索引的话;
3:系统空闲的时候建。
5、对 raid10 和 raid5有何认识
答:raid10是先镜像后条带,适合对写入速度要求较高的数据库系统,特别是 online
redolog文件,raid5适合大部分的数据库系统和数据仓库系统,读性能优于写性能。
五:综合随意类
1、你最擅长的是 oracle哪部分?
答:性能/sql 调优、备份恢复。
2、喜欢 oracle吗?喜欢上论坛吗?或者偏好 oracle的哪一部分?
答:http:///,Oracle的 SQL 优化。
3、随意说说你觉得 oracle最有意思的部分或者最困难的部分
答:SQL调优,最困难的是 Oracle的网络管理,Oracle的 Connect Manager没用过。
4、为何要选择做 DBA呢?
答:爱好加职业历史积累。
5、如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量
减小对应用的影响
答:
1.增大 sort_area_size(8i)/pga_aggregate_target(9i)值。
2.用并行的方式来建。
3.系统空闲的时候建。
六:其他
什么是聚集索引,什么是非聚集索引,什么又是主键?
聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点。
非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指针指
向对应的数据块。
能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键,通过它可强制表的实
体完整性。
1、事务是什么?
答:所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不
可分割的工作单位。
2、oracle中 truncate和 delete命令有何区别?
答:
(1)delete将在回滚段中产生回滚信息,truncate不产生,因此无论表中的记录多少,
truncate执行都很快。
(2)truncate 是 DDL,执行隐含的 commit,truncate不能回滚。任何没有提交的 DML 改
变也将会和 truncate一起提交。
(3)truncate 重置表及其索引高水位标志。全表扫描和索引快速全扫描读高水位标志下的所
有数据块,因此在 delete后全扫描性能没有提高,但 truncate后将会变快。
(4)truncate 不触发 delete 触发器。
(5)没有对象权限允许一个用户 truncate 另一个用户的表。这样做需要 DROP ANY TABLE
系统权限。
(6)当一个表被 truncate,表及其索引的存储将被重置回初始大小。而 delete 不收缩表
及其索引的大小。
(7)当父表有一个可用的引用完整性约束时不能被 truncate。必须先 disable引用父表的外
键约束,再 truncate。
3、Oracle中 char和 varchar2数据类型有什么区别?有数据”test”分别存放到 char(10)
和 varchar2(10)类型的字段中,其存储长度及类型有何区别?
答:char是定长字符类型,varchar2是变长字符类型。“test”在 char(10)中被补齐空格,
存储长度是 10字节,在 varchar2(10)中存储长度是 4字节。
数据技术求职点评:Oracle DBA面试题
IT工作市场是如此的紧张,每个可获得的职位都有一堆人在申请。Naveen Nahata为 Oracle
E-Business Suite的数据库管理员申请者提供了以下一些面试时的技术问题,它可以帮助
申请者们快速脱颖而出。如果你的面试官有类似的问题问你,发个邮件给我,我将会把它添
加在列表中。――编者按
问题
1如果信息采集管理系统(ICM)崩溃了怎么办?
2你如何加速打补丁的过程?
3打补丁的过程中出错了,你怎么办?
4请提供克隆过程和克隆之后采取的手工操作的大概步骤。
5介绍一下 AutoConfig。AutoConfig是如何知道 XML文件中的哪个树脂需要被放入哪
一个文件的?
6你能告诉我,你对一个发生故障的自服务登录问题做哪些测试吗?你要检查哪个配置
文件操作选项和文件?
7如果你不能看到并发管理日志和输出文件,是哪里出错了?
8你是如何更改并发管理日志和输出文件的位置的?
9如果用户正遇到性能方面的问题,你如何找到问题的原因?
10你如何更改应用程序的密码?
11请写出 DBC文件的位置,并且解释它的重要性和应用程序如何知道 DBC文件名?
答案
1所有其他的管理器都会继续工作。ICM只会处理队列控制请求,意思是开启和关闭其
他并发的管理器。
2
你可以合并多个补丁。
你可以为一个非交互的补丁创建一个响应文件。
你可以通过选项(nocompiledb, nomaintainmrc, nocompilejsp)来应用补丁,并且
在应用了所有的补丁之后,一次运行它们。
3 查看失败工作的日志,找到并且纠正错误,用 adctrl 工具重新开启工作。
4在源文件上(所有层)运行 pre-clone,使用 RMAN复制数据库(或者从热或者冷备份中重新
存储数据库),拷贝文件系统,然后在目标文件(所有层)上运行 post-clone 。
手工步骤(可能会更多):
改变所有的非网站配置选项数值(快速克隆的话,只改变网站级别的配置文件选项)。
修改工作流和并发管理器表。
?.3更改打印机。
5 AutoConfig 使用了一个上下文文件来维护关键的配置文件。一个上下文文件就是一
个 XML文件,在$APPL_TOP/admin 目录下,进行集中式的存储。
当你运行 AutoConfig 的时候,它读取 XML文件,并且创建所有的 AutoConfig 管理配
置文件。
对于 AutoConfig维护的每个配置文件,都存在一个临时文件来判断哪个数值是从哪个
XML文件中得来的。
6
检查 DBC文件中的 guest的用户名和密码,配置选项 guest的用户名和密码、数据
库。
查看 apache/jserv是否启动了。
运行 IsItWorking, , aoljtest等。
7很 有 可 能 是 FNDFS监 听 器 停 止 了 。 看 看 FND_CONCURRENT_REQUESTS 表 中 的
OUTFILE_NODE_NAME 和 LOGFILE_NODE_NAME 的 数 值 。 看 看 FND_NODES 表 。 看 看
中的 FNDFS_ entry 。
8日志问卷爱女的位置是由$APPLCSF/$APPLLOG 参数来决定的,输出文件的位置是由
$APPLCSF/$APPLOUT 决定的。
9
追踪这个会话(用等待)并且使用 tkprof 来分析追踪文件。
生成 statspack 报告并进行分析。
使用 top/iostat/sar/vmstat 监控 O/s 。
通过 ping这类基本的测试结果来判断网络的瓶颈。
10
使用 FNDCPASS 来更改 APPS密码。
手工修改 文件。
更改所有从其他环境指过来的数据库链接。
11
位置:$FND_TOP/secure Directory
重要性:在其他事务中指向数据库服务器。
应用程序通过使用“Applications Database Id.”来了解 DBC文件的名字。
oracle dba 面试题
数据库切换日志的时候,为什么一定要发生检查点?这个检查点有什么意义?
表空间管理方式有哪几种,各有什么优劣。
本地索引与全局索引的差别与适用情况。
一个表 a varchar2(1),b number(1),c char(2),有 100000条记录,创建 B-Tree索引在字
段 a上,那么表与索引谁大?为什么?
9i的 data guard有几种模式,各有什么差别。
执行计划是什么,查看执行计划一般有哪几种方式。
简单描述一下 nest loop与 hash join的差别。
db file sequential read与 db file scattered read等待的差别,如果以上等待比较多,
证明了什么问题?
library cache pin与 library cache lock是什么地方的等待事件,一般说明什么问题?
在一个 24*7的应用上,需要把一个访问量很大的 1000万以上数据级别的表的普通索引(a,b)
修改成唯一约束(a,b,c),你一般会选择怎么做,请说出具体的操作步骤与语句。
如果一个 linux上的 oracle数据库系统突然变慢,你一般从哪里去查找原因。
说明一下对 raid5与 raid01/10的认识。
列举 5个 10g的新特性
ORACLE DBA面试题集
一:SQL tuning 类
1 列举几种表连接方式
等连接、非等连接、自连接、外连接(左、右、全)
2 不借助第三方工具,怎样查看 sql的执行计划
I) 使用 Explain Plan,查询 PLAN_TABLE;
EXPLAIN PLAN
SET STATEMENT_ID='QUERY1'
FOR
SELECT *
FROM a
WHERE aa=1;
SELECT operation, options, object_name, object_type, ID, parent_id
FROM plan_table
WHERE STATEMENT_ID = 'QUERY1'
ORDER BY ID;
II)SQLPLUS中的 SET TRACE 即可看到 Execution Plan Statistics
SET AUTOTRACE ON;
3:如何使用 CBO,CBO与 RULE的区别
IF 初始化参数 OPTIMIZER_MODE = CHOOSE THEN --(8I DEFAULT)
IF 做过表分析
THEN 优化器 Optimizer=CBO(COST); /*高效*/
ELSE
优化器 Optimizer=RBO(RULE); /*高效*/
END IF;
END IF;
区别:
RBO根据规则选择最佳执行路径来运行查询。
CBO根据表统计找到最低成本的访问数据的方法确定执行计划。
使用 CBO需要注意:
I) 需要经常对表进行 ANALYZE命令进行分析统计;
II) 需要稳定执行计划;
III)需要使用提示(Hint);
使用 RULE需要注意:
I) 选择最有效率的表名顺序
II) 优化 SQL的写法;
4 如何定位重要(消耗资源多)的 SQL
使用 CPU多的用户 session
SELECT , spid, status, SUBSTR (, 1, 40) prog,
,_TEXT,
osuser, VALUE / 60 / 100 VALUE
FROM v$session a, v$process b, v$sesstat c
WHERE # = 12 AND = AND =
ORDER BY VALUE DESC;
5 如何跟踪某个 session的 SQL
利用 TRACE 跟踪
ALTER SESSION SET SQLTRACE ON;
COLUMN SQL format a200;
SELECT machine, sql_text SQL
FROM v$sqltext a, v$session b
WHERE address = sql_address
AND machine = '&A'
ORDER BY hash_value, piece;
6 SQL调整最关注的是什么
检查系统的 I/O问题
sar-d能检查整个系统的 iostat(IO statistics)
7 说说你对索引的认识(索引的结构、对 dml影响、对查询影响、为什么提高查询性能)
l 索引有 B-TREE、BIT、CLUSTER等类型。ORACLE使用了一个复杂的自平衡 B-tree
结构;
l 通常来说,在表上建立恰当的索引,查询时会改进查询性能。但在进行插入、
删除、修改时,同时会进行索引的修改,在性能上有一定的影响。
l 有索引且查询条件能使用索引时,数据库会先度取索引,根据索引内容和查询
条件,查询出 ROWID,再根据 ROWID取出需要的数据。由于索引内容通常比全表内容要少很
多,因此通过先读索引,能减少 I/O,提高查询性能。
8 使用索引查询一定能提高查询的性能吗?为什么
l 通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价.
n 索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修
改时,
n 索引本身也会被修改. 这意味着每条记录的 INSERT,DELETE,UPDATE将为此多
付出 4,5 次的磁盘 I/O. 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使
查询反应时间变慢.
l 使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用
于两种情况:
n 基于一个范围的检索,一般查询返回结果集小于表中记录数的 30%宜采用;
n 基于非唯一性索引的检索
9 绑定变量是什么?绑定变量有什么优缺点?
l 绑定变量是指在 SQL语句中使用变量,改变变量的值来改变 SQL语句的执行结
果。
l 优点:使用绑定变量,可以减少 SQL语句的解析,能减少数据库引擎消耗在 SQL
语句解析上的资源。提高了编程效率和可靠性。减少访问数据库的次数, 就能实际上减少
ORACLE的工作量。
l 缺点:经常需要使用动态 SQL的写法,由于参数的不同,可能 SQL的执行效率
不同;
10 如何稳定(固定)执行计划
可以在 SQL语句中指定执行计划。使用 HINTS;
11 和排序相关的内存在 8i和 9i分别怎样调整,临时表空间的作用是什么
SORT_AREA_SIZE 在进行排序操作时,如果排序的内容太多,内存里不能全部放下,则
需要进行外部排序,
此时需要利用临时表空间来存放排序的中间结果。
12 存在表 T(a,b,c,d),要根据字段 c排序后取第 21—30条记录显示,请给出 sql
SELECT *
FROM (SELECT ROWNUM AS row_num, tmp_tab.*
FROM (SELECT a, b, c, d
FROM T
ORDER BY c) tmp_tab
WHERE ROWNUM <= 30)
WHERE row_num >= 20
ORDER BY row_num;
二:数据库基本概念类
1 Pctused and pctfree 表示什么含义有什么作用
pctused与 pctfree控制数据块是否出现在 freelist中,
pctfree控制数据块中保留用于 update的空间,当数据块中的 free space小于 pctfree
设置的空间时,
该数据块从 freelist中去掉,当块由于 dml操作 free space大于 pct_used设置的空间
时,该数据库块将
被添加在 freelist链表中。
2 简单描述 tablespace / segment / extent / block之间的关系
n tablespace : 一个数据库划分为一个或多个逻辑单位,该逻辑单位成为表
空间;每一个表空间可能包含一个或多个 Segment;
n Segments : Segment指在tablespace中为特定逻辑存储结构分配的空间。
每一个段是由一个或多个 extent组成。包括数据段、索引段、回滚段和临时段。
n Extents : 一个 extent 由一系列连续的 Oracle blocks组成.ORACLE
为通过 extent 来给 segment分配空间。
n Data Blocks :Oracle 数据库最小的 I/O存储单位,一个 data block对应
一个或多个分配给 data file的操作系统块。
3 描述 tablespace和 datafile之间的关系
◎ 一个表空间可包含一个或多个数据文件。
◎ 表空间利用增加或扩展数据文件扩大表空间,表空间的大小为组成该表空间的数据
文件大小的和。
◎ 一个 datafile只能属于一个表空间;
4 本地管理表空间和字典管理表空间的特点,ASSM有什么特点
n 本地管理表空间:(9i默认)
n 空闲块列表存储在表空间的数据文件头。
n 特点:减少数据字典表的竞争,当分配和收缩空间时会产生回滚,不需要合并
n 字典管理的表空间:(8i默认)
n 空闲块列表存储在数据库中的字典表里.
n 特点:片由数据字典管理,可能造成字典表的争用。存储在表空间的每一个段
都会有不同的存储字句,需要合并相邻的块;
5 回滚段的作用是什么
回滚段用于保存数据修改前的映象,这些信息用于生成读一致性数据库信息、在数据库
恢复和 Rollback时使用。一个事务只能使用一个回滚段。
6 日志的作用是什么
日志文件(Log File)记录所有对数据库数据的修改,主要是保护数据库以防止故障,以
及恢复数据时使用。其特点如下:
a)每一个数据库至少包含两个日志文件组。每个日志文件组至少包含两个日志文件成员。
b)日志文件组以循环方式进行写操作。
c)每一个日志文件成员对应一个物理文件。
7 SGA主要有那些部分,主要作用是什么
系统全局区(SGA):是 ORACLE为实例分配的一组共享缓冲存储区,用于存放数据库数据
和控制信息,以实现对数据库数据的管理和操作。
SGA主要包括:
u a)共享池(shared pool) :用来存储最近执行的 SQL语句和最近使用的数据字典
的数据。
u b)数据缓冲区 (database buffer cache):用来存储最近从数据文件中读写过的
数据。
u c)重作日志缓冲区(redo log buffer):用来记录服务或后台进程对数据库的操
作。
另外在 SGA中还有两个可选的内存结构:
u d)Java pool: 用来存储 Java代码。
u e)Large pool: 用来存储不与 SQL直接相关的大型内存结构。备份、恢复使用。
8 Oracle系统进程主要有哪些,作用是什么
u 数据写进程(DBWR):负责将更改的数据从数据库缓冲区高速缓存写入数据文件
u 日志写进程(LGWR):将重做日志缓冲区中的更改写入在线重做日志文件
u 系统监控 (SMON): 检查数据库的一致性如有必要还会在数据库打开时启动数
据库的恢复
u 进程监控 (PMON): 负责在一个 Oracle 进程失败时清理资源
u 检查点进程(CKPT):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中
时,更新控制文件和数据文件中的数据库状态信息。
u 归档进程 (ARCH):在每次日志切换时把已满的日志组进行备份或归档
u 恢复进程 (RECO): 保证分布式事务的一致性,在分布式事务中,要么同时
commit,要么同时 rollback;
u 作业调度器(CJQ ): 负责将调度与执行系统中已定义好的 job,完成一些预定义
的工作.
三:备份恢复类
1 备份如何分类
n 物理备份
u 物理备份是最主要的备份方式。用于保证数据库在最小的数据库丢失或没有数据
丢失的情况下得到恢复。
n 冷物理
u 冷物理备份提供了最简单和最直接的方法保护数据库因物理损坏丢失。建议在以
下几种情况中使用。
u 对一个已经存在大最数据量的数据库,在晚间数据库可以关闭,此时应用冷物理
备份。
u 对需对数据库服务器进行升级,(如更换硬盘),此时需要备份数据库信息,并在
新的硬盘中恢复这些数据信息,建议采用冷物理备份。
n 热物理
u 主要是指备份过程在数据库打开并且用户可以使用的情况下进行。需要执行热物
理备份的情况有:
u 由于数据库性质要求不间断工作,因而此时只能采用热物理备份。
u 由于备份的要求的时间过长,而数据库只能短时间关闭时。
n 逻辑备份 (EXP/IMP)
u 逻辑备份用于实现数据库对象的恢复。但不是基于时间点可完全恢复的备份策略。
只能作为联机备份和脱机备份的一种补充。
n 完全逻辑备份
u 完全逻辑备份是将整个数据库导出到一个数据库的格式文件中,该文件可以在不
同的数据库版本、操作系统和硬件平台之间进行移植。
n 指定表的逻辑备份
u 通过备份工具,可以将指定的数据库表备份出来,这可以避免完全逻辑备份所带
来的时间和财力上的浪费。
2 归档是什么含义
n 归档是归档当前的联机 redo日志文件。
n SVRMGR> alter system archive log current;
n 数据库只有运行在 ARCHIVELOG模式下,并且能够进行自动归档,才可以进行联
机备份。有了联机备份才有可能进行完全恢复。
3 如果一个表在 2004-08-04 10:30:00 被 drop,在有完善的归档和备份的情况下,如何恢
复
I) 9i 新增的 FLASH BACK 应该可以;
II) Logminer应该可以找出 DML。
III)有完善的归档和备份,先归档当前数据,然后可以先恢复到删除的时间点之前,把
DROP 的表导出来,然后再恢复到最后归档时间;
不过,我没试过,都是理论的说!!
4 rman是什么,有何特点
n RMAN可以用来备份和还原数据库文件、归档日志和控制文件。它也可以用来执
行完全或不完全的数据库恢复。
n RMAN启动数据库上的 Oracle服务器进程来进行备份或还原。备份、还原、恢
复是由这些进程驱动的。
n 注意:RMAN不能用于备份初始化参数文件和口令文件。
具有如下特点:
n 功能类似物理备份,但比物理备份强大 N倍;
n 可以压缩空块;
n 可以在块水平上实现增量;
n 可以把备份的输出打包成备份集,也可以按固定大小分割备份集;
n 备份与恢复的过程可以自动管理;
n 可以使用脚本(存在 Recovery catalog 中)
n 可以做坏块监测
5 standby的特点
备用数据库(standby database):ORACLE推出的一种高可用性(HIGH AVAILABLE)数据
库方案,
在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份
可以实现快速切换与灾难性恢复,从 920开始,还开始支持物理与逻辑备用服务器。
9i中的三种数据保护模式分别是:
n MAXIMIZE PROTECTION :最大数据保护与无数据分歧,LGWR将同时传送到备
用节点,
u 在主节点事务确认之前,备用节点也必须完全收到日志数据。如果网络不好,引
起 LGWR不能传送数据,将引起严重的性能问题,导致主节点 DOWN机。
n MAXIMIZE AVAILABILITY :无数据丢失模式,允许数据分歧,允许异步传送。
u 正常情况下运行在最大保护模式,在主节点与备用节点的网络断开或连接不正常
时,自动切换到最大性能模式,
u 主节点的操作还是可以继续的。在网络不好的情况下有较大的性能影响。
n MAXIMIZE PERFORMANCE:这种模式应当可以说是从8i继承过来的备用服务器模
式,异步传送,
u 无数据同步检查,可能丢失数据,但是能获得主节点的最大性能。9i在配置 DATA
GUARD的时候默认就是 MAXIMIZE PERFORMANCE
没实践过,只是把答案列出来。
6 对于一个要求恢复时间比较短的系统(数据库 50G,每天归档 5G),你如何设计备份策略
数据库比较大逻辑备份没什么必要,每天归档 5G,每周三/周六自动归档 10G,每月 RMAN
归档全库。
应该有 standby。
我对备份和恢复缺少实践机会,JUST PAPER。
四:系统管理类
1 对于一个存在系统性能的系统,说出你的诊断处理思路
I) 做 statspack收集系统相关信息
了解系统大致情况/确定是否存在参数设置不合适的地方/查看 top 5 event/查看 top
sql等
II) 查 v$system_event/v$session_event/v$session_wait
从 v$system_event开始,确定需要什么资源(db file sequential read)等
深入研究 v$session_event,确定等待事件涉及的会话
III)从 v$session_wait确定详细的资源争用情况
通过 v$sql/v$sqltext/v$sqlarea表确定 disk_reads、(buffer_gets/executions)值较
大的 SQL
2 列举几种诊断 IO、CPU、性能状况的方法
top
uptime
vmstat
iostat
statspack
sql_trace/tkprof
查 v$system_event/v$session_event/v$session_wait
查 v$sqlarea(disk_reads或 buffer_gets/executions较大的 SQL)
或者第三方的监视工具,TOAD就不错。
3 对 statspack有何认识
认识不深。仅限了解。StapSpack是 Oracle公司提供的一个收集数据库运行性能指标的
软件包。
可以做数据库健康检查报告。
4 如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减
小对应用的影响
可以先表分析一下,然后测试创建索引前后对应用的性能影响;
需要考虑的是该索引列不经常更新,不是有很多重复值的情况时, 在大表中使用索引特
别有效.
创建的索引可以跟数据表分不同表空间存储。
5 对 raid10 和 raid5有何认识
几乎不懂。没配过磁盘阵列
五:综合随意类
1 你最擅长的是 oracle哪部分?
pl/sql及 sql优化
2 喜欢 oracle吗?喜欢上论坛吗?或者偏好 oracle的哪一部分?
喜欢。PL/SQL比较得心应手。
3 随意说说你觉得 oracle最有意思的部分或者最困难的部分
我对数据库的备份/恢复和性能调优经验明显不足,自然觉得有些困难。
基于 ORACLE的研究应该是个宽广的领域,所以我觉得还是有意思的。
4 为何要选择做 DBA呢?
我对数据库的备份/恢复和性能调优经验明显不足,主要是缺乏环境和交流。
因此,算不上什么 DBA。不过因此我更需要这样的机会。
不过就整个 ORACLE 来说,一直从事与它相关的工作,感情还是颇深的。放弃可惜。而
且就技术本身而言我觉得自己还是有学习和创新的能力,它的诸如数据仓库,数据挖掘之类
的领域也很广。
一份 DBA的面试题
ORACLE 笔试
选择题 (在正确的答案前打勾)
1, 下面哪一个选项不属于调优目标的
A,共享应用代码
B,减少用户对资源的等待
C,为没有剩余空间的表空间添加数据文件
D,减少 IO操作
2, 数据库报警日志文件的位置
A, user_dump_dest参数指定的位置
B, alert_dump_dest参数指定的位置
C, archive_log_dest 参数指定的位置
D, background_dump_dest 参数指定的位置
3, 下列哪两种方法可以用来设置会话跟踪
A, 使用 _sql_trace_in_session 过程
B, 通过 alter session set sql_trace=true
C, 使用 _sql_trace_in_session 过程
D, 通过 alter session set log_checkpoints_to_alert=true
4, 下列哪些视图是数据字典视图
A, v$sysstat
B, dba_objects
C, dba_tables
D, dba_indexes
5, 下列哪个视图可以获取数据库的启动时间
A, v$database
B, v$sesstat
C, v$lock
D, v$instance
6, 对于 v$session 视图叙述正确的是
A, 可以通过此视图查询出一个会话的 sid、serial#
B, 可以直接通过此视图查询出此会话的机器的 IP地址
C, 可以通过此视图查询出一个会话的登陆数据库的时间
D, 可以通过此视图查询出用户通过什么程序连接数据库
7, 关于 statspack,下列哪个说法是错误的
A, statspack是一个数据库性能诊断工具
B, 使用 statspack时需要将参数 timed_statistics设置为 true
C, statspack在使用时最少需要执行 2次 statspack..snap
D, statspack在建库时,自动被创建。
8, 下列哪些语句属于 DML语句
A, select count(*) from dba_tables;
B, create table test (a number);
C, alter table test nologging;
D, delete from test;
9, 在 sql的执行过程中,哪一步进行共享池的分配
A, Create a Cursor 创建游标
B, Parse the Statement 分析语句
C, Bind Any Variables 绑定变量
D, Parallelize the Statement 并行执行语句
10, 在 sql的书写过程中,使用绑定变量的主要作用
A, 共享 SQL
B, 增加 sql的执行速度
C, 改变执行计划
D, 增加 sql的可读性
11, 关于优化器的说法正确的是
A, oracle主要提供了 2种优化器:基于规则的优化器(rule)和基于花费的优化器
(cost)
B, 基于规则的优化器通过访问路径的优先等级,来决定执行计划
C, 基于花费的优化器,通过 IO,CPU, 网络情况,来选择资源消耗最少的执行计划
D, oracle9i中,基于花费的优化器不需要统计信息
12, 下列哪种数据访问路径最快
A, Table Access by ROWID
B, index unique scan
C, index range scan
D, index full scan
E, index fast full scan
13, 下列哪种连接方式是需要连接的两个行源是有序的
A, 合并连接
B, 嵌套循环
C, 哈希连接
D, 笛卡儿积
14, 下列关于索引描述正确的是
A, 所有的索引都不包含 null值
B, b*tree 索引的高度越高越好
C, 只要是取值范围都不好的列,就可以建立 bitmap索引
D, 索引可以在线 rebuild,而不影响对于表的 dml操作
15, 关于索引不能被使用,可能的原因有
A, where子句没有包含被索引的列
B, 表或索引的统计信息错误
C, where子句的索引列上存在隐含数据类型转换
D, 返回的行源很多
E, 使用了 like ’%???%’
16, 关于函数索引说法错误的是
A, 使用函数索引需要 QUERY REWRITE权限
B, 使用函数索引需要 GLOBAL QUERY REWRITE 权限
C, 可用通过函数索引来实现只索引某些行数据的目的
D, 函数索引很适合 oltp系统
17, view this SELECT statement:
1. SELECT department, MAX(salary)
2. FROM employee
3. WHERE department IN(200, 300, 400) and
4. MAX(salary)>60000
5. GROUP BY department;
Which line in the statement causes error?
A. 1
B. 3
C. 4
D. 5
18, Which three commands cause a transaction to end?
A. ALTER
B. GRANT
C. DELETE
D. INSERT
E. UPDATE
F. ROLLBACK
简答题
1,ORACLE的静态结构包含哪些类型的文件?
2,TRACE文件有哪些种类?一般存放在什么地方?
3,ORACLE的主要内存结构有哪些?
软件代码区:用于存储正在执行的或可以执行的程序代码
系统全局区(SGA):一组由 ORACLE分配的共享的内存结构,可包含一个数据库实例的数据或
控制信息
程序全局区(PGA):一个内存区,包含单个进程的数据和控制信息
排序区:ORACLE利用该内存排序数据
4,REDO LOG的作用是什么,如果 REDO LOG故障如何修复?
重做日志(Redo Log)也称作事务日志( Transaction Log),Oracle在这些特殊的操作系统
文件中记录针对数据库进行的修改操作或事务,数据库系统可以使用这些事务记录进行恢复
操作。
检查 v$session_wait视图,我们可以从中看到很多 session处于 log file switch
(checkpoint incomplete) 的等待; 检查 DBWR进程。
5,回滚段的主要作用是什么,如何优化回滚段?如何增加回滚段的大小?回滚段是线状结
构还是环状结构?
当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回
滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原
来的值。
增加回滚段可以加大回滚段所适应的表空间:
alter database datafile ‘..\*.dbf’resize xxM
6,共享池的主要作用是什么?设置共享池要注意些什么?共享池过大有什么不好?
7,UPDATE较多的表,设置存储参数的时候应该注意什么?
8,PGA的工作区域如何配置?
9,如何进行 SQL优化?
10, 表之间的关联方法有哪些?
11、How would you edit your CRONTAB to schedule the running of /test/ to
run every other day at 2PM?
12、 How do you increase the OS limitation for open files (LINUX and/or
Solaris)?
13. Explain how you would restore a database using RMAN to Point in Time?
14.What view(s) do you use to associate a user's SQLPLUS session with his o/s
process?
15 What are the commands you'd issue to show the explain plan for "select *
from dual"?
16. In which dictionary table or view would you look to determine at which time
a snapshot or MVIEW last successfully refreshed?
17. How would you best determine why your MVIEW couldn't FAST REFRESH?
18. How does propagation differ between Advanced Replication and Snapshot
Replication (readonly)?
19. Which dictionary view(s) would you first look at to understand or get a
high-level idea of a given Advanced Replication environment?
20. Database crashes. Corruption is found scattered among the file system
neither of your doing nor of Oracle's. What database recovery options are
available? Database is in archive log mode.
DBA面试题
Changed job recently. Interviewed two DBA positions. Here are some questions.
Very basic.
1)Describe the procedure of a "update" statement.
UPDATE emp SET sal = 40000 Where empno= 12345;
What will happen internally?
2)What's difference between Sort-merge join, nested-loop and hash join? Write
down some statements and compare their efficiency
3)What's difference between Differential backup level 0 and level 1?
4)Describe a procedure that you recovered a crashed database. What command did
you use? What's difference between restore and recovery?
5)Show the strategy when you tune a performance problem. Give us an example.
6)Describe the difference between data guard physical standby and logical
standby.
7)Describe the procedure to set up a ASM disk
8)Do you know RAC? Tell us sth about RAC.
and some basic questions
1)List some types of segment
2)compare bitmap and B-tree index?
3)ORA-01555
That's all I can remember. Hope it is helpful to all.