Oracle 面试题总结

1,181 阅读2分钟

1. 如何监控Oracle 的运行状况?

1.1 主动监控Oracle的

1.1.1 默认启动的报警

1.1.2 性能自检

2. 如何对Oracle 进行优化?

2.1 定位性能问题

2.2 使用Advisors 优化数据库性能

  • SQL Tunning Advisor
  • SQL Access Advisor
  • Memory Advisor

2.3 慢查询分析

2.3.1 V$SQLAREA 和 V$SQL (没有Group By)

主要记录SQL执行过程中的信息。根据SQL_FULLTEXT进行Group By

列名 数据类型 描述
SQL_TEXT VARCHAR2(1000) SQL 前1000个字符
SQL_FULLTEXT CLOB SQL全部内容
RUNTIME_MEM NUMBER 运行时消耗的内存
SORTS NUMBER 排序数总和
EXECUTIONS NUMBER 总的执行次数
DISK_READS NUMBER 所有子指针的Disk Reads 读硬盘次数总和
BUFFER_GETS NUMBER 所有子指针 拿到的buffer 数
CPU_TIME NUMBER CPU 消耗时间
ELAPSED_TIME NUMBER 执行的消耗时间(parsing,executing,fetching)
SQL_ID NUMBER 用于标示SQL的唯一

3. 如何实现Oracle 的高可用?

4. 如何实现Oracle 的数据一致性?

5. Oracle 的锁机制

6. 数据库的索引

6.1 有哪些索引

1. B* 树索引

create index index_sno on student('sno');		

就是传统的索引。有以下子类型:

  • 索引组织表

    按主键的顺序存储和排序。

  • B* 树聚族索引

    对聚族键建立索引,一个聚族键指向一个块。

  • 降序索引

    按从大到小的顺序排序

  • 反向键索引

    键中的字节会反转。

2. 位图索引

create bitmap index index_sno on student(sno)		

一个索引条目使用一个位图指向多行,而不是一对一。

3. 位图联结索引

4. 基于函数的索引

create index fbi on student(uper(name));
select * from student where upper(name) ='WISH';

一个虚拟列上的索引。(把一个函数计算得到的结果存储在列中)

6.2 什么时候用这些索引

1. 什么情况下使用B*树索引?

  • 访问表中的行,很少的一部分
  • 回答一个查询

2. 什么情况下使用位图索引

  • 相异基数小的列适用位图索引。例如性别

3. 什么情况下使用函数索引

  • 经常访问的一些函数或者表达式。
  • 函数索引既可以使用B*索引也可以使用位图索引。
  • 函数索引可以使用len,trim,substr,upper , 不能使用 sum max min avg

6.3 在哪些列上面建索引