Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1211423
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2007-12-24 12:41:04

DBA面试题答案,经过一定的整理
数据库切换日志的时候,为什么一定要发生检查点?这个检查点有什么意义?
Switch log checkpoint最主要是使当前redo log 状态由 current ==> Active ==> Inactive ,以备重用。
更直接点,当日志文件被覆盖的时候一定要确保相关dirty  buffer 一定被写入 数据文件, 所以日志的切换必须引起 检查点。
alter system set log_checkpoints_to_alert=TRUE;
然后你执行切换,就可以看到checkpoint的启动和结束时间

ACTIVE - It is needed for crash recovery. It may be in use for block recovery.

因为我们在切换日志的时候,就产生了 checkpoint,这就表示这个checkpoint以前的日志,在数据库重起时是不需要恢复的,那这个文档上为什么解释active是为了crash recovery????
==>check point没完成,cache里还有RBA处于那个active 的redo log中的 dirty buffer ,这时候,要是crash ,Instance recovery就需要这个redo log中的数据

如果说是因为切换后产生checkpoint,还没有执行完,这个日志文件暂时标记为active,但在很多情况下我看到有多组连续的日志文件是active的,难道这些都是checkpoint没有执行完造成的?
==>这个redo log 是active, 不影响别的redo log , 这就是为什么我们要求至少需要3组redo log 的原因了。
active的redo log不能被覆盖,其他的可以
不同的redo log,不会互相影响。
 
ORACLE不会保证这个checkpoint正常结束了才会在新的日志文件里面写日志。
Switch log 触发checkpoint ,当时并不需要等待 checkpoint完成。如果说 Switch log调用checkpoint ,那么,这是一个异步调用。

表空间管理方式有哪几种,各有什么优劣。
本地管理的主要优势是减少数据字典的争用,并且使得表空间的碎片减少。有自动分区和统一分区。一个位包含64kb。

本地索引与全局索引的差别与适用情况。
本地索引适用于sql语句种限定一个范围的查询比如时间之类的, 全局索引适用于在全部记录中查询,比如要查询一个手机号之类的。
全局索引总可能出现unused的情况,需要重建
==>
本地索引适合条件中包含partition key的,当然不是绝对
全局索引总可能出现unused的情况,通常我会问那该怎么办?
9i里面有update global index 的子句

一个表a varchar2(1),b number(1),c char(2),有100000条记录,创建B-Tree索引在字段a上,那么表与索引谁大?为什么?
索引大,原因是一个索引条目有一个rowid,rowid占6个字节,可以通过dump索引块看到结果。唯一索引条目rowid 5个字节,全局索引10个字节。

9i的data guard有几种模式,各有什么差别。
最大保护和最大性能模式,最大保护模式是主库一个事务提交后,必须等到dg完全同步才能提交成功;最大性能模式则不必这样。

执行计划是什么,查看执行计划一般有哪几种方式。
explain_plan,set autotrace,查讯v$sql_plan,一般后两种才能看到一个sql的实际执行计划

简单描述一下nest loop与hash join的差别。
nest loop 内循环:一般是连接表对驱动表的数据进行全表扫描引起,例如not in,<>之类的连接;
hash join 内连接:一般就是两个表的等值连接
一般来说nest loop只适合于少量的数据,内外表都不超过1000条。
hash join只要内存足够,hash join可以比任何连接都好,通常数据量很大的情况下都是用这种方法。

db file sequential read与db file scattered read等待的差别,如果以上等待比较多,证明了什么问题?
db file sequential read一般表示全范围索引扫描,db file scattered read就是全表扫描,如果这两种等待比较多表明对相关表没有建合适的索引

library cache pin与library cache lock是什么地方的等待事件,一般说明什么问题?
这个基本上没说到点上这两个latch主要是library cache中的object的组织方式是这样的,首先一个相当于头信息的handle,然后指向object具体的heap,library cache lock加在handle上,library cache pin则加在heap上,获得pin之前必须先获得对handle的锁定。这两种等待较多,一般是由于DDL引起的,比如重编译对象,授予/撤销权限等,这个pin可不是获得latch失败之后pin在cpu里的pin,这个pin就是latch一种,是名词
主要问题:
ddl比较多
语句严重的不绑定

在一个24*7的应用上,需要把一个访问量很大的1000万以上数据级别的表的普通索引(a,b)修改成唯一约束(a,b,c),你一般会选择怎么做,请说出具体的操作步骤与语句。
alter table big_table add constraint uk unique(a,b,c) using index ind_1 novalidate;

如果一个linux上的oracle数据库系统突然变慢,你一般从哪里去查找原因。
(1) top 一下 , 找到相应session ,跟踪该session ,结合 autotrace ,sql_trace, dbms_system.set_sql_trace_in_session(sid,serial#,true) 等应用优化工具
(2) v$session_wait , 找出等待事件
(3)v$sql,v$sqlarea 找出性能不好的sql等
(4),作statspack , 分析
能加上vmstat , iostat就更好了

说明一下对raid5与raid01/10的认识。
raid5是对硬盘进行条带化管理,需要拿一个盘出来保存校验信息,既增强了硬盘的I/0性能,又使得在某个硬盘(非校验盘)crash的时候可以完全恢复;
raid0拥有最高的I/O性能,但是不能进行灾难恢复;raid1就是两个硬盘的完全镜像,有最大的可靠性。
raid10就是raid0和raid1地结合。
redo log 不能 in raid5
列举5个10g的新特性
1.rename tablespace
2.新的em
3.asm
4.bigfile tablespace
5.真正的增量rman
6.flashback table
7.expdp、impdp
8.shrink
阅读(853) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~