Oracle数据库笔试题(附答案)_oracle 笔试题目

Oracle数据库笔试题(附答案)

2008年04月25日 星期五 19:48

  1. 数据库切换日志的时候,为什么一定要发生检查点?这个检查点有什么意义?答:触发dbwr的执行,dbwr会把和这个日志相关的所有脏队列写到数据文件里,缩短实例恢复所需要的时间。
  2. 表空间管理方式有哪几种,各有什么优劣。答:字典管理方式和本地管理方式,本地管理方式采用位图管理extent,减少字典之间的竞争,同时避免了碎片。
    本地管理表空间与字典管理表空间相比,其优点如下: 1).减少了递归空间管理;2).系统自动管理extents大小或采用统一extents大小;3).减少了数据字典之间的竞争;4).不产生回退信息;5).不需合并相邻的剩余空间;6).减少了空间碎片;7).对临时表空间提供了更好的管理。
  3. 本地索引与全局索引的差别与适用情况。答:对于local索引,每一个表分区对应一个索引分区,当表的分区发生变化时,索引的维护由Oracle自动进行。对于global索引,可以选择是否分区,而且索引的分区可以不与表分区相对应。当对分区进行维护操作时,通常会导致全局索引的INVALDED,必须在执行完操作后REBUILD。Oracle9i提供了UPDATE GLOBAL INDEXES语句,可以使在进行分区维护的同时重建全局索引。
  4. 一个表a varchar2(1),b number(1),c char(2),有100000条记录,创建B-Tree索引在字段a上,那么表与索引谁大?为什么?答:这个要考虑到rowid所占的字节数,假设char总是占用2字节的情况,比较rowid,另外,table和index在segment free block的管理也有差别。
  5. Oracle9i的data guard有几种模式,各有什么差别。答:三种模式:最大性能(maximize performance):这是data guard默认的保护模式。primay上的事务commit前不需要从standby上收到反馈信息。该模式在primary故障时可能丢失数据,但standby对primary的性能影响最小。最大可用(maximize availability):在正常情况下,最大可用模式和最大保护模式一样;在standby不可用时,最大可用模式自动最大性能模式,所以standby故障不会导致primay不可用。只要至少有一个standby可用的情况下,即使primarydown机,也能保证不丢失数据。最大保护(maximize protection):最高级别的保护模式。primay上的事务在commit前必须确认redo已经传递到至少一个standby上,如果所有standby不可用,则primary会挂起。该模式能保证零数据丢失。
  6. 执行计划是什么,查看执行计划一般有哪几种方式。答:执行计划是数据库内部的执行步骤:set autotrace onselect * from tablealter session set event '10046 trace name context forever,level 12 ';SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION=(SID,SERIAL#,TRUE);一般采用pl/sql developer,再加个explain plan , v$sql_plan.
  7. 简单描述一下nest loop与hash join的差别。答:nest loop适用于返回结果比较小的情况。for in 1…n loop对小表进行遍历根据小表的结果遍历大表(大表需要索引)end loophash join适用在返回大结果集的情况。
  8. db file sequential read与db file scattered read等待的差别,如果以上等待比较多,证明了什么问题?答:db file sequential read-DB文件顺序读取,这一事件通常显示与单个数据块相关的读取操作(如索引读取)。如果这个等待事件比较显著,可能表示在多表连接中,表的连接顺序存在问题,可能没有正确的使用驱动表;或者可能说明不加选择地进行索引。在大多数情况下我们说,通过索引可以更为快速的获取记录,所以对于一个编码规范、调整良好的数据库,这个等待很大是很正常的。但是在很多情况下,使用索引并不是最佳的选择,比如读取较大表中大量的数据,全表扫描可能会明显快于索引扫描,所以在开发中我们就应该注意,对于这样的查询应该进行避免使用索引扫描。 db file sequential read-DB檔分散读取,这种情况通常显示与全表扫描相关的等待。当数据库进行全表扫时,基于性能的考虑,数据会分散(scattered)读入Buffer Cache。如果这个等待事件比较显著,可能说明对于某些全表扫描的表,没有创建索引或者没有创建合适的索引,我们可能需要检查这些数据表已确定是否进行了正确的设置。然而这个等待事件不一定意味着性能低下,在某些条件下Oracle 会主动使用全表扫描来替换索引扫描以提高性能,这和访问的数据量有关,在CBO 下Oracle 会进行更为智能的选择,在RBO 下Oracle 更倾向于使用索引。当这个等待事件比较显著时,可以结合v$session_longops 动态性能视图来进行诊断,该视图中记录了长时间(运行时间超过6 秒的)运行的事物,可能很多是全表扫描操作(不管怎样,这部分信息都是值得我们注意的)。
  9. library cache pin与library cache lock是什么地方的等待事件,一般说明什么问题?答:"LIBRARY CACHE PIN"通常是发生在编译或重新编译PL/SQL,VIEW,TYPES等object时.
  10. 在一个24*7的应用上,需要把一个访问量很大的1000万以上数据级别的表的普通索引(a,b)修改成唯一约束(a,b,c),你一般会选择怎么做,请说出具体的操作步骤与语句。答:不能确定,是否可以采用先建索引后建约束:create index idx_w1 on w_1 (a,b,c) online ;alter table w_1 add constraint uni_w1 unique (a,b,c) novalidate;
  11. 如果一个linux上的oracle数据库系统突然变慢,你一般从哪里去查找原因。答:1).用vmstat,iostat命令查看系统的负载(I/O读写是否严重,CPU是否空闲).   2).用top工具查看有哪些进程CPU占用率高;   3). 查询v s e s s i o n _ w a i t 和 v session\_wait和v session_waitvsystem_event数据字典,找出当前比较严重的等待事件,并试图优化影响性能的SQL语句。
  12. 说明一下对raid5与raid01/10的认识。答:raid5采用校验信息,硬盘的利用率n-1/n, 以RAID5(4D+P)为例子来讲,使用4块磁盘存放数据位,使用1块磁盘存放校验位。其基本原理是这样的:根据条带化的数据4D(使用四位数据)生成一位的校验信息,存放在第五块磁盘中。raid10先采用先镜像在进行条带化,是最高效的硬盘利用方式,硬盘的利用率50%,是一个Raid 0与Raid1的组合体,它是利用奇偶校验实现条带集镜像,所以它继承了Raid0的快速和Raid1的安全。
  13. 列举5个10g的新特性.答:1).自动共享内存(SGA)管理2).自动存储管理(ASM)3).ADDM和查询优化器4).闪回表(flashback table)5).Data Pump(expdp、impdp)
    |
### 数据库笔试题目与复习资料 #### 关于数据库基础知识 对于数据库相关的笔试题和复习资料,可以从基础概念入手。例如,在多对多关系的处理上,通常会涉及如何通过关联表来解决实际问题[^2]。这种知识点不仅限于理论层面的理解,还需要掌握具体的SQL语句编写方法。 以下是几个常见的数据库笔试考点: 1. **数据模型** 数据库设计中的三种主要模型分别是层次型、网状型以及关系型。其中,关系型数据库是最常用的,其核心在于表格结构的设计及其之间的联系。 2. **范式化原则** 数据库规范化是为了减少冗余并提高一致性而制定的一系列规则。第一至第三范式的理解尤为重要,它们分别解决了重复列、部分依赖和传递依赖等问题。 3. **索引机制** 索引能够显著提升查询效率,但也会增加存储空间需求及写入操作的时间成本。B树是一种广泛应用于数据库系统的高效索引结构。 4. **事务管理** ACID属性(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)是评估事务质量的重要标准。了解这些特性的具体含义有助于应对复杂的并发场景下的问题解答。 5. **SQL优化技巧** 编写出高效的SQL语句是一项基本技能。这包括合理使用JOIN语句连接不同表的数据;利用EXPLAIN命令分析执行计划从而找出性能瓶颈所在之处等等。 #### 实际应用案例解析 假设存在如下情况——某学校希望记录每位学生的选课信息,则可以通过建立三张表来完成这一任务:`students` (学生基本信息), `courses` (课程详情),还有一个作为中介角色存在的`enrollments`(注册记录) 。每条报名记录都应包含对应的学生id 和课程 id ,这样便实现了上述提到过的多对多功能。 ```sql CREATE TABLE students ( student_id INT PRIMARY KEY, name VARCHAR(100), age INT ); CREATE TABLE courses ( course_id INT PRIMARY KEY, title VARCHAR(100), credits INT ); CREATE TABLE enrollments ( enrollment_id INT PRIMARY KEY, student_id INT, course_id INT, FOREIGN KEY(student_id) REFERENCES students(student_id), FOREIGN KEY(course_id) REFERENCES courses(course_id) ); ``` 以上代码片段展示了如何构建一个多对多的关系模式,并且明确了各个字段的作用范围。 #### 总结建议 为了更好地备考数据库方面的考试或者积累经验,除了熟悉课本上的定义之外,还应该注重实践练习。正如之前所言,“背诵”虽然重要,但是真正理解和灵活运用才是关键[^1]。平时可以尝试参与一些开源项目贡献自己的力量,亦或是模仿真实业务流程搭建小型应用程序来进行模拟训练。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值