一份 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 的哪一部分?
答: 的 SQL 优化。
3:随意说说你觉得 oracle 最有意思的部分或者最困难的部分
答:SQL 调优,最困难的是 Oracle 的网络管理,Oracle 的 Connect Manager 没用过。
4:为何要选择做 DBA 呢?
答:爱好加职业历史积累。
4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减
小对应用的影响
答:1:增大 sort_area_size(8i)/pga_aggregate_target(9i)值。
2:用并行的方式来建。
3:系统空闲的时候建。
其他:
什么是聚集索引,什么是非聚集索引,什么又是主键?
聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点。
非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指针指
向对应的数据块。
能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键,通过它可强制表的实
体完整性。
1、事务是什么?A:所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么
全不做,是一个不可分割的工作单位。
2、oracle 中 truncate 和 delete 命令有何区别?A:
(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)类型的字段中,其存储长度及类型有何区别?A:char 是定长字符类型,varchar2
是变长字符类型。“test”在 char(10)中被补齐空格,存储长度是 10 字节,在 varchar2(10)中存
储长度是 4 字节。
Oracle DBA 笔试及面试题汇总:基础篇-考试认证
使用篇
1:使用索引查询一定能提高查询的性能吗?举出实例
2:数据库设计的一、二、三范式、BCNF 是什么?
3:StoreProcedure 和 Function 有何区别?
4:如何跟踪某个 session 的 SQL?
5:如何使用 CBO,CBO 与 RULE 的区别?
6:描述 tablespace 和 datafile 之间的关系
7:truncate 和 delete 有何区别?哪一种操作性能更快?
8:什么是 Snapshot?与 View 有何区别?
9:pctused and pctfree 表示什么含义有什么作用
10:cursor 一般用在什么地方?有何弱点?
管理篇
1:SQL 调整最关注的是什么?
2:Oracle 的系统进程有哪些?作用是什么?
3:本地管理表空间和字典管理表空间的特点,ASSM 有什么特点?
4:备份如何分类?
5:如果一个表被 drop,在有完善的归档和备份的情况下,如何恢复
6:rman 是什么,有何特点?
7:standby 的特点
8:对于一个要求恢复时间比较短的系统(数据库 50G,每天归档 5G),你如何设计备份策
略
9:对于一个存在系统性能的系统,说出你的诊断处理思路
10:列举几种诊断 IO、CPU、性能状况的方法
11:对 statspack 有何认识
12:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以
尽量减小对应用的影响
13:对 raid10 和 raid5 有何认识
14:SGA 主要有那些部分,主要作用是什么
15:简单描述 table / segment / extent / block 之间的关系
16:说说你对索引的认识(索引的结构、对 dml 影响、对查询影响、为什么提高查询性
能)
46 家著名企业笔试试题(IT 业)--香港电信/ORACLE/维尔 VERITAS/凹凸电子/普
华永道 PW/奇码数字信息 C
香港电信笔试题
1. Based on your understanding of the following java related technologies:
servlets, JavaServerPage, JavaBeans, Enterprise JavaBeans, how do you think these technologies
are work together or are applied in the development of an in ternet-based application (25marks).
2. In your opinion ,what do you think are the advantages or benefits of using an object-oriented
approach to software development? how do you think those benefits can be achieved or realized?
(15marks).
3. In designing your classes, given the choice between inheritance and aggregation which do you
choose (15marks).
4. How would you work around the lack of multiple inheritance feature in Java (15marks).
5. What would you consider to be the hardest part of OO analysis and design and why (10marks).
6. How do you keep yourself up to date with the latest in software techonogy, especially in the
field of software development (10marks).
7. What si your career aspiration? Why do you think this E-Commerce Development Center can
help you in achieving your career goals (10marks) (1hr, answer in English).
ORACLE 的笔试题
1. Would you please describe yourself in 3-4 lines? (limited in 500 words)
2. Could you tell us why we should choose you as a Loreal Person, and what makes you unique?
(limited in 500 words)
3. What is your short-term and long-term career plan? (limited in 500 words)
4. What kind of group activities are you interested in and what type of role do you often play?
(limited in 500 words)
5. Please use one sentence to give a definition of ‘Beauty’, and describe the most beautiful thing in
your life. (limited in 500 words)
维尔 VERITAS 软件笔试题
1. A class B network on the internet has a subnet mask of , what is the maximum
number of hosts per subnet .
a. 240 b. 255 c. 4094 d. 65534
2. What is the difference: between o(log n) and o(log n^2), where both log arithems have base 2 .
a. o(log n^2) is bigger b. o(log n) is bigger c. no difference
3. For a class what would happen if we call a class’s constructor from with the same class’s
constructor .
a. compilation error b. linking error
c. stack overflow d. none of the above
4. “new” in c++ is a: .
a. library function like malloc in c
b. key word c. operator
d. none of the above
5. Which of the following information is not contained in an inode .
a. file owner b. file size
c. file name d. disk address
6. What’s the number of comparisons in the worst case to merge two sorted lists containing n
elements each .
a. 2n -1 +1 -2
7. Time complexity of n algorithm T(n), where n is the input size ,is T(n) =T(n-1)+1/n if n>1
otherwise 1 the order of this algorithm is .
a. log (n) b. n c. n^2 d. n^n
8. The number of 1’s in the binary representation of 3*4096+ 15*256+5*16+ 3 are .
a. 8 b. 9 c. 10 d. 12
百威啤酒(武汉公司)
1,为什么申请来百威?
2,将来有什么打算?
3,有没有社会活动经历?
4,有没有当众演讲的经历?
5,经常使用那些软件?
6,喜欢哪些课程?
7,你认为工作中的什么因素对你来说最重要?
8,什么时候可以来上班?可以在这里工作多久?
9,八点上班,要加班和出差,能不能做到?
星巴克
1、 您是一家咖啡店的店经理,你发现店内同时出现下列状况:
1)许多张桌子桌面上有客人离去后留下的空杯未清理,桌面不干净待整理。
2)有客人正在询问店内卖哪些品种,他不知如何点咖啡菜单。
3)已有客人点完成咖啡,正在收银机旁等待结帐。
4)有厂商正准备要进货,需要店经理签收。
请问,针对上述同时发生的情况,你要如何排定处理之先后顺序,为什么
2、 有一位甲员工脾气不好以致在前三家店因为与店内其他同事相处不佳而屡屡调动,现在
甲被调到你的店里面来,请问身为店经理的你,将如何应对??
3、 你是店经理,本周五结帐后,发现门市总销售额较上周五减少 30%,请问可能原因 会
是哪几种,各原因如何应对?
凹凸电子软件笔试题
1. Select ONE of the following projects to discuss:
a. Signal Filtering: You are given a sampled real time waveform consisting of a sensor reading
mixed with highly periodic impulses and high frequency noise. The desired output is the real time
filtered sensor signal with the impulses and noise removed, and a readout of the impulse period.
The FFT may not be used.
b. Interrupt Processing. A headware register consisting of eight independent edge triggered latches
is used to record external asynchronous interrupt requests. When any of the request bits are
latched, a software interrupt is generated. The software may read the latch to see which
interrupt(s) occurred. Writing a one to any latch bit will clear the latch. How does that software
assure that no interrupt request is ever missed?
c. User Interface: a prototype MP3 player interface consisting of a playlist display and a few
control buttons is given to you. How would you make the interface “skinnable”, with user selected
graphics, options, and control button placement?
Each project description is incomplete. What questions would you ask to completely specify the
project? What development tools would you prefer to use?
What algorithm /data structures/design would you use?
2. What program(s) have you coded for you own enjoyment (not part of a school project, not for
pay). What type of software project would you most enjoy working on?
3. Have you participated in a team programming project? What is the hardest part of programming
as a team, as opposed to programming alone?
友
立资讯笔试题目
1.一堆鸡蛋,3 个 3 个数剩余 2 个,5 个 5 个数剩余 1 个,7 个 7 个数剩余 3 个,问这
堆鸡蛋 最少有多少个?并给出通解。
2.列举五岳,及其所在省份。
3.何为四书。
4.按顺序默写 24 节气。
5.默写于谦的《吟石灰》。
6.英语翻译约 300 字。
7.作文一篇:求职有感。
普华永道 PWC 笔试题目(作文)
1.最近 10 年来中国媒体的变化。
2.你认为发展汽车产业和公共交通哪个更重要?
3.如何理解风险投资?
4.如何理解广告的消极作用和积极作用?
Avant! 微电子 EE 笔试题
1.名词解释:VLSI,CMOS,EDA,VHDL,Verilog,HDL,ROM,RAM,DRC,LVS。
2.简述 CMOS 工艺流程。
3.画出 CMOS 与非门的电路,并画出波形图简述其功能。
4.画出 N 沟道增强型 MOSFET 的剖面图。
5.简述 ESD 和 latch-up 的含义。
6.简述三极管与 MOS 管的区别。
7.简述 MOORE 模型和 MEALY 模型。
8.简述堆栈与队列的区别。
奇码数字信息有限公司笔试题
1.画出 NMOS 的特性曲线(指明饱和区,截至区,线性区,击穿区和 C-V 曲线)
2. 工艺下,Kn=3Kp,设计一个反相器,说出器件尺寸。
3.说出制作 N-well 的工艺流程。
4.雪崩击穿和齐纳击穿的机理和区别。
5.用 CMOS 画一个 D 触发器(clk,d,q,q-)
Oracle DBA 笔试题
(答题时间 60 分钟)
Unix/Linux 题目
1、如何查看主机 cpu,内存、IP 和磁盘空间?
2、你常用的进程管理、主机性能察看命令有哪些?
3、建立组 dba 和该组下用户 oracle,默认 shell 为 bash。
4、如何查看用户 oracle 的登陆历史和命令操作历史?
5、写 crontab,让脚本/opt/ 在每周日晚上 8:00 执行。
6、如何查找当前目录及其所有子目录下含有“ORA-”或“warning”字符内容的所有带 log 后缀
的文件。
7 、 写 一 个 shell , 完 成 自 动 登 陆 数 据 库 ( 用 户 名 密 码 是 test/testpwd, 网 络 连 接 串 是
db_wending)并获取数据库当前 SCN 的功能。
Oracle Database 题目
1、如何快速了解一个已经运行很久的数据库系统?
2、如何获得 SQL 语句的执行计划和统计信息?
3、列出你常用的数据字典视图和动态性能视图。
4、陈述使用过的数据库备份和恢复技术,及其优缺点。
5、描述 table/segment/tablespace/datafile/extent/block 之间的关系。
6、前台系统反映非常慢,需要你去分析诊断。请详细陈述诊断流程,包括写下可能用到的
操作系统命令、数据库视图等。
7、公司准备把 Oracle9i 升级为 ,但批准的停库时间仅为 10 分钟,你打算如
何应对?
8、详细陈述 RAC、Dataguard、Streams Replication、Advanced Replication 等 Oracle HA 技
术的原理和优缺点。
9、写存储过程,把当前用户下数据库对象个数信息按对象类型分组输出来。
10、请写下你常关注的 oracle 初始化参数。
--End--
国外公司的 Oracle DBA 面试题
2007-11-20 10:20
Oracle DBA Interview Questions By B G
1. How many memory layers are in the shared pool?
2. How do you find out from the RMAN catalog if a particular archive log has been
backed-up?
3. How can you tell how much space is left on a given file system and how much space each
of the file system's subdirectories take-up?
4. Define the SGA and:
? How you would configure SGA for a mid-sized OLTP environment?
? What is involved in tuning the SGA?
5. What is the cache hit ratio , what impact does it have on performance of an Oracle
database and what is involved in tuning it?
6. Other than making use of the statspack utility, what would you check when you are
monitoring or running a health check on an Oracle 8i or 9i database?
7. How do you tell what your machine name is and what is its IP address?
8. How would you go about verifying the network name that the local_listener is currently
using?
9. You have 4 instances running on the same UNIX box. How can you determine which
shared memory and semaphores are associated with which instance?
10. What view(s) do you use to associate a user's SQLPLUS session with his o/s process?
11. What is the recommended interval at which to run statspack snapshots, and why?
12. What spfile/ file parameter exists to force the CBO to make the execution path of a
given statement use an index, even if the index scan may appear to be calculated as more costly?
13. Assuming today is Monday, how would you use the DBMS_JOB package to schedule
the execution of a given procedure owned by SCOTT to start Wednesday at 9AM and to run
subsequently every other day at 2AM.
14. How would you edit your CRONTAB to schedule the running of /test/ to run every
other day at 2PM?
15. What do the 9i _txt() and _text() procedures
do?
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. How would you begin to troubleshoot an ORA-3113 error?
21. Which dictionary tables and/or views would you look at to diagnose a locking issue?
22. An automatic job running via DBMS_JOB has failed. Knowing only that "it's failed",
how do you approach troubleshooting this issue?
23. How would you extract DDL of a table without using a GUI tool?
24. You're getting high "busy buffer waits" - how can you find what's causing it?
25. What query tells you how much space a tablespace named "test" is taking up, and how
much space is remaining?
26. Database is hung. Old and new user connections alike hang on impact. What do you do?
Your SYS SQLPLUS session IS able to connect.
27. 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.
28. Illustrate how to determine the amount of physical CPUs a Unix Box possesses
(LINUX and/or Solaris)。
29. How do you increase the OS limitation for open files (LINUX and/or Solaris)?
30. Provide an example of a shell script which logs into SQLPLUS as SYS, determines the
current date , changes the date format to include minutes & seconds , issues a drop table
command, displays the date again, and finally exits.
31. Explain how you would restore a database using RMAN to Point in Time?
32. How does Oracle guarantee data integrity of data changes?
33. Which environment variables are absolutely critical in order to run the OUI?
34. What SQL query from v$session can you run to show how many sessions are logged in as
a particular user account?
35. Why does Oracle not permit the use of PCTUSED with indexes?
36. What would you use to improve performance on an insert statement that places millions
of rows into that table?
37. What would you do with an "in-doubt" distributed transaction?
38. What are the commands you'd issue to show the explain plan for "select * from dual"?
39. In what script is "snap$" created? In what script is the "scott/tiger" schema created?
40. If you're unsure in which script a sys or system-owned object is created, but you know
it's in a script from a specific directory, what UNIX command from that directory structure can
you run to find your answer?
41. How would you configure your networking files to connect to a database by the name of
DSS which resides in domain ?
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
链接:
在这样一个清晨写下这样一个题目,是因为最近有越来越多的人问起我这个问题,我想还是
试着把我的想法写下来。
1.快速有多快?
很多人都喜欢寻找捷径,所以经常问起快速,但是我经常反复告诉大家的是,没有捷径,或
者说没有轻而易举的捷径可循。
当然快速两个字也是有意义的,这是这个快速的社会对于年轻人的要求,在《深入解析 Oracle》
一书的序言中,我写过这样一段话:随着技术以及时代的不断进步,社会留给 DBA 的成长
时间越来越短,一个 DBA 从入门到成长为资深的时间不会超过 2 年。。。。张爱玲说过,成
名要趁早。做技术的也是如此,成长越早越好,越快越好。
理解快速两个字的涵义,推荐仔细阅读我的《深入解析 Oracle》一书序言,这里总结了很多
我的学习经验和学习历程:
2.该读什么书?
Oracle 方面的书籍无疑已经是汗牛充栋了,那么在杂陈的书籍中,我们该读什么书来入门?
该读什么书来深入进阶呢?
我曾经推荐了几本书,并且我的观点是:书不在多,精读则灵。所以,认真细致的阅读对于
学习是必不可少的。
等你进入了 Oracle 的大门,然后怎么阅读,读什么,就完全可以自己把握了。
推荐阅读:书不在多,精读则灵 - Oracle 入门书籍推荐
3.如何获得成功?
无疑每个人都热切的期待成功,那么如何才能获得成功?
我曾经总结了一个简单的公式,罗列了我认为及其重要的成功因素:兴趣 + 勤奋 + 坚持 +
方法 ≈ 成功
如果你对数据库感兴趣,由兴趣推动学习,再加上勤奋的努力,坚持不懈的探索,找到合适
的方法,那么这就是你的快速学习之路,快速成功之路。
推荐阅读:
4.三种境界
关于境界,我在多篇文章中都谈到过,最早在《Oracle 数据库性能优化》一书的序言中我引
用了王国维的三种境界:
古今之成大事业、大学问者,罔不经过三种之境界。
"昨夜西风凋碧树。独上高楼,望尽天涯路。"此第一境界也。
"衣带渐宽终不悔,为伊消得人憔悴。"此第二境界也。
"众里寻他千百度,蓦然回首,那人却在灯火阑珊处。"此第三境界也。
这三种境界分别代表了,打下坚实的基础,不懈的坚持,峰回路转的提升,你在学习过程中,
一定会面对这样的阶段和情形,所以要有一定的思想准备,坚持不懈。
推荐阅读:
5.由点及面、深入浅出
在学习方法上,我主张由点及面、深入浅出,在《深入浅出 Oracle》一书的序言中,我这样
写道:
书中贯彻的也是我一直主张的"由点到线再及面"的学习方法。特别是对于初学者,如果
没有经过专门的培训和系统学习,那么自己通过实践的学习和思考就应当深入,在知识上,
从某个角度来说,是"不患寡,而患不精深"。在我们遇到问题时,就应该不断深入研究,直
至问题的核心本质,这样通过一个案例或实际问题的诊断学习和研究,我们就可以带动很多
连带知识的学习,这样从一个点深入下去就形成一条线,再横向扩展就可以形成一个知识网,
解决和研究的问题多了,就可以逐渐覆盖一个面,形成一个知识体系,这样慢慢的你就会觉
得学习不再困难,而是一件得心应手的事情。
推荐阅读:
6.工作机会
在工作选择上,如果能够快速进入 Oracle 的领域可能是幸运的,但是如果第一份工作没有
找到理想的位置,那么接下来的职业道路可能就会稍微曲折一些。
很多朋友在进行了一段时间的学习之后,对转型迫不及待甚至焦虑不堪,这是不对的,在工
作中应当切忌浮躁,我们每个人从毕业到工作、再到找到适合自己的位置,这通常都要经过
一个较长的时期,学习、思考、进步、再次出发,所以要知道有时候等待是过程的必须。
如果你手上已经有了一份工作,那你需要做的是,做好它,哪怕那不是你喜欢的!
你必须证明给别人看你有做好一件事情的能力,别人才会给你下一个机会,如果你从来没能
很好的完成一项任务,那你应该冷静的反省一下。
对于处在这样境地的朋友们,我有 16 个字可供借鉴:去除浮躁,认真学习,不断积累,寻
找机遇
推荐阅读:
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 的哪一部分?
答: 的 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.