阿里巴巴笔试题及答案

阿里巴巴笔试题及答案

【范文精选】阿里巴巴笔试题及答案

【范文大全】阿里巴巴笔试题及答案

【专家解析】阿里巴巴笔试题及答案

【优秀范文】阿里巴巴笔试题及答案

范文一:阿里巴巴的OracleDBA笔试题答案

阿里巴巴的Oracle DBA笔试题答案-SQL tuning类

2011 - 08 - 09 更新

SQL tuning类参考解答:

一:SQL tuning 类

1:列举几种表连接方式

程序代码

hash join/merge join/nest loop(cluster join)/index join

2:不借助第三方工具,怎样查看sql的执行计划

程序代码

set autot on

explain plan set statement_id = &item_id for &sql;

select * from table(dbms_xplan.display);

http://download-west.oracle.com/ … /b10752/ex_plan.htm

3:如何使用CBO,CBO与RULE的区别

在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目, 然后选择最佳级别(最少的数量)的执行路径来运行查询。

CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。

4:如何定位重要(消耗资源多)的SQL

程序代码

select sql_text

from v$sql

where disk_reads> 1000 or (executions > 0 and buffer_gets/executions > 30000);

5:如何跟踪某个session的SQL

程序代码

exec dbms_system.set_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 dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,”);

6:SQL调整最关注的是什么

查看该SQL的response time(db block gets/consistent gets/physical reads/sorts (disk))

7:说说你对索引的认识(索引的结构、对dml影响、为什么提高查询性能)

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:如何稳定(固定)执行计划

程序代码

query_rewrite_enabled = true

star_transformation_enabled = true

optimizer_features_enable = 9.2.0

创建并使用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 optimizer.

oracle 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.

Creating Outlines:

http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14211/outlines.htm

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,dbms_random.value(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

minus

select * from (select * from test order by c desc) y where rownum

相比之 minus性能较差

范文二:阿里巴巴OracleDBA笔试题及答案

阿里巴巴的Oracle DBA笔试题及参考答案 - 数据库基本概念类。

1:pctused and pctfree 表示什么含义有什么作用

pctused与pctfree控制数据块是否出现在freelist中,

pctfree控制数据块中保留用于update的空间,当数据块中的free space小于pctfree设置的空间时,

该数据块从freelist中去掉,当块由于dml操作free space大于pct_used设置的空间时,该数据库块将

被添加在freelist链表中。

2:简单描述table / segment / extent / block之间的关系

table创建时,默认创建了一个data segment,

每个data segment含有min extents指定的extents数,

每个extent据据表空间的存储参数分配一定数量的blocks

3:描述tablespace和datafile之间的关系

一个tablespace可以有一个或多个datafile,每个datafile只能在一个tablespace内, table中的数据,通过hash算法分布在tablespace中的各个datafile中,

tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。

4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点

本地管理表空间(Locally Managed Tablespace简称LMT)

8i以后出现的一种新的表空间的管理模式,通过位图来管理表空间的空间使用。 字典管理表空间(Dictionary-Managed Tablespace简称DMT)

8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用。

动段空间管理(ASSM),

它首次出现在Oracle920里有了ASSM,链接列表freelist被位图所取代,它是一个二进制的数组,

能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质, ASSM表空间上创建的段还有另外一个称呼叫Bitmap Managed Segments(BMB 段)。 5:回滚段的作用是什么

事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,

当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中, ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。

读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。 当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)

当ORACLE执行Select语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)

来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,

若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。

6:日志的作用是什么

记录数据库事务,最大限度地保证数据的一致性与安全性

重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件

归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

7:SGA主要有那些部分,主要作用是什么

SGA:db_cache/shared_pool/large_pool/java_pool

db_cache:

数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着非常关键的作用,

它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库通过使用LRU 算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问.

shared_pool:

共享池的大小对于Oracle 性能来说都是很重要的。

共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL 块和SQL 语句及控制结构

large_pool:

使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存

使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器 java_pool:

为java procedure预备的内存区域,如果没有使用java proc,java_pool不是必须的 8 oracle系统进程主要有哪些,作用是什么

数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件 日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件

系统监控(smon) :检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

进程监控(pmon) :负责在一个Oracle 进程失败时清理资源

检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

归档进程(arcn) :在每次日志切换时把已满的日志组进行备份或归档

作业调度器(cjq) :负责将调度与执行系统中已定义好的job,完成一些预定义的工作. 恢复进程(reco) :保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback

一份DBA试题

注:以下题目,可根据自己情况挑选题目作答,不必全部作答您也可以就相关问题直接找负责面试人员面述而不笔答

一:SQL tuning 类

1:列举几种表连接方式

hash join/merge join/nest loop(cluster join)/index join

2:不借助第三方工具,怎样查看sql的执行计划

set autot on

explain plan set statement_id = &item_id for &sql;

select * from table(dbms_xplan.display); http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10752/ex_plan.htm

3:如何使用CBO,CBO与RULE的区别

在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。

RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目,

然后选择最佳级别(最少的数量)的执行路径来运行查询。

CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同

的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。

4:如何定位重要(消耗资源多)的SQL

select sql_text

from v$sql

where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);

5:如何跟踪某个session的SQL

exec dbms_system.set_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 dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,''); 6:SQL调整最关注的是什么

查看该SQL的response time(db block gets/consistent gets/physical reads/sorts (disk))

7:说说你对索引的认识(索引的结构、对dml影响、为什么提高查询性能) b-tree index/bitmap index/function index/patitional index(local/global) 索引通常能提高select/update/delete的性能,会降低insert的速度,

8:使用索引查询一定能提高查询的性能吗?为什么

索引就是为了提高查询性能而存在的,

如果在查询中索引没有提高性能,

只能说是用错了索引,或者讲是场合不同

9:绑定变量是什么?绑定变量有什么优缺点?

绑定变量是相对文本变量来讲的,所谓文本变量是指在SQL直接书写查询条件, 这样的SQL在不同条件下需要反复解析,绑定变量是指使用变量来代替直接书写条件,

查询bind value在运行时传递,然后绑定执行。

如果排序操作不能在sort_area_size中完成,就会用到temp表空间

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(8),b number(8),c number(8),d number(8)); /

begin

for i in 1 .. 300 loop

insert into t values(mod(i,2),i/2,dbms_random.value(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

select * from (select * from test order by c desc) y where rownum

相比之 minus性能较差

二:数据库基本概念类

1:pctused and pctfree 表示什么含义有什么作用

pctused与pctfree控制数据块是否出现在freelist中,

pctfree控制数据块中保留用于update的空间,当数据块中的free space小于pctfree设置的空间时,

该数据块从freelist中去掉,当块由于dml操作free space大于pct_used设置的空间时,该数据库块将

能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质,

ASSM表空间上创建的段还有另外一个称呼叫Bitmap Managed Segments(BMB 段)。

5:回滚段的作用是什么

事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,

当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,

ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。 读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。

当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)

当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)

来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,

若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。 http://www.itpub.net/showthread.php?s=&threadid=10190&highlight=%BB%D8%B9%F6%B6%CE%B5%C4%D7%F7%D3%C3

6:日志的作用是什么

记录数据库事务,最大限度地保证数据的一致性与安全性

重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件

归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。 http://www.cnoug.org/viewthread.php?tid=17741&highlight=%C8%D5%D6%BE

7:SGA主要有那些部分,主要作用是什么

SGA:db_cache/shared_pool/large_pool/java_pool

db_cache:

数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着非常关键的作用,

它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库通过使用LRU

算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问. shared_pool:

共享池的大小对于Oracle 性能来说都是很重要的。

共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL 块和SQL 语句及控制结构

large_pool:

使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存

使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器

java_pool:

为java procedure预备的内存区域,如果没有使用java proc,java_pool不是必须的

8:oracle系统进程主要有哪些,作用是什么

数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件 日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件

系统监控(smon) :检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

进程监控(pmon) :负责在一个Oracle 进程失败时清理资源

检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

归档进程(arcn) :在每次日志切换时把已满的日志组进行备份或归档

作业调度器(cjq) :负责将调度与执行系统中已定义好的job,完成一些预定义的工作.

恢复进程(reco) :保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;

三:备份恢复类

1:备份如何分类

逻辑备份:exp/imp

物理备份:

RMAN备份

full backup/incremental backup(累积/差异)

热备份:alter tablespace begin/end backup;

冷备份:脱机备份(database shutdown)

2:归档是什么含义

关于归档日志:Oracle要将填满的在线日志文件组归档时,则要建立归档日志(archived redo log)。

其对数据库备份和恢复有下列用处:

数据库后备以及在线和归档日志文件,在操作系统和磁盘故障中可保证全部提交的事物可被恢复。

在数据库打开和正常系统使用下,如果归档日志是永久保存,在线后备可以进行和使用。

数据库可运行在两种不同方式下:

NOARCHIVELOG方式或ARCHIVELOG 方式

数据库在NOARCHIVELOG方式下使用时,不能进行在线日志的归档,

如果数据库在ARCHIVELOG方式下运行,可实施在线日志的归档。

3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复?

手工拷贝回所有备份的数据文件

sql>startup mount;

sql>alter database recover automatic until time '2004-08-04:10:30:00'; sql>alter database open resetlogs;

4:rman是什么,有何特点?

RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库,

RMAN 可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。

RMAN有三种不同的用户接口:

COMMAND LINE方式、GUI 方式(集成在OEM 中的备份管理器)、API 方式(用于集成到第三方的备份软件中)。

具有如下特点:

1)功能类似物理备份,但比物理备份强大N倍;

2)可以压缩空块;

3)可以在块水平上实现增量;

4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;

5)备份与恢复的过程可以自动管理;

6)可以使用脚本(存在Recovery catalog 中)

7)可以做坏块监测

9i中的三种数据保护模式分别是:

1)、MAXIMIZE PROTECTION :最大数据保护与无数据分歧,LGWR将同时传送到备用节点,

在主节点事务确认之前,备用节点也必须完全收到日志数据。如果网络不好,引起LGWR不能传送数据,将引起严重的性能问题,导致主节点DOWN机。

2)、MAXIMIZE AVAILABILITY :无数据丢失模式,允许数据分歧,允许异步传送。 正常情况下运行在最大保护模式,在主节点与备用节点的网络断开或连接不

正常时,自动切换到最大性能模式,

主节点的操作还是可以继续的。在网络不好的情况下有较大的性能影响。

3)、MAXIMIZE PERFORMANCE:这种模式应当可以说是从8i继承过来的备用服务器模式,异步传送,

无数据同步检查,可能丢失数据,但是能获得主节点的最大性能。9i在配置DATA GUARD的时候默认就是MAXIMIZE PERFORMANCE

6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略

rman/每月一号 level 0 每周末/周三 level 1 其它每天level 2

四:系统管理类

1:对于一个存在系统性能的系统,说出你的诊断处理思路

1 做statspack收集系统相关信息

了解系统大致情况/确定是否存在参数设置不合适的地方/查看top 5 event/查看top sql等

2 查v$system_event/v$session_event/v$session_wait

从v$system_event开始,确定需要什么资源(db file sequential read)等 深入研究v$session_event,确定等待事件涉及的会话

从v$session_wait确定详细的资源争用情况(p1-p3的

值:file_id/block_id/blocks等)

3 通过v$sql/v$sqltext/v$sqlarea表确定disk_reads、

(buffer_gets/executions)值较大的SQL

2:列举几种诊断IO、CPU、性能状况的方法

top/vmstat

statspack

sql_trace/tkprof

查v$system_event/v$session_event/v$session_wait

查v$sqlarea(disk_reads或buffer_gets/executions较大的SQL) 3:对statspack有何认识

StapSpack是Oracle公司提供的一个收集数据库运行性能指标的软件包,该软件包从8i起,在9i、10g都有显著的增强

该软件包的辅助表(存储相关参数与收集的性能指标的表)由最初的25个增长到43个

收集级别参数由原来的3个(0、5、10)增加到5个(0、5、6、7、10) 通过分析收集的性能指标,数据库管理员可以详细地了解数据库目前的运行情况,对数据库实例、等待事件、SQL等进行优化调整

利用statspack收集的snapshot,可以统计制作数据库的各种性能指标的统计趋势图表。

4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响

在系统比较空闲时

nologging选项(如果有dataguard则不可以使用nologging)

大的sort_ared_size或pga_aggregate_target较大

5:对raid1+0 和raid5有何认识

RAID 10(或称RAID 1+0)与RAID 0+1不同,它是用硬盘驱动器先组成RAID 1阵列,然后在RAID 1阵列之间再组成RAID 0阵列。

RAID 10模式同RAID 0+1模式一样具有良好的数据传输性能,但却比RAID 0+1具有更高的可靠性。RAID 10阵列的实际容量为M×n/2,

磁盘利用率为50%。RAID 10也需要至少4个硬盘驱动器构成,因而价格昂贵。 RAID 10的可靠性同RAID 1一样,但由于RAID 10硬盘驱动器之间有数据分割,因而数据传输性能优良。

RAID 5与RAID 3很相似,不同之处在于RAID 5的奇偶校验信息也同数据一样被分割保存到所有的硬盘驱动器,

而不是写入一个指定的硬盘驱动器,从而消除了单个奇偶校验硬盘驱动器的瓶颈问题。RAID 5磁盘阵列的性能比RAID 3有所提高,

但仍然需要至少3块硬盘驱动器。其实际容量为M×(n-1),磁盘利用率为(n-1)/n 。

五:综合随意类

1:你最擅长的是oracle哪部分?

pl/sql及sql优化

2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?

喜欢,sql的优化

3:随意说说你觉得oracle最有意思的部分或者最困难的部分

latch free的处理

4:为何要选择做DBA呢?

兴趣所在

范文三:阿里巴巴笔试题答案

第一题选C,不解释吧,按位与就行

第二题选D,不解释,2*3*sizeof(int*)=48(64位机器上是8字节一个指针)

第三题选C,我不确定,不过,应该是的

第四题选D,明显考的是补码

第5题选D,果断访问错误(这是Java的代码)

第6题选B,大家都懂

第7题果断A啊

第8题果断是B,不解释,大家懂

第9题是B,’0’不是’\0’,这个要注意

第10题果断是Fibonacci,显然是C,前几个是0,1,2,3,5,8,13,21

第11题选B,计算量是2^35,现在计算机的主频是2^30,所以差不多是几秒的事

第12题是B,显然有n=4N1+3N3+2N2+N1+1=N4+n3+n2+n1,所以N0=82,不解释

第13题果断是D,这个老题目了,不解释

第14题是C,二分查找嘛,大家都会,不解释

第15题是Fulkerson算法,算出来是46,每一次选一个增广路径即可,直接选不出来为止

第16题选185,显然,它给了120块钱(楼主二了)和一个物品(值65元),所以亏损185 这个题目楼主是这样想的,结果二了

第17题是2,不解释Fermart小定理,2^6 mod 7= 1,所以2^100=2^4=16=2 mod 7

第18题,我觉得是B,不知道对不对,这个不会

第19题,算得不太精细,选了A,不确定。

第20题C,概率与级数运算,不解释

第21题,果断B,D,malloc,new申请到的是Virtual Memory,不过,windows里面还真可以申请到物理内存,用的是VirtualAllocEx API即可

第22题B,C肯定对,D不确定,感觉是对的,不过,没敢选

第23题,其实就是解n^14

第24题,D,因为选出第一个是白的,所以位于A的概率是2/3

第25,不可能,需要2.8*10^8 bit,而蓝牙只能传2.4*10^7bit所以一帧需要0.2S

第26题(mnlogn)不解释,归并而已

第27题显然是17分钟

第28,错两个地方1,没考虑只有一个数,2,可能死循环(给你数组0,2,3让查找1) 楼主两个都想到了,写的时候忘记了写1,悲剧

第29题,果断SkipList,地球人懂的O(PLogpN)

范文四:阿里巴巴公司DBA笔试题及参考答案以下题目

阿里巴巴公司DBA笔试题及参考答案

以下题目,可根据自己情况挑选题目作答,不必全部作答.您也可以就相关问题直接找负责面试人员面述而不笔答……

一:SQL tuning 类

1:列举几种表连接方式

2:不借助第三方工具,怎样查看sql的执行计划

3:如何使用CBO,CBO与RULE的区别

4:如何定位重要(消耗资源多)的SQL

5:如何跟踪某个session的SQL

6:SQL调整最关注的是什么

7:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)

8:使用索引查询一定能提高查询的性能吗?为什么

9:绑定变量是什么?绑定变量有什么优缺点?

10:如何稳定(固定)执行计划

11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么

12:存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql

二:数据库基本概念类

1:pctused and pctfree 表示什么含义有什么作用

2:简单描述table / segment / extent / block之间的关系

3:描述tablespace和datafile之间的关系

4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点

5:回滚段的作用是什么

6:日志的作用是什么

7:SGA主要有那些部分,主要作用是什么

8racle系统进程主要有哪些,作用是什么

三:备份恢复类

1:备份如何分类

2:归档是什么含义

3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复

4:rman是什么,有何特点

5:standby的特点

6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略

四:系统管理类

1:对于一个存在系统性能的系统,说出你的诊断处理思路

2:列举几种诊断IO、CPU、性能状况的方法

3:对statspack有何认识

4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响

5:对raid10 和raid5有何认识

五:综合随意类

1:你最擅长的是oracle哪部分?

2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?

3:随意说说你觉得oracle最有意思的部分或者最困难的部分

4:为何要选择做DBA呢?

一:SQL tuning 类

1:列举几种表连接方式

hash join/merge join/nest loop(cluster join)/index join

2:不借助第三方工具,怎样查看sql的执行计划

set autot on

explain plan set statement_id = &item_id for &sql;

select * from table(dbms_xplan.display);

http://download-west.oracle.com/ ... /b10752/ex_plan.htm

3:如何使用CBO,CBO与RULE的区别

在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目, 然后选择最佳级别(最少的数量)的执行路径来运行查询。

CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同 的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。

4:如何定位重要(消耗资源多)的SQL

select sql_text

from v$sql

where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);

5:如何跟踪某个session的SQL

exec dbms_system.set_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 dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,'');

6:SQL调整最关注的是什么

查看该SQL的response time(db block gets/consistent gets/physical reads/sorts (disk))

7:说说你对索引的认识(索引的结构、对dml影响、为什么提高查询性能)

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:如何稳定(固定)执行计划

query_rewrite_enabled = true

star_transformation_enabled = true

optimizer_features_enable = 9.2.0

创建并使用stored outline

http://download-west.oracle.com/ ... /outlines.htm#26854

11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么

8i中sort_area_size/sort_area_retained_size决定了排序所需要的内存

如果排序操作不能在sort_area_size中完成,就会用到temp表空间

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,dbms_random.value(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

相比之 minus性能较差

数据库基本概念类

1:pctused and pctfree 表示什么含义有什么作用

pctused与pctfree控制数据块是否出现在freelist中,

pctfree控制数据块中保留用于update的空间,当数据块中的free space小于pctfree设置的空间时,

该数据块从freelist中去掉,当块由于dml操作free space大于pct_used设置的空间时,该数据库块将

被添加在freelist链表中。

2:简单描述table / segment / extent / block之间的关系

table创建时,默认创建了一个data segment,

每个data segment含有min extents指定的extents数,

每个extent据据表空间的存储参数分配一定数量的blocks

3:描述tablespace和datafile之间的关系

一个tablespace可以有一个或多个datafile,每个datafile只能在一个tablespace内,

table中的数据,通过hash算法分布在tablespace中的各个datafile中,

tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。

4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点

本地管理表空间(Locally Managed Tablespace简称LMT)

8i以后出现的一种新的表空间的管理模式,通过位图来管理表空间的空间使用。

字典管理表空间(Dictionary-Managed Tablespace简称DMT)

8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用。

动段空间管理(ASSM),

它首次出现在Oracle920里有了ASSM,链接列表freelist被位图所取代,它是一个二进制的数组,

能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质,

ASSM表空间上创建的段还有另外一个称呼叫Bitmap Managed Segments(BMB 段)。

5:回滚段的作用是什么

事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,

当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,

ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。

读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。

当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)

当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)

来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,

若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。

6:日志的作用是什么

记录数据库事务,最大限度地保证数据的一致性与安全性

重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件 归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

7:SGA主要有那些部分,主要作用是什么

SGA:db_cache/shared_pool/large_pool/java_pool

db_cache:

数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着非常关键的作用,

它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库通过使用LRU

算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问.

shared_pool:

共享池的大小对于Oracle 性能来说都是很重要的。

共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL 块和SQL 语句及控制结构

large_pool:

使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存

使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器

java_pool:

为java procedure预备的内存区域,如果没有使用java proc,java_pool不是必须的

8 Oracle系统进程主要有哪些,作用是什么

数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件

日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件

系统监控(smon) :检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

进程监控(pmon) :负责在一个Oracle 进程失败时清理资源

检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。 归档进程(arcn) :在每次日志切换时把已满的日志组进行备份或归档

作业调度器(cjq) :负责将调度与执行系统中已定义好的job,完成一些预定义的工作.

恢复进程(reco) :保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;

备份恢复类

1:备份如何分类

逻辑备份:exp/imp

物理备份:

RMAN备份

full backup/incremental backup(累积/差异)

热备份:alter tablespace begin/end backup;

冷备份:脱机备份(database shutdown)

2:归档是什么含义

关于归档日志:Oracle要将填满的在线日志文件组归档时,则要建立归档日志(archived redo log)。

其对数据库备份和恢复有下列用处:

数据库后备以及在线和归档日志文件,在操作系统和磁盘故障中可保证全部提交的事物可被恢复。

在数据库打开和正常系统使用下,如果归档日志是永久保存,在线后备可以进行和使用。

数据库可运行在两种不同方式下:

NOARCHIVELOG方式或ARCHIVELOG 方式数据库在NOARCHIVELOG方式下使用时,不能进行在线日志的归档,如果数据库在ARCHIVELOG方式下运行,可实施在线日志的归档。3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复?

手工拷贝回所有备份的数据文件

startup mount;

sql alter database recover automatic until time '2004-08-04:10:30:00';

alter database open resetlogs;

4:rman是什么,有何特点?

RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库, RMAN 可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。RMAN有三种不同的用户接口:

COMMAND LINE方式、GUI 方式(集成在OEM 中的备份管理器)、API 方式(用于集成到第三方的备份软件中)。

具有如下特点:

1)功能类似物理备份,但比物理备份强大N倍;

2)可以压缩空块;

3)可以在块水平上实现增量;

4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;

5)备份与恢复的过程可以自动管理;

6)可以使用脚本(存在Recovery catalog 中)

7)可以做坏块监测

5:standby的特点

备用数据库(standby database):ORACLE推出的一种高可用性(HIGH AVAILABLE)数据库方案,

在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份

可以实现快速切换与灾难性恢复,从920开始,还开始支持物理与逻辑备用服务器。

9i中的三种数据保护模式分别是:

1)、MAXIMIZE PROTECTION :最大数据保护与无数据分歧,LGWR将同时传送到备用节点,

在主节点事务确认之前,备用节点也必须完全收到日志数据。如果网络不好,引起LGWR不能传送数据,将引起严重的性能问题,导致主节点DOWN机。

2)、MAXIMIZE AVAILABILITY :无数据丢失模式,允许数据分歧,允许异步传送。

正常情况下运行在最大保护模式,在主节点与备用节点的网络断开或连接不正常时,自动切换到最大性能模式,

主节点的操作还是可以继续的。在网络不好的情况下有较大的性能影响。

3)、MAXIMIZE PERFORMANCE:这种模式应当可以说是从8i继承过来的备用服务器模式,异步传送,

无数据同步检查,可能丢失数据,但是能获得主节点的最大性能。9i在配置DATA GUARD的时候默认就是MAXIMIZE PERFORMANCE

6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略

rman/每月一号 level 0 每周末/周三 level 1 其它每天level 2

四:系统管理类

对于一个存在系统性能的系统,说出你的诊断处理思路

1 做statspack收集系统相关信息

了解系统大致情况/确定是否存在参数设置不合适的地方/查看top 5 event/查看top sql等

2 查v$system_event/v$session_event/v$session_wait

从v$system_event开始,确定需要什么资源(db file sequential read)等

深入研究v$session_event,确定等待事件涉及的会话

从v$session_wait确定详细的资源争用情况(p1-p3的值:file_id/block_id/blocks等)

3 通过v$sql/v$sqltext/v$sqlarea表确定disk_reads、(buffer_gets/executions)值较大的SQL

2:列举几种诊断IO、CPU、性能状况的方法

top/vmstat

statspack

sql_trace/tkprof

查v$system_event/v$session_event/v$session_wait

查v$sqlarea(disk_reads或buffer_gets/executions较大的SQL)

3:对statspack有何认识

StapSpack是Oracle公司提供的一个收集数据库运行性能指标的软件包,该软件包从8i起,在9i、10g都有显著的增强 。该软件包的辅助表(存储相关参数与收集的性能指标的表)由最初的25个增长到43个。收集级别参数由原来的3个(0、5、10)增加到5个(0、5、6、7、10)通过分析收集的性能指标,数据库管理员可以详细地了解数据库目前的运行情况,对数据库实例、等待事件、SQL等进行优化调整。利用statspack收集的snapshot,可以统计制作数据库的各种性能指标的统计趋势图表。

4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响

在系统比较空闲时;nologging选项(如果有dataguard则不可以使用nologging)大的sort_ared_size或pga_aggregate_target较大 5:对raid1+0 和raid5有何认识

RAID 10(或称RAID 1+0)与RAID 0+1不同,它是用硬盘驱动器先组成RAID 1阵列,然后在RAID 1阵列之间再组成RAID 0阵列。RAID 10模式同RAID 0+1模式一样具有良好的数据传输性能,但却比RAID 0+1具有更高的可靠性。RAID 10阵列的实际容量为M×n/2,磁盘利用率为50%。RAID 10也需要至少4个硬盘驱动器构成,因而价格昂贵。 RAID 10的可靠性同RAID 1一样,但由于RAID 10硬盘驱动器之间有数据分割,因而数据传输性能优良。RAID 5与RAID 3很相似,不同之处在于RAID 5的奇偶校验信息也同数据一样被分割保存到所有的硬盘驱动器,而不是写入一个指定的硬盘驱动器,从而消除了单个奇偶校验硬盘驱动器的瓶颈问题。RAID 5磁盘阵列的性能比RAID 3有所提高,但仍然需要至少3块硬盘驱动器。其实际容量为M×(n-1),磁盘利用率为(n-1)/n 。

范文五:阿里巴巴2015校招软件笔试题经典(含答案)

1、写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。

int Max(bitree * root)

{ if(root==NULL)return 0;

else{ if(root->data>max)

max=root->data;

Max(root->lchild);

Max(root->rchild);

}

return max;

}

int Min(bitree * root)

{ if(root==NULL)return 0;

else{ if(root->data

min=root->data;

M(root->lchild);

M(root->rchild);

}

return min;

}

int main()

{ bitree *root;

root=creatbitree();

printf(

printf(

return 0;

}

2、给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。

#include

#include

#define N 100

int GetMaxCommStr(char *s1,char *s2,char *s3)//s1、s2 为要对比的俩个字符串,

{ //s3用来存储最大的公共字符串 // char *s1=stra, *s2=strb;

char len1 = strlen(s1);

char len2 = strlen(s2);

char maxlen = 0;

char i,j,r1;

for( i = 0; i

{

for(j = 0; j

{

if(s1[i] == s2[j]) //找到了第一个相等的

{

char as = i, bs = j, count = 1; //保存第一个相等的首地址

while( (as+1

count++;

if(count > maxlen) //如果大于最大长度则更新

{

maxlen = count;

r1=i; //存储公共子字符串的起始位

}

}

}

}

if (maxlen>0) //有公共子字符串

{

for(i=0;i

{

*(s3+i)=*(s1+i);

}

}

return maxlen;

}

int main ()

{

char a[N]={0},b[N]={0},str[N]={0};

printf (

scanf(

int maxoflen=GetMaxCommStr(a,b,str);

printf(

//查找最大相等长度

return 0; }

第一题:测试淘宝站内的搜索系统,请问你能想到哪些方法来进行测试?

范文六:阿里巴巴2010校园招聘笔试题摘录(附答案)

阿里巴巴2010校园招聘笔试题摘录(附答案)

1. 一架飞机在满油的情况下可以绕地球飞 0.5 圈,假设飞机与飞机之间可以互相加油,请问在确保所有飞机够油飞回起点的情况下,最少需要几架飞机才可以让其中一架飞机成功绕地球飞行一圈?(提示1:地球是圆的!提示2:飞机可以重复使用!)( ) A:3

B:4

C:5

D:6

E:7

2. 100 张多米诺骨牌整齐地排成一列,依顺序编号为 1、2、3、„„、99、100 。第一次拿走所有奇数位置上的骨牌,第二次再从剩余骨牌中拿走所有奇数位置上的骨牌,以此类推。请问最后剩下的一张骨牌的编号是多少?( )

A:32

B:64

C:88

D:96

3. 给你 8 颗小石头和一架天平。其中有 7 颗石头重量是一样的,另外一个比这 7 颗略重。请问在最坏的情况下,最少要称几次,才能把这颗较重的石头找出来。( ) A:3

B:2

C:1

D:4

4. 如果你有两个大小一样的桶,分别装了半桶红颜料和半桶蓝颜料。如果我们从蓝色颜料桶里舀一杯,倒入红色颜料桶里,搅拌均匀,然后再从红色颜料桶里舀一杯倒入蓝颜色桶。请问以下说法那种正确?( )

A:红桶中蓝颜色的比例大

B:蓝桶中红颜色的比例大

C:红桶中蓝颜色的比例和蓝桶中红颜色的比例一样大

D:无法判断

5. 小王去商店买衬衫,售票员问她想要那种颜色,小王幽默的说:“我不像讨厌黄色那样讨厌红色,我不像讨厌白色那样讨厌蓝色,我不像喜欢粉色那样喜欢红色,我对蓝色不如对黄色那样喜欢”。小王最后会选择的颜色是什么?( )

A:粉色

B:蓝色

C:红色

D:黄色

6.在一次歌唱竞赛中,每一名参赛选手都有评委投了优秀票。如果上述断定为真,则以下哪项不可能为真?I.有的评委投了所有参赛选手优秀票。II.有的评委没有给任何参赛选手投优秀票。III.有的参赛选手没有得到一张优秀票。 ( )

A.只有I.

B.只有II.

C.只有III.

D.只有I和II.

E.只有I和III.

7.所有通过英语六级考试的学生都参加了学校的英语俱乐部,王进参加了英语俱乐部,所以他一定通过了英语六级考试。以下哪项最好地指出了上述论证的逻辑错误?( )

(A)部分通过英语六级考试的学生没有参加英语俱乐部。

(B)王进能够参加英语俱乐部是因为它符合加入俱乐部的基本条件。

(C)王进曾经获得过年级英语演讲比赛第一名。

(D)凡愿意每学期缴纳50元会费,并且愿意积极参加俱乐部活动的学生都可以成为俱乐部的成员。

(E)有些参加俱乐部的学生还没有通过英语六级考试。

8.如果所有的妇女都有大衣,那么漂亮的妇女会有:( )

A.给多的大衣 B.时髦的大衣 C.大衣 D.昂贵的大衣

9.在我国北方严寒冬季的夜晚,车辆前挡风玻璃会因低温而结冰霜。第二天对车辆发动预热后玻璃上的冰霜会很快融化。何宁对此不解,李军解释道:因为车辆仅有除霜孔位于前挡风玻璃,而车辆预热后除霜孔完全开启,因此,是开启除霜孔使车辆玻璃冰霜融化。以下哪项为真,最能质疑李军对车辆玻璃迅速融化的解释?( )

A.车辆一侧玻璃窗没有出现冰霜现象

B.尽管车尾玻璃窗美哟除霜孔,其玻璃上的冰霜融化速度与前挡风玻璃没有差别

C.当吹在车辆玻璃上的空气气温增加,其冰霜的融化速度也会增加

D.车辆前挡风玻璃除霜孔排出的暖气流排出后可能很快冷却

10.小张承诺:如果天不下雨,我一定去听音乐会,以下哪项如果为真,说明小张没有兑现承诺? (I)天没下雨,小张没去听音乐会。 (II)天下雨,小张去听了音乐会。(III)天下雨,小张没去听音乐会。 ( )

A.仅(I)

B.仅(II)

C.仅(III)

D.仅(I)和(II)

E.(I),(II)和(III)

11.某零件加工厂按照工人完成的合格零件和不合格零件数支付工资,工人每做出一个合格零件能得到工资10元,每做出一个不合格的零件将被扣掉5元,已经某人一天共做了12个零件,得到工资90元,那么他在这一天作了多少个不合格零件?( )

A 2 B 3 C 4 D 6

12.甲乙丙三人居一学生宿舍。甲报案遗失2000元。保安人员经过周密调查,得出结论是丙作的案。班主任说:“这是最不可能的。”保安人员说:“当所有其他的可能性都被排除了,剩下的可能性不管看来是多么不可能,都一定是事实。”以下哪项如果是真的,将最为有力地动摇保安人员的结论?( )

A.保安人员事实上不可能比班主任更了解学生。

B.对非法行为惩处的根据,不能是逻辑推理,而只能是证据。

C.保安人员无法穷尽地把握所有的可能性。

D.丙是班上公认的品学兼优的学生。

E.乙有作案的前科。

--------------------------------------------------------------

1. 答案:A。提示1:地球是圆的!提示2:飞机可以重复使用!更详细的解释:A、B、C三驾飞机同时起飞,飞到一圈的1/8处,各自消耗了1/4的油,此时C将自己所剩油的1/4分给A,1/4分给B,剩下的1/4供自己安全返航,则A和B变为满油状态;当飞到一圈的2/8处,A和B又各自消耗了1/4的油,此时B将自己所剩油的1/4分给A,剩下的2/4供自己安全返航,则A再次变为满油状态,可以支持自己飞到6/8处,剩下的路程则由刚才回去的B、C机按同样的方式反方向为其加油,则A成功绕地球一圈。

2. 答案:B。用了很笨的方法,不说了,相信大家都比我做的简单。

3. 答案:B。首先任取其中6个小石头一边3个进行称重,如果重量相等,再称剩下两个即可找出重的;如果不相等,取较重的一边的任意2个称重,如相等则剩下的1个是重球,如不相等则较重的是。

4. 答案:C。设两桶颜料的都是n,先从红色桶中取出1到蓝色桶,则蓝色桶中红颜料的比例为1/(n+1),搅拌均匀后从蓝色桶取出1(其中蓝颜料的比例为n/(n+1))到红色桶,则红色桶中的蓝颜料的比例为1/(n+1),所以红桶中蓝颜料的比例和蓝桶中红颜料的比例一样大。

5. 答案:A。小王对颜色的喜好顺序为粉(最喜欢),红,黄,蓝,白(最不喜欢),所以他选择粉色。

6. 答案:C。

7. 答案:E。

8. 答案:C。漂亮妇女也是妇女哦!

9.答案:B。【解析】题干中李军认为,是除霜孔使车辆玻璃冰霜融化。选项B认为,没有除霜孔,车辆玻璃的冰霜也能同样融化,这就表明,除霜孔对车辆玻璃冰霜融化并没有什么特殊的作用。

10. 答案:A

11. 答案:A.【解析】本题中可令做一个合格零件得到的工资10元为兔脚,做一个不合格零件扣除的5元(即得到的-5元)为鸡脚,12个零件可以看作鸡兔总数,得到的工资90元可以看作鸡兔的总脚数,这样由解鸡兔同笼题的基本关系式可得:合格零件个数=(90-(-5×12))÷(10-(-5))=10个。不合格数为12-10=2个。(或利用公式计算不合格零件个数=(10×12-90)÷(10-(-5))=2个。)

12. 答案:C

范文七:阿里巴巴公司DBA笔试题及参考答案

阿里巴巴公司DBA笔试题及参考答案

以下题目,可根据自己情况挑选题目作答,不必全部作答.您也可以就相关问题直接找负责面试人员面述而不笔答……

一:SQLtuning类

1:列举几种表连接方式

2:不借助第三方工具,怎样查看sql的执行计划

3:如何使用CBO,CBO与RULE的区别

4:如何定位重要(消耗资源多)的SQL

5:如何跟踪某个session的SQL

6:SQL调整最关注的是什么

7:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)

8:使用索引查询一定能提高查询的性能吗?为什么

9:绑定变量是什么?绑定变量有什么优缺点?

10:如何稳定(固定)执行计划

11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么

12:存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql

二:数据库基本概念类

1:pctusedandpctfree表示什么含义有什么作用

2:简单描述table/segment/extent/block之间的关系

3:描述tablespace和datafile之间的关系

4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点

5:回滚段的作用是什么

6:日志的作用是什么

7:SGA主要有那些部分,主要作用是什么

8racle系统进程主要有哪些,作用是什么

三:备份恢复类

1:备份如何分类

2:归档是什么含义

3:如果一个表在2004-08-0410:30:00被drop,在有完善的归档和备份的情况下,如何恢复

4:rman是什么,有何特点

5:standby的特点

6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略

四:系统管理类

1:对于一个存在系统性能的系统,说出你的诊断处理思路

2:列举几种诊断IO、CPU、性能状况的方法

3:对statspack有何认识

4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响

5:对raid10和raid5有何认识

五:综合随意类

1:你最擅长的是oracle哪部分?

2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?

3:随意说说你觉得oracle最有意思的部分或者最困难的部分

4:为何要选择做DBA呢?

网上购物,就去淘宝皇冠店铺

一:SQLtuning类

1:列举几种表连接方式http://www.taobao05.com/

hashjoin/mergejoin/nestloop(clusterjoin)/indexjoin

2:不借助第三方工具,怎样查看sql的执行计划

setautoton

explainplansetstatement_id=&item_idfor&sql;

select*fromtable(dbms_xplan.display);

http://download-west.oracle.com/.../b10752/ex_plan.htm

3:如何使用CBO,CBO与RULE的区别

在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目,然后选择最佳级别(最少的数量)的执行路径来运行查询。

CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。

4:如何定位重要(消耗资源多)的SQL

selectsql_text

fromv$sql

wheredisk_reads>1000or(executions>0andbuffer_gets/executions>30000);

5:如何跟踪某个session的SQL

execdbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);

selectsid,serial#fromv$sessionwheresid=(selectsidfromv$mystatwhererownum=1);

execdbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,'');

6:SQL调整最关注的是什么

查看该SQL的responsetime(dbblockgets/consistentgets/physicalreads/sorts(disk))

7:说说你对索引的认识(索引的结构、对dml影响、为什么提高查询性能)

b-treeindex/bitmapindex/functionindex/patitionalindex(local/global)索引通常能提高select/update/delete的性能,会降低insert的速度,

8:使用索引查询一定能提高查询的性能吗?为什么

索引就是为了提高查询性能而存在的,如果在查询中索引没有提高性能,只能说是用错了索引,或者讲是场合不同

9:绑定变量是什么?绑定变量有什么优缺点?

绑定变量是相对文本变量来讲的,所谓文本变量是指在SQL直接书写查询条件,这样的SQL在不同条件下需要反复解析,绑定变量是指使用变量来代替直接书写条件,查询bindvalue在运行时传递,然后绑定执行。优点是减少硬解析,降低CPU的争用,节省shared_pool;缺点是不能使用histogram,sql优化比较困难

10:如何稳定(固定)执行计划

query_rewrite_enabled=true

star_transformation_enabled=true

optimizer_features_enable=9.2.0

创建并使用storedoutline

http://download-west.oracle.com/.../outlines.htm#26854

11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么

8i中sort_area_size/sort_area_retained_size决定了排序所需要的内存

如果排序操作不能在sort_area_size中完成,就会用到temp表空间

9i中如果workarea_size_policy=auto时,

排序在pga内进行,通常pga_aggregate_target的1/20可以用来进行disksort;

如果workarea_size_policy=manual时,排序需要的内存由sort_area_size决定

在执行orderby/groupby/distinct/union/createindex/indexrebuild/minus等操作时,

如果在pga或sort_area_size中不能完成,排序将在临时表空间进行(disksort),

临时表空间主要作用就是完成系统中的disksort.

—30条记录显示,请给出sql12:存在表T(a,b,c,d),要根据字段c排序后取第2121—

createtablet(anumber(,bnumber(,cnumber(,dnumber();

/

begin

foriin1..300loop

insertintotvalues(mod(i,2),i/2,dbms_random.value(1,300),i/4);

endloop;

end;

/

select*from(selectc.*,rownumasrnfrom(select*fromtorderbycdesc)c)wherernbetween21and30;

/

select*from(select*fromtestorderbycdesc)xwhererownum

相比之minus性能较差

数据库基本概念类

1:pctusedandpctfree表示什么含义有什么作用

pctused与pctfree控制数据块是否出现在freelist中,

pctfree控制数据块中保留用于update的空间,当数据块中的freespace小于pctfree设置的空间时,

该数据块从freelist中去掉,当块由于dml操作freespace大于pct_used设置的空间时,该数据库块将

被添加在freelist链表中。

2:简单描述table/segment/extent/block之间的关系

table创建时,默认创建了一个datasegment,

每个datasegment含有minextents指定的extents数,

每个extent据据表空间的存储参数分配一定数量的blocks

3:描述tablespace和datafile之间的关系

一个tablespace可以有一个或多个datafile,每个datafile只能在一个tablespace内,

table中的数据,通过hash算法分布在tablespace中的各个datafile中,

tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。

4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点

本地管理表空间(LocallyManagedTablespace简称LMT)

8i以后出现的一种新的表空间的管理模式,通过位图来管理表空间的空间使用。

字典管理表空间(Dictionary-ManagedTablespace简称DMT)

8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用。

动段空间管理(ASSM),

它首次出现在Oracle920里有了ASSM,链接列表freelist被位图所取代,它是一个二进制的数组,

能够迅速有效地管理存储扩展和剩余区块(freeblock),因此能够改善分段存储本质,

ASSM表空间上创建的段还有另外一个称呼叫BitmapManagedSegments(BMB段)。

5:回滚段的作用是什么

事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,

当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,

ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。

读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。

当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)

当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEMCHANGENUMBER-SCN)

来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,

若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。

6:日志的作用是什么

记录数据库事务,最大限度地保证数据的一致性与安全性

重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

7:SGA主要有那些部分,主要作用是什么

SGA:db_cache/shared_pool/large_pool/java_pool

db_cache:

数据库缓存(BlockBuffer)对于Oracle数据库的运转和性能起着非常关键的作用,

它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库通过使用LRU

算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问.

shared_pool:

共享池的大小对于Oracle性能来说都是很重要的。

共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL块和SQL语句及控制结构

large_pool:

使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存

使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器

java_pool:

为javaprocedure预备的内存区域,如果没有使用javaproc,java_pool不是必须的

8Oracle系统进程主要有哪些,作用是什么

数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件

日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件

系统监控(smon):检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

进程监控(pmon):负责在一个Oracle进程失败时清理资源

检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。归档进程(arcn):在每次日志切换时把已满的日志组进行备份或归档

作业调度器(cjq):负责将调度与执行系统中已定义好的job,完成一些预定义的工作.

恢复进程(reco):保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;

备份恢复类

1:备份如何分类

逻辑备份:exp/imp

物理备份:

RMAN备份

fullbackup/incrementalbackup(累积/差异)

热备份:altertablespacebegin/endbackup;

冷备份:脱机备份(databaseshutdown)

2:归档是什么含义

关于归档日志:Oracle要将填满的在线日志文件组归档时,则要建立归档日志(archivedredolog)。

其对数据库备份和恢复有下列用处:

数据库后备以及在线和归档日志文件,在操作系统和磁盘故障中可保证全部提交的事物可被恢复。

在数据库打开和正常系统使用下,如果归档日志是永久保存,在线后备可以进行和使用。

数据库可运行在两种不同方式下:

NOARCHIVELOG方式或ARCHIVELOG方式数据库在NOARCHIVELOG方式下使用时,不能进行在线日志的归档,如果数据库在ARCHIVELOG方式下运行,可实施在线日志的归档。3:如果一个表在2004-08-0410:30:00被drop,在有完善的归档和备份的情况下,如何恢复?

手工拷贝回所有备份的数据文件

startupmount;

sqlalterdatabaserecoverautomaticuntiltime'2004-08-04:10:30:00';

alterdatabaseopenresetlogs;

4:rman是什么,有何特点?

RMAN(RecoveryManager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库,RMAN可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。RMAN有三种不同的用户接口:

COMMANDLINE方式、GUI方式(集成在OEM中的备份管理器)、API方式(用于集成到第三方的备份软件中)。

具有如下特点:

1)功能类似物理备份,但比物理备份强大N倍;

2)可以压缩空块;

3)可以在块水平上实现增量;

4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;

5)备份与恢复的过程可以自动管理;

6)可以使用脚本(存在Recoverycatalog中)

7)可以做坏块监测

5:standby的特点

备用数据库(standbydatabase):ORACLE推出的一种高可用性(HIGHAVAILABLE)数据库方案,

在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份

可以实现快速切换与灾难性恢复,从920开始,还开始支持物理与逻辑备用服务器。

9i中的三种数据保护模式分别是:

1)、MAXIMIZEPROTECTION:最大数据保护与无数据分歧,LGWR将同时传送到备用节点,

在主节点事务确认之前,备用节点也必须完全收到日志数据。如果网络不好,引起LGWR不能传送数据,将引起严重的性能问题,导致主节点DOWN机。

2)、MAXIMIZEAVAILABILITY:无数据丢失模式,允许数据分歧,允许异步传送。

正常情况下运行在最大保护模式,在主节点与备用节点的网络断开或连接不正常时,自动切换到最大性能模式,

主节点的操作还是可以继续的。在网络不好的情况下有较大的性能影响。

3)、MAXIMIZEPERFORMANCE:这种模式应当可以说是从8i继承过来的备用服务器模式,异步传送,

无数据同步检查,可能丢失数据,但是能获得主节点的最大性能。9i在配置DATAGUARD的时候默认就是MAXIMIZEPERFORMANCE

6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略

rman/每月一号level0每周末/周三level1其它每天level2

四:系统管理类

对于一个存在系统性能的系统,说出你的诊断处理思路

1做statspack收集系统相关信息

了解系统大致情况/确定是否存在参数设置不合适的地方/查看top5event/查看topsql等

2查v$system_event/v$session_event/v$session_wait

从v$system_event开始,确定需要什么资源(dbfilesequentialread)等

深入研究v$session_event,确定等待事件涉及的会话

从v$session_wait确定详细的资源争用情况(p1-p3的值:file_id/block_id/blocks等)

3通过v$sql/v$sqltext/v$sqlarea表确定disk_reads、(buffer_gets/executions)值较大的SQL

2:列举几种诊断IO、CPU、性能状况的方法

top/vmstat

statspack

sql_trace/tkprof

查v$system_event/v$session_event/v$session_wait

查v$sqlarea(disk_reads或buffer_gets/executions较大的SQL)

3:对statspack有何认识

StapSpack是Oracle公司提供的一个收集数据库运行性能指标的软件包,该软件包从8i起,在9i、10g都有显著的增强。该软件包的辅助表(存储相关参数与收集的性能指标的表)由最初的25个增长到43个。收集级别参数由原来的3个(0、5、10)增加到5个(0、5、6、7、10)通过分析收集的性能指标,数据库管理员可以详细地了解数据库目前的运行情况,对数据库实例、等待事件、SQL等进行优化调整。利用statspack收集的snapshot,可以统计制作数据库的各种性能指标的统计趋势图表。

4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响

在系统比较空闲时;nologging选项(如果有dataguard则不可以使用nologging)大的sort_ared_size或pga_aggregate_target较大5:对raid1+0和raid5有何认识

RAID10(或称RAID1+0)与RAID0+1不同,它是用硬盘驱动器先组成RAID1阵列,然后在RAID1阵列之间再组成RAID0阵列。RAID10模式同RAID0+1模式一样具有良好的数据传输性能,但却比RAID0+1具有更高的可靠性。RAID10阵列的实际容量为M×n/2,磁盘利用率为50%。RAID10也需要至少4个硬盘驱动器构成,因而价格昂贵。RAID10的可靠性同RAID1一样,但由于RAID10硬盘驱动器之间有数据分割,因而数据传输性能优良。RAID5与RAID3很相似,不同之处在于RAID5的奇偶校验信息也同数据一样被分割保存到所有的硬盘驱动器,而不是写入一个指定的硬盘驱动器,从而消除了单个奇偶校验硬盘驱动器的瓶颈问题。RAID5磁盘阵列的性能比RAID3有所提高,但仍然需要至少3块硬盘驱动器。其实际容量为M×(n-1),磁盘利用率为(n-1)/n。

范文八:阿里巴巴的OracleDBA笔试题及参考答案

阿里巴巴的Oracle DBA笔试题及参考答案 - 数据库基本概念类

1:pctused and pctfree 表示什么含义有什么作用

pctused与pctfree控制数据块是否出现在freelist中,

pctfree控制数据块中保留用于update的空间,当数据块中的free space小于pctfree设置的空间时,

该数据块从freelist中去掉,当块由于dml操作free space大于pct_used设置的空间时,该数据库块将

被添加在freelist链表中。

2:简单描述table / segment / extent / block之间的关系

table创建时,默认创建了一个data segment,

每个data segment含有min extents指定的extents数,

每个extent据据表空间的存储参数分配一定数量的blocks

3:描述tablespace和datafile之间的关系

一个tablespace可以有一个或多个datafile,每个datafile只能在一个tablespace内, table中的数据,通过hash算法分布在tablespace中的各个datafile中,

tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。

4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点

本地管理表空间(Locally Managed Tablespace简称LMT)

8i以后出现的一种新的表空间的管理模式,通过位图来管理表空间的空间使用。 字典管理表空间(Dictionary-Managed Tablespace简称DMT)

8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用。

动段空间管理(ASSM),

它首次出现在Oracle920里有了ASSM,链接列表freelist被位图所取代,它是一个二进制的数组,

能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质, ASSM表空间上创建的段还有另外一个称呼叫Bitmap Managed Segments(BMB 段)。 5:回滚段的作用是什么

事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,

当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中, ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。

读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。 当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)

当ORACLE执行Select语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)

来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,

若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。

6:日志的作用是什么

记录数据库事务,最大限度地保证数据的一致性与安全性

重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件

归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

7:SGA主要有那些部分,主要作用是什么

SGA:db_cache/shared_pool/large_pool/java_pool

db_cache:

数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着非常关键的作用,

它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库通过使用LRU 算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问.

shared_pool:

共享池的大小对于Oracle 性能来说都是很重要的。

共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL 块和SQL 语句及控制结构

large_pool:

使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存

使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器 java_pool:

为java procedure预备的内存区域,如果没有使用java proc,java_pool不是必须的 8 oracle系统进程主要有哪些,作用是什么

数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件 日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件

系统监控(smon) :检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

进程监控(pmon) :负责在一个Oracle 进程失败时清理资源

检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

归档进程(arcn) :在每次日志切换时把已满的日志组进行备份或归档

作业调度器(cjq) :负责将调度与执行系统中已定义好的job,完成一些预定义的工作. 恢复进程(reco) :保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback

一份DBA试题

注:以下题目,可根据自己情况挑选题目作答,不必全部作答您也可以就相关问题直接找负责面试人员面述而不笔答

一:SQL tuning 类

1:列举几种表连接方式

hash join/merge join/nest loop(cluster join)/index join

2:不借助第三方工具,怎样查看sql的执行计划

set autot on

explain plan set statement_id = &item_id for &sql;

select * from table(dbms_xplan.display); http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10752/ex_plan.htm

3:如何使用CBO,CBO与RULE的区别

在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。

RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目,

然后选择最佳级别(最少的数量)的执行路径来运行查询。

CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同

的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。

4:如何定位重要(消耗资源多)的SQL

select sql_text

from v$sql

where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);

5:如何跟踪某个session的SQL

exec dbms_system.set_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 dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,''); 6:SQL调整最关注的是什么

查看该SQL的response time(db block gets/consistent gets/physical reads/sorts (disk))

7:说说你对索引的认识(索引的结构、对dml影响、为什么提高查询性能) 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:如何稳定(固定)执行计划

query_rewrite_enabled = true

star_transformation_enabled = true

optimizer_features_enable = 9.2.0

创建并使用stored outline http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10752/outlines.htm#26854

这个贴子: http://www.cnoug.org/viewthread.php?tid=27598

11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么 8i中sort_area_size/sort_area_retained_size决定了排序所需要的内存 如果排序操作不能在sort_area_size中完成,就会用到temp表空间

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(8),b number(8),c number(8),d number(8)); /

begin

for i in 1 .. 300 loop

insert into t values(mod(i,2),i/2,dbms_random.value(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

select * from (select * from test order by c desc) y where rownum

相比之 minus性能较差

二:数据库基本概念类

1:pctused and pctfree 表示什么含义有什么作用

pctused与pctfree控制数据块是否出现在freelist中,

pctfree控制数据块中保留用于update的空间,当数据块中的free space小于pctfree设置的空间时,

该数据块从freelist中去掉,当块由于dml操作free space大于pct_used设置的空间时,该数据库块将

被添加在freelist链表中。

2:简单描述table / segment / extent / block之间的关系

table创建时,默认创建了一个data segment,

每个data segment含有min extents指定的extents数,

每个extent据据表空间的存储参数分配一定数量的blocks

3:描述tablespace和datafile之间的关系

一个tablespace可以有一个或多个datafile,每个datafile只能在一个tablespace内,

table中的数据,通过hash算法分布在tablespace中的各个datafile中, tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。 4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点

本地管理表空间(Locally Managed Tablespace简称LMT)

8i以后出现的一种新的表空间的管理模式,通过位图来管理表空间的空间使用。 字典管理表空间(Dictionary-Managed Tablespace简称DMT)

8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用。

动段空间管理(ASSM),

它首次出现在Oracle920里有了ASSM,链接列表freelist被位图所取代,它是一个二进制的数组,

能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质,

ASSM表空间上创建的段还有另外一个称呼叫Bitmap Managed Segments(BMB 段)。

5:回滚段的作用是什么

事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,

当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,

ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。 读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。

当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)

当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)

来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,

若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。 http://www.itpub.net/showthread.php?s=&threadid=10190&highlight=%BB%D8%B9%F6%B6%CE%B5%C4%D7%F7%D3%C3

6:日志的作用是什么

记录数据库事务,最大限度地保证数据的一致性与安全性

重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件

归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。 http://www.cnoug.org/viewthread.php?tid=17741&highlight=%C8%D5%D6%BE 7:SGA主要有那些部分,主要作用是什么

SGA:db_cache/shared_pool/large_pool/java_pool

db_cache:

数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着非常关键的作用,

它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库通过使用LRU

算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问. shared_pool:

共享池的大小对于Oracle 性能来说都是很重要的。

共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL 块和SQL 语句及控制结构

large_pool:

使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存

使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器

java_pool:

为java procedure预备的内存区域,如果没有使用java proc,java_pool不是必须的

8:oracle系统进程主要有哪些,作用是什么

数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件 日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件

系统监控(smon) :检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

进程监控(pmon) :负责在一个Oracle 进程失败时清理资源

检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

归档进程(arcn) :在每次日志切换时把已满的日志组进行备份或归档

作业调度器(cjq) :负责将调度与执行系统中已定义好的job,完成一些预定义的工作.

恢复进程(reco) :保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;

三:备份恢复类

1:备份如何分类

逻辑备份:exp/imp

物理备份:

RMAN备份

full backup/incremental backup(累积/差异)

热备份:alter tablespace begin/end backup;

冷备份:脱机备份(database shutdown)

2:归档是什么含义

关于归档日志:Oracle要将填满的在线日志文件组归档时,则要建立归档日志(archived redo log)。

其对数据库备份和恢复有下列用处:

数据库后备以及在线和归档日志文件,在操作系统和磁盘故障中可保证全部提交的事物可被恢复。

在数据库打开和正常系统使用下,如果归档日志是永久保存,在线后备可以进行和使用。

数据库可运行在两种不同方式下:

NOARCHIVELOG方式或ARCHIVELOG 方式

数据库在NOARCHIVELOG方式下使用时,不能进行在线日志的归档,

如果数据库在ARCHIVELOG方式下运行,可实施在线日志的归档。

3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复?

手工拷贝回所有备份的数据文件

sql>startup mount;

sql>alter database recover automatic until time '2004-08-04:10:30:00'; sql>alter database open resetlogs;

4:rman是什么,有何特点?

RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库,

RMAN 可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。

RMAN有三种不同的用户接口:

COMMAND LINE方式、GUI 方式(集成在OEM 中的备份管理器)、API 方式(用于集成到第三方的备份软件中)。

具有如下特点:

1)功能类似物理备份,但比物理备份强大N倍;

2)可以压缩空块;

3)可以在块水平上实现增量;

4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;

5)备份与恢复的过程可以自动管理;

6)可以使用脚本(存在Recovery catalog 中)

7)可以做坏块监测

5:standby的特点

备用数据库(standby database):ORACLE推出的一种高可用性(HIGH AVAILABLE)数据库方案,

在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份

可以实现快速切换与灾难性恢复,从920开始,还开始支持物理与逻辑备用服务器。

9i中的三种数据保护模式分别是:

1)、MAXIMIZE PROTECTION :最大数据保护与无数据分歧,LGWR将同时传送到备用节点,

在主节点事务确认之前,备用节点也必须完全收到日志数据。如果网络不好,引起LGWR不能传送数据,将引起严重的性能问题,导致主节点DOWN机。

2)、MAXIMIZE AVAILABILITY :无数据丢失模式,允许数据分歧,允许异步传送。 正常情况下运行在最大保护模式,在主节点与备用节点的网络断开或连接不正常时,自动切换到最大性能模式,

主节点的操作还是可以继续的。在网络不好的情况下有较大的性能影响。

3)、MAXIMIZE PERFORMANCE:这种模式应当可以说是从8i继承过来的备用服务器模式,异步传送,

无数据同步检查,可能丢失数据,但是能获得主节点的最大性能。9i在配置DATA GUARD的时候默认就是MAXIMIZE PERFORMANCE

6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略

rman/每月一号 level 0 每周末/周三 level 1 其它每天level 2

四:系统管理类

1:对于一个存在系统性能的系统,说出你的诊断处理思路

1 做statspack收集系统相关信息

了解系统大致情况/确定是否存在参数设置不合适的地方/查看top 5 event/查看top sql等

2 查v$system_event/v$session_event/v$session_wait

从v$system_event开始,确定需要什么资源(db file sequential read)等 深入研究v$session_event,确定等待事件涉及的会话

从v$session_wait确定详细的资源争用情况(p1-p3的

值:file_id/block_id/blocks等)

3 通过v$sql/v$sqltext/v$sqlarea表确定disk_reads、

(buffer_gets/executions)值较大的SQL

2:列举几种诊断IO、CPU、性能状况的方法

top/vmstat

statspack

sql_trace/tkprof

查v$system_event/v$session_event/v$session_wait

查v$sqlarea(disk_reads或buffer_gets/executions较大的SQL) 3:对statspack有何认识

StapSpack是Oracle公司提供的一个收集数据库运行性能指标的软件包,该软件包从8i起,在9i、10g都有显著的增强

该软件包的辅助表(存储相关参数与收集的性能指标的表)由最初的25个增长到43个

收集级别参数由原来的3个(0、5、10)增加到5个(0、5、6、7、10) 通过分析收集的性能指标,数据库管理员可以详细地了解数据库目前的运行情况,对数据库实例、等待事件、SQL等进行优化调整

利用statspack收集的snapshot,可以统计制作数据库的各种性能指标的统计趋势图表。

4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响

在系统比较空闲时

nologging选项(如果有dataguard则不可以使用nologging)

大的sort_ared_size或pga_aggregate_target较大

5:对raid1+0 和raid5有何认识

RAID 10(或称RAID 1+0)与RAID 0+1不同,它是用硬盘驱动器先组成RAID 1阵列,然后在RAID 1阵列之间再组成RAID 0阵列。

RAID 10模式同RAID 0+1模式一样具有良好的数据传输性能,但却比RAID 0+1具有更高的可靠性。RAID 10阵列的实际容量为M×n/2,

磁盘利用率为50%。RAID 10也需要至少4个硬盘驱动器构成,因而价格昂贵。 RAID 10的可靠性同RAID 1一样,但由于RAID 10硬盘驱动器之间有数据分割,因而数据传输性能优良。

RAID 5与RAID 3很相似,不同之处在于RAID 5的奇偶校验信息也同数据一样被分割保存到所有的硬盘驱动器,

而不是写入一个指定的硬盘驱动器,从而消除了单个奇偶校验硬盘驱动器的瓶颈问题。RAID 5磁盘阵列的性能比RAID 3有所提高,

但仍然需要至少3块硬盘驱动器。其实际容量为M×(n-1),磁盘利用率为(n-1)/n 。

五:综合随意类

1:你最擅长的是oracle哪部分?

pl/sql及sql优化

2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?

喜欢,sql的优化

3:随意说说你觉得oracle最有意思的部分或者最困难的部分

latch free的处理

4:为何要选择做DBA呢?

兴趣所在

范文九:阿里巴巴的OracleDBA笔试题参考答案

阿里巴巴的Oracle DBA笔试题参考答案+++++++++++++++++++++++++++++++++++++本文的阿里巴巴数据库面试题主要针对于Oracle DBA,题目可以是笔试题,也可以口头回答。以下题目,可根据自己情况挑选题目作答,不必全部作答.您也可以就相关问题直接找负责面试人员面述而不笔答……   一:SQL tuning 类  1:列举几种表连接方式   2:不借助第三方工具,怎样查看sql的执行计划   3:如何使用CBO,CBO与RULE的区别   4:如何定位重要(消耗资源多)的SQL   5:如何跟踪某个session的SQL   6:SQL调整最关注的是什么   7:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)   8:使用索引查询一定能提高查询的性能吗?为什么   9:绑定变量是什么?绑定变量有什么优缺点?   10:如何稳定(固定)执行计划   11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么   12:存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql  二:数据库基本概念类  1:pctused and pctfree 表示什么含义有什么作用   2:简单描述table / segment / extent / block之间的关系   3:描述tablespace和datafile之间的关系   4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点   5:回滚段的作用是什么   6:日志的作用是什么   7:SGA主要有那些部分,主要作用是什么   8:Oracle系统进程主要有哪些,作用是什么  三:备份恢复类  1:备份如何分类   2:归档是什么含义   3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复   4:rman是什么,有何特点   5:standby的特点   6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略  四:系统管理类  1:对于一个存在系统性能的系统,说出你的诊断处理思路   2:列举几种诊断IO、CPU、性能状况的方法   3:对statspack有何认识   4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响   5:对raid10和raid5有何认识  五:综合随意类  1:你最擅长的是oracle哪部分?   2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?   3:随意说说你觉得oracle最有意思的部分或者最困难的部分   4:为何要选择做DBA呢?+++++++++++++++++++++++++++++++++++++++=======================================参考答案: 一:SQL tuning 类  1:列举几种表连接方式程序代码  hash join/merge join/nest loop(cluster join)/index join   2:不借助第三方工具,怎样查看sql的执行计划程序代码  set autot on   explain plan set statement_id = &item_id for &sql;   select * from table(dbms_xplan.display);   http://download-west.oracle.com/ ... /b10752/ex_plan.htm  3:如何使用CBO,CBO与RULE的区别  在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目, 然后选择最佳级别(最少的数量)的执行路径来运行查询。  CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同 的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。  4:如何定位重要(消耗资源多)的SQL程序代码select sql_textfrom v$sqlwhere disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);   5:如何跟踪某个session的SQL程序代码exec dbms_system.set_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 dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,'');   6:SQL调整最关注的是什么  查看该SQL的response time(db block gets/consistent gets/physical reads/sorts (disk))  7:说说你对索引的认识(索引的结构、对dml影响、为什么提高查询性能)  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:如何稳定(固定)执行计划程序代码  query_rewrite_enabled = true   star_transformation_enabled = true   optimizer_features_enable = 9.2.0   创建并使用stored outlineoracle 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 optimizer.oracle 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.Creating Outlines:http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14211/outlines.htm  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,dbms_random.value(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   minus   select * from (select * from test order by c desc) y where rownum   相比之 minus性能较差==================================数据库基本概念类   1:pctused and pctfree 表示什么含义有什么作用  pctused与pctfree控制数据块是否出现在freelist中,  pctfree控制数据块中保留用于update的空间,当数据块中的free space小于pctfree设置的空间时,  该数据块从freelist中去掉,当块由于dml操作free space大于pct_used设置的空间时,该数据库块将  被添加在freelist链表中。  2:简单描述table / segment / extent / block之间的关系  table创建时,默认创建了一个data segment,  每个data segment含有min extents指定的extents数,  每个extent据据表空间的存储参数分配一定数量的blocks  3:描述tablespace和datafile之间的关系  一个tablespace可以有一个或多个datafile,每个datafile只能在一个tablespace内,  table中的数据,通过hash算法分布在tablespace中的各个datafile中,  tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。  4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点  本地管理表空间(Locally Managed Tablespace简称LMT)  8i以后出现的一种新的表空间的管理模式,通过位图来管理表空间的空间使用。  字典管理表空间(Dictionary-Managed Tablespace简称DMT)  8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用。  动段空间管理(ASSM),  它首次出现在Oracle920里有了ASSM,链接列表freelist被位图所取代,它是一个二进制的数组,  能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质,  ASSM表空间上创建的段还有另外一个称呼叫Bitmap Managed Segments(BMB 段)。  5:回滚段的作用是什么  事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,  当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。  事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,  ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。  读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。  当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)  当ORACLE执行Select语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)  来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,  若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。  6:日志的作用是什么  记录数据库事务,最大限度地保证数据的一致性与安全性  重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件  归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。  7:SGA主要有那些部分,主要作用是什么  SGA:db_cache/shared_pool/large_pool/java_pool   db_cache:   数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着非常关键的作用,  它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库通过使用LRU  算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问.  shared_pool:  共享池的大小对于Oracle 性能来说都是很重要的。  共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL 块和SQL 语句及控制结构  large_pool:  使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存  使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器  java_pool:  为java procedure预备的内存区域,如果没有使用java proc,java_pool不是必须的  8 oracle系统进程主要有哪些,作用是什么  数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件   日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件   系统监控(smon) :检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复   进程监控(pmon) :负责在一个Oracle 进程失败时清理资源   检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。   归档进程(arcn) :在每次日志切换时把已满的日志组进行备份或归档   作业调度器(cjq) :负责将调度与执行系统中已定义好的job,完成一些预定义的工作.   恢复进程(reco) :保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback===========================备份恢复类   1:备份如何分类  逻辑备份:exp/imp  物理备份:  RMAN备份  full backup/incremental backup(累积/差异)  热备份:alter tablespace begin/end backup;  冷备份:脱机备份(database shutdown)  2:归档是什么含义  关于归档日志:Oracle要将填满的在线日志文件组归档时,则要建立归档日志(archived redo log)。  其对数据库备份和恢复有下列用处:  数据库后备以及在线和归档日志文件,在操作系统和磁盘故障中可保证全部提交的事物可被恢复。  在数据库打开和正常系统使用下,如果归档日志是永久保存,在线后备可以进行和使用。  数据库可运行在两种不同方式下:  NOARCHIVELOG方式或ARCHIVELOG 方式数据库在NOARCHIVELOG方式下使用时,不能进行在线日志的归档,如果数据库在ARCHIVELOG方式下运行,可实施在线日志的归档。3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复?  手工拷贝回所有备份的数据文件  startup mount;   sql alter database recover automatic until time '2004-08-04:10:30:00';   alter database open resetlogs;  4:rman是什么,有何特点?  RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库, RMAN 可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。RMAN有三种不同的用户接口:  COMMAND LINE方式、GUI 方式(集成在OEM 中的备份管理器)、API 方式(用于集成到第三方的备份软件中)。  具有如下特点:  1)功能类似物理备份,但比物理备份强大N倍;   2)可以压缩空块;   3)可以在块水平上实现增量;   4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;   5)备份与恢复的过程可以自动管理;   6)可以使用脚本(存在Recovery catalog 中)   7)可以做坏块监测  5:standby的特点  备用数据库(standby database):ORACLE推出的一种高可用性(HIGH AVAILABLE)数据库方案,  在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份  可以实现快速切换与灾难性恢复,从920开始,还开始支持物理与逻辑备用服务器。  Oracle 9i中的三种数据保护模式分别是:  1)、MAXIMIZE PROTECTION :最大数据保护与无数据分歧,LGWR将同时传送到备用节点,  在主节点事务确认之前,备用节点也必须完全收到日志数据。如果网络不好,引起LGWR不能传送数据,将引起严重的性能问题,导致主节点DOWN机。  2)、MAXIMIZE AVAILABILITY :无数据丢失模式,允许数据分歧,允许异步传送。  正常情况下运行在最大保护模式,在主节点与备用节点的网络断开或连接不正常时,自动切换到最大性能模式,  主节点的操作还是可以继续的。在网络不好的情况下有较大的性能影响。  3)、MAXIMIZE PERFORMANCE:这种模式应当可以说是从8i继承过来的备用服务器模式,异步传送,  无数据同步检查,可能丢失数据,但是能获得主节点的最大性能。9i在配置DATA GUARD的时候默认就是MAXIMIZE PERFORMANCE  6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略  rman/每月一号 level 0 每周末/周三 level 1 其它每天level 2===================================系统管理类   对于一个存在系统性能的系统,说出你的诊断处理思路  1 做statspack收集系统相关信息  了解系统大致情况/确定是否存在参数设置不合适的地方/查看top 5 event/查看top sql等  2 查v$system_event/v$session_event/v$session_wait  从v$system_event开始,确定需要什么资源(db file sequential read)等  深入研究v$session_event,确定等待事件涉及的会话  从v$session_wait确定详细的资源争用情况(p1-p3的值:file_id/block_id/blocks等)  3 通过v$sql/v$sqltext/v$sqlarea表确定disk_reads、(buffer_gets/executions)值较大的SQL  2:列举几种诊断IO、CPU、性能状况的方法  top/vmstat  statspack  sql_trace/tkprof  查v$system_event/v$session_event/v$session_wait  查v$sqlarea(disk_reads或buffer_gets/executions较大的SQL)  3:对statspack有何认识  StapSpack是Oracle公司提供的一个收集数据库运行性能指标的软件包,该软件包从8i起,在9i、10g都有显著的增强 。该软件包的辅助表(存储相关参数与收集的性能指标的表)由最初的25个增长到43个。收集级别参数由原来的3个(0、5、10)增加到5个(0、5、6、7、10)通过分析收集的性能指标,数据库管理员可以详细地了解数据库目前的运行情况,对数据库实例、等待事件、SQL等进行优化调整。利用statspack收集的snapshot,可以统计制作数据库的各种性能指标的统计趋势图表。  4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响  在系统比较空闲时;nologging选项(如果有dataguard则不可以使用nologging)大的sort_ared_size或pga_aggregate_target较大  5:对raid1+0 和raid5有何认识  RAID 10(或称RAID 1+0)与RAID 0+1不同,它是用硬盘驱动器先组成RAID 1阵列,然后在RAID 1阵列之间再组成RAID 0阵列。RAID 10模式同RAID 0+1模式一样具有良好的数据传输性能,但却比RAID 0+1具有更高的可靠性。RAID 10阵列的实际容量为M×n/2,磁盘利用率为50%。RAID 10也需要至少4个硬盘驱动器构成,因而价格昂贵。 RAID 10的可靠性同RAID 1一样,但由于RAID 10硬盘驱动器之间有数据分割,因而数据传输性能优良。RAID 5与RAID 3很相似,不同之处在于RAID 5的奇偶校验信息也同数据一样被分割保存到所有的硬盘驱动器,而不是写入一个指定的硬盘驱动器,从而消除了单个奇偶校验硬盘驱动器的瓶颈问题。RAID 5磁盘阵列的性能比RAID 3有所提高,但仍然需要至少3块硬盘驱动器。其实际容量为M×(n-1),磁盘利用率为(n-1)/n 。=======================================综合随意类 1:你最擅长的是Oracle哪部分?pl/sql及sql优化2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?喜欢,sql的优化3:随意说说你觉得oracle最有意思的部分或者最困难的部分latch free的处理4:为何要选择做DBA呢?兴趣所在+++++++++++++++++++++++++++++++++++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  2.1你可以合并多个补丁。  2.2你可以为一个非交互的补丁创建一个响应文件。  2.3你可以通过选项(nocompiledb, nomaintainmrc, nocompilejsp)来应用补丁,并且在应用了所有的补丁之后,一次运行它们。  3 查看失败工作的日志,找到并且纠正错误,用adctrl 工具重新开启工作。  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  2.1你可以合并多个补丁。  2.2你可以为一个非交互的补丁创建一个响应文件。  2.3你可以通过选项(nocompiledb, nomaintainmrc, nocompilejsp)来应用补丁,并且在应用了所有的补丁之后,一次运行它们。  3 查看失败工作的日志,找到并且纠正错误,用adctrl 工具重新开启工作。  4在源文件上(所有层)运行pre-clone,使用RMAN复制数据库(或者从热或者冷备份中重新存储数据库),拷贝文件系统,然后在目标文件(所有层)上运行post-clone 。  手工步骤(可能会更多):  4.1改变所有的非网站配置选项数值(快速克隆的话,只改变网站级别的配置文件选项)。  4.2 修改工作流和并发管理器表。  4.3更改打印机。  5 AutoConfig 使用了一个上下文文件来维护关键的配置文件。一个上下文文件就是一个XML文件,在$APPL_TOP/admin 目录下,进行集中式的存储。  当你运行AutoConfig 的时候,它读取XML文件,并且创建所有的AutoConfig 管理配置文件。  对于AutoConfig维护的每个配置文件,都存在一个临时文件来判断哪个数值是从哪个XML文件中得来的。  6  6.1检查DBC文件中的guest的用户名和密码,配置选项guest的用户名和密码、数据库。  6.2查看apache/jserv是否启动了。  6.3运行IsItWorking, FND_WEB.PING, aoljtest等。  7很有可能是FNDFS监听器停止了。看看FND_CONCURRENT_REQUESTS 表中的OUTFILE_NODE_NAME 和 LOGFILE_NODE_NAME 的数值。看看FND_NODES 表。看看tnsnames.ora 中的FNDFS_ entry 。  8日志问卷爱女的位置是由$APPLCSF/$APPLLOG 参数来决定的,输出文件的位置是由$APPLCSF/$APPLOUT 决定的。  9  9.1追踪这个会话(用等待)并且使用tkprof 来分析追踪文件。  9.2生成statspack 报告并进行分析。  9.3使用top/iostat/sar/vmstat 监控O/s 。  9.4通过ping这类基本的测试结果来判断网络的瓶颈。  10  10.1 使用FNDCPASS 来更改APPS密码。  10.2 手工修改wdbsvr.app/cgiCMD.dat 文件。  10.3 更改所有从其他环境指过来的数据库链接。  11  11.1位置:$FND_TOP/secure directory  11.2 重要性:在其他事务中指向数据库服务器。  11.3 应用程序通过使用“Applications Database Id.”来了解DBC文件的名字。+++++++++++++++++++++++++++++++++++++++++1、事务是什么?2、oracle中truncate和delete命令有何区别? 3、Oracle中char和varchar2数据类型有什么区别?有数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其存储长度及类型有何区别? 4、参见如下表结构出版社: 出版社代码 char(2),出版社名称 varchar2(32)图书: 图书编号 char(8),图书名称 varchar2(128),出版社代码 char(2),作者代号 char(4),图书简介 varchar2(128)作者: 作者代号 char(4),作者名称 varchar2(10),性别 char(1),年龄 number(3),文学方向 varchar2(64)获奖名单: 获奖日期 date,获奖人员 char(4)编写SQL语句,找出“作者”库中没有出现在“获奖名单”库中所有作者信息的SQL语句(提示:使用not in、not exists以及外关联三种方法,并说明哪种方法最优。 5、Oracle数据库表存在伪列rowid,请利用rowid编写一个SQL语句,从以下记录中找到唯一记录,并将其flag列更新为YNo name sex flag1 张三 1 N1 张三 1 N1 张三 1 N6、Oracle中,需要在查询语句中把空值(NULL)输出为0,如何处理? 7、见第四题“获奖名单”表,写出SQL语句,查询出在上一个月获奖的人员。 8、见第四题“图书”表,在表上对图书名称、出版社代码、作者代号创建了组合索引,请问在执行如下语句时会不会利用到索引。Select * from 图书 where 图书名称=’xxxx’Select * from 图书 where 图书名称=’xxxx’ and 出版社代码=’bb’Select * from 图书 where 图书名称=’xxxx’ and 作者代号=’ddd’Select * from 图书 where 出版社代码=’yyy’ 9、编写一个简单的Oracle存储过程,输出参数必须有一个是结果集。专家对本试卷的分析:第一,这张笔试卷从题目的考点上来看,属于基础知识类的;第二,从难度上分析属于中等;第三,从题目的设置上来看,该公司的主要用意是考察笔试者的工作经验和项目经验,尽管是基础知识,但是只要没做过开发工作,想回答上来并不容易;第四,通篇只有第4题最后一问涉及到了“优化”的问题,因此判断该公司这张试题主要是面对开发职位的。===================================一:SQL tuning 类1:列举几种表连接方式答:merge join,hash join,nested loop2:不借助第三方工具,怎样查看sql的执行计划?答:sqlplusset autotrace ...utlxplan.sql 创建 plan_table 表3:怎么使用CBO,CBO和RULE的差别?答:在初始化参数里面设置 optimizer_mode=choose/all_rows/first_row 等能使用 cbo。rbo会选择不合适的索引,cbo需要统计信息。4:怎么定位重要(消耗资源多)的SQL?答:根据v$sqlarea 中的逻辑读/disk_read。及寻找CPU使用过量的session,查出当前session的当前SQL语句,或:监视WIN平台Oracle的运行5:怎么跟踪某个session的SQL?答:先找出对应的’sid,serial’,然后调用system_system.set_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分别怎样调整,临时表空间的作用是什么?答: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条记录显示,请给出sqlselect a,b,c,d from (select a,b,c,d from T order by c) where rownumminusselect a,b,c,d from (select a,b,c,d from T order by c) where rownum 或: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:Oracle系统进程主要有哪些,作用是什么?答: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:00alter 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/glance3:对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://www.itpub.net/,Oracle的SQL 优化。3:随意说说你觉得oracle最有意思的部分或最困难的部分答:SQL调优,最困难的是Oracle的网络管理,Oracle的Connect Manager没用过。4:为何要选择做DBA呢?答:爱好加职业历史积累

范文十:阿里巴巴公司DBA笔试题及参考答案

阿里巴巴公司DBA笔试题及参考答案

以下题目,可根据自己情况挑选题目作答,不必全部作答.您也可以就相关问题直接找负责面试人员面述而不笔答……

一:SQL tuning 类

1:列举几种表连接方式

2:不借助第三方工具,怎样查看sql的执行计划

3:如何使用CBO,CBO与RULE的区别

4:如何定位重要(消耗资源多)的SQL

5:如何跟踪某个session的SQL

6:SQL调整最关注的是什么

7:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)

8:使用索引查询一定能提高查询的性能吗?为什么

9:绑定变量是什么?绑定变量有什么优缺点?

10:如何稳定(固定)执行计划

11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么

12:存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql

二:数据库基本概念类

1:pctused and pctfree 表示什么含义有什么作用

2:简单描述table / segment / extent / block之间的关系

3:描述tablespace和datafile之间的关系

4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点

5:回滚段的作用是什么

6:日志的作用是什么

7:SGA主要有那些部分,主要作用是什么

8racle系统进程主要有哪些,作用是什么

三:备份恢复类

1:备份如何分类

2:归档是什么含义

3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复

4:rman是什么,有何特点

5:standby的特点

6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略

四:系统管理类

1:对于一个存在系统性能的系统,说出你的诊断处理思路

2:列举几种诊断IO、CPU、性能状况的方法

3:对statspack有何认识

4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响

5:对raid10 和raid5有何认识

五:综合随意类

1:你最擅长的是oracle哪部分?

2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?

3:随意说说你觉得oracle最有意思的部分或者最困难的部分

4:为何要选择做DBA呢?

一:SQL tuning 类

1:列举几种表连接方式

hash join/merge join/nest loop(cluster join)/index join

2:不借助第三方工具,怎样查看sql的执行计划

set autot on

explain plan set statement_id = &item_id for &sql;

select * from table(dbms_xplan.display);

http://download-west.oracle.com/ ... /b10752/ex_plan.htm

3:如何使用CBO,CBO与RULE的区别

在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目, 然后选择最佳级别(最少的数量)的执行路径来运行查询。

CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同 的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。

4:如何定位重要(消耗资源多)的SQL

select sql_text

from v$sql

where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);

5:如何跟踪某个session的SQL

exec dbms_system.set_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 dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,'');

6:SQL调整最关注的是什么

查看该SQL的response time(db block gets/consistent gets/physical reads/sorts (disk))

7:说说你对索引的认识(索引的结构、对dml影响、为什么提高查询性能)

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:如何稳定(固定)执行计划

query_rewrite_enabled = true

star_transformation_enabled = true

optimizer_features_enable = 9.2.0

创建并使用stored outline

http://download-west.oracle.com/ ... /outlines.htm#26854

11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么

8i中sort_area_size/sort_area_retained_size决定了排序所需要的内存

如果排序操作不能在sort_area_size中完成,就会用到temp表空间

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,dbms_random.value(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

相比之 minus性能较差

数据库基本概念类

1:pctused and pctfree 表示什么含义有什么作用

pctused与pctfree控制数据块是否出现在freelist中,

pctfree控制数据块中保留用于update的空间,当数据块中的free space小于pctfree设置的空间时,

该数据块从freelist中去掉,当块由于dml操作free space大于pct_used设置的空间时,该数据库块将

被添加在freelist链表中。

2:简单描述table / segment / extent / block之间的关系

table创建时,默认创建了一个data segment,

每个data segment含有min extents指定的extents数,

每个extent据据表空间的存储参数分配一定数量的blocks

3:描述tablespace和datafile之间的关系

一个tablespace可以有一个或多个datafile,每个datafile只能在一个tablespace内,

table中的数据,通过hash算法分布在tablespace中的各个datafile中,

tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。

4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点

本地管理表空间(Locally Managed Tablespace简称LMT)

8i以后出现的一种新的表空间的管理模式,通过位图来管理表空间的空间使用。

字典管理表空间(Dictionary-Managed Tablespace简称DMT)

8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用。

动段空间管理(ASSM),

它首次出现在Oracle920里有了ASSM,链接列表freelist被位图所取代,它是一个二进制的数组,

能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质,

ASSM表空间上创建的段还有另外一个称呼叫Bitmap Managed Segments(BMB 段)。

5:回滚段的作用是什么

事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,

当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,

ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。

读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。

当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)

当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)

来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,

若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。

6:日志的作用是什么

记录数据库事务,最大限度地保证数据的一致性与安全性

重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件 归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

7:SGA主要有那些部分,主要作用是什么

SGA:db_cache/shared_pool/large_pool/java_pool

db_cache:

数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着非常关键的作用,

它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库通过使用LRU

算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问.

shared_pool:

共享池的大小对于Oracle 性能来说都是很重要的。

共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL 块和SQL 语句及控制结构

large_pool:

使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存

使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器

java_pool:

为java procedure预备的内存区域,如果没有使用java proc,java_pool不是必须的

8 Oracle系统进程主要有哪些,作用是什么

数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件

日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件

系统监控(smon) :检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

进程监控(pmon) :负责在一个Oracle 进程失败时清理资源

检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。 归档进程(arcn) :在每次日志切换时把已满的日志组进行备份或归档

作业调度器(cjq) :负责将调度与执行系统中已定义好的job,完成一些预定义的工作.

恢复进程(reco) :保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;

备份恢复类

1:备份如何分类

逻辑备份:exp/imp

物理备份:

RMAN备份

full backup/incremental backup(累积/差异)

热备份:alter tablespace begin/end backup;

冷备份:脱机备份(database shutdown)

2:归档是什么含义

关于归档日志:Oracle要将填满的在线日志文件组归档时,则要建立归档日志(archived redo log)。

其对数据库备份和恢复有下列用处:

数据库后备以及在线和归档日志文件,在操作系统和磁盘故障中可保证全部提交的事物可被恢复。

在数据库打开和正常系统使用下,如果归档日志是永久保存,在线后备可以进行和使用。

数据库可运行在两种不同方式下:

NOARCHIVELOG方式或ARCHIVELOG 方式数据库在NOARCHIVELOG方式下使用时,不能进行在线日志的归档,如果数据库在ARCHIVELOG方式下运行,可实施在线日志的归档。3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复?

手工拷贝回所有备份的数据文件

startup mount;

sql alter database recover automatic until time '2004-08-04:10:30:00';

alter database open resetlogs;

4:rman是什么,有何特点?

RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库, RMAN 可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。RMAN有三种不同的用户接口:

COMMAND LINE方式、GUI 方式(集成在OEM 中的备份管理器)、API 方式(用于集成到第三方的备份软件中)。

具有如下特点:

1)功能类似物理备份,但比物理备份强大N倍;

2)可以压缩空块;

3)可以在块水平上实现增量;

4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;

5)备份与恢复的过程可以自动管理;

6)可以使用脚本(存在Recovery catalog 中)

7)可以做坏块监测

5:standby的特点

备用数据库(standby database):ORACLE推出的一种高可用性(HIGH AVAILABLE)数据库方案,

在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份

可以实现快速切换与灾难性恢复,从920开始,还开始支持物理与逻辑备用服务器。

9i中的三种数据保护模式分别是:

1)、MAXIMIZE PROTECTION :最大数据保护与无数据分歧,LGWR将同时传送到备用节点,

在主节点事务确认之前,备用节点也必须完全收到日志数据。如果网络不好,引起LGWR不能传送数据,将引起严重的性能问题,导致主节点DOWN机。

2)、MAXIMIZE AVAILABILITY :无数据丢失模式,允许数据分歧,允许异步传送。

正常情况下运行在最大保护模式,在主节点与备用节点的网络断开或连接不正常时,自动切换到最大性能模式,

主节点的操作还是可以继续的。在网络不好的情况下有较大的性能影响。

3)、MAXIMIZE PERFORMANCE:这种模式应当可以说是从8i继承过来的备用服务器模式,异步传送,

无数据同步检查,可能丢失数据,但是能获得主节点的最大性能。9i在配置DATA GUARD的时候默认就是MAXIMIZE PERFORMANCE

6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略

rman/每月一号 level 0 每周末/周三 level 1 其它每天level 2

四:系统管理类

对于一个存在系统性能的系统,说出你的诊断处理思路

1 做statspack收集系统相关信息

了解系统大致情况/确定是否存在参数设置不合适的地方/查看top 5 event/查看top sql等

2 查v$system_event/v$session_event/v$session_wait

从v$system_event开始,确定需要什么资源(db file sequential read)等

深入研究v$session_event,确定等待事件涉及的会话

从v$session_wait确定详细的资源争用情况(p1-p3的值:file_id/block_id/blocks等)

3 通过v$sql/v$sqltext/v$sqlarea表确定disk_reads、(buffer_gets/executions)值较大的SQL

2:列举几种诊断IO、CPU、性能状况的方法

top/vmstat

statspack

sql_trace/tkprof

查v$system_event/v$session_event/v$session_wait

查v$sqlarea(disk_reads或buffer_gets/executions较大的SQL)

3:对statspack有何认识

StapSpack是Oracle公司提供的一个收集数据库运行性能指标的软件包,该软件包从8i起,在9i、10g都有显著的增强 。该软件包的辅助表(存储相关参数与收集的性能指标的表)由最初的25个增长到43个。收集级别参数由原来的3个(0、5、10)增加到5个(0、5、6、7、10)通过分析收集的性能指标,数据库管理员可以详细地了解数据库目前的运行情况,对数据库实例、等待事件、SQL等进行优化调整。利用statspack收集的snapshot,可以统计制作数据库的各种性能指标的统计趋势图表。

4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响

在系统比较空闲时;nologging选项(如果有dataguard则不可以使用nologging)大的sort_ared_size或pga_aggregate_target较大 5:对raid1+0 和raid5有何认识

RAID 10(或称RAID 1+0)与RAID 0+1不同,它是用硬盘驱动器先组成RAID 1阵列,然后在RAID 1阵列之间再组成RAID 0阵列。RAID 10模式同RAID 0+1模式一样具有良好的数据传输性能,但却比RAID 0+1具有更高的可靠性。RAID 10阵列的实际容量为M×n/2,磁盘利用率为50%。RAID 10也需要至少4个硬盘驱动器构成,因而价格昂贵。 RAID 10的可靠性同RAID 1一样,但由于RAID 10硬盘驱动器之间有数据分割,因而数据传输性能优良。RAID 5与RAID 3很相似,不同之处在于RAID 5的奇偶校验信息也同数据一样被分割保存到所有的硬盘驱动器,而不是写入一个指定的硬盘驱动器,从而消除了单个奇偶校验硬盘驱动器的瓶颈问题。RAID 5磁盘阵列的性能比RAID 3有所提高,但仍然需要至少3块硬盘驱动器。其实际容量为M×(n-1),磁盘利用率为(n-1)/n 。

面试:

1.Oracle进程总结

服务器进程,server process,根据客户请求完成工作;

后台进程,background process,随数据库而启动,完成各种维护任务;

v$bgprocess

SMON:系统监视器(System Monitor),完成系统级的任务,像垃圾收集器。清理临时表空间,收缩回滚段,合并空闲空间,恢复例程;

PMON:进程监视器(Process Monitor),清理异常进程。回滚未提交事务,释放失败进程sga资源,监视重启其他后台进程,向监听器注册实例;

LGWR:日志写入器(Log Writer),将log buffer中的内容写入在线日志文件,每3秒,事务提交,log buffer 1m或1/3;

CKPT:检查点进程(Checkpoint Process),更新数据文件头,触发dbwr;

DBWn:数据库块写入器(Database Block Writer),将脏块从buffer cache写入数据文件;

ARCn:归档进程(Archive Process),将在线日志文件写到其他位置;

CJQ0和Jnnn进程:作业队列;

MMAN:内存管理器(Memory Manager)自动设置SGA大小特性会使用这个进程;

等。

从属进程,slave process,代表服务器进程和后台进程完成一些额外工作;

Io从属进程,模拟异步io,得到更高吞吐量;dbwr,lgwr,rman用到;

并行查询进程,使用并行查询时,会看到名为Pnnn的进程,这些就是并行查询从属进程;

1.delete 与 truncate 的区别

delete:DML操作,操作会放在rollbace segment中,事务提交后才会成功,会触发相应的trigger drop:ddl操作,删除数据且删除表的结构,隐式提交,约束,触发器,索引等,不会删除存储过程和函数,但会invalid

truncate:ddl操作,删除数据但不删表,隐式提交,reuse storage是保留段中已分配的空间,drop storage是释放表中非initial的空间,回收所有空间,除了初始盘的分配空间

delete 删掉行之后,highmark不会下降,表空间使用率显示没有变化。但是再插入新的数据时,

会使用highmark之前的空间,只有highmark前的空间不足时,highmark才会继续上涨。

truncate之后,highmark下降,表空间使用率显示下降。

相同点

truncate和不带where子句的delete, 以及drop都会删除表内的数据

不同点:

1. truncate和 delete只删除数据不删除表的结构(定义)

drop语句将删除表的结构被依赖的约束(constrain),触发器(trigge

r),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状

态.

2.delete语句是dml,这个操作会放到rollback segement中,事务提交

之后才生效;如果有相应的trigger,执行的时候将被触发.

truncate,drop是ddl, 操作立即生效,原数据不放到rollback segme

nt中,不能回滚. 操作不触发trigger.

3.delete语句不影响表所占用的extent, 高水线(high watermark)保持

原位置不动

显然drop语句将表所占用的空间全部释放

truncate 语句缺省情况下见空间释放到 minextents个 extent,除非

使用reuse storage; truncate会将高水线复位(回到最开始).

4.速度,一般来说: drop> truncate > delete

5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来

不及

使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够

大.

想删除表,当然用drop

想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和

事务有关,或者想触发trigger,还是用delete.

如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新

导入/插入数据

2.ash的作用

1.1 关于ASH

我们都知道,用户在ORACLE数据库中执行操作时,必然要创建相应的连接和会话,其中,所有当前的会话信息都保存在动态性能视图V$SESSION中,通过该视图,DBA可以查看用户实际执行的操作,或者当前的等待事件等。通常这部分信息是调优过程中的关键信息,不过,一旦连接断开。会话信息就会被同时从V$SESSION及其它相关视图中清除,也就是说,用户执行完操作走人,而你(DBA),如果不能在当前逮到他,过了这点,就不知道它曾经做过什么了。

10g 版本中,ORACLE又新增加了一个视图(其它是若干,不过咱们还是以session为引子说):

V$ACTIVE_SESSION_HISTORY,看名字就知道,就是活动会话的历史记录,这下,即使用户操作完成后,断开了连接也不怕,因为其会话的情况已经被记录了下来,这项特性就是ASH了,全称与视图名相同,正是:

ACTIVE SESSION HISTORY。

ASH 每秒钟收集一次当前处于非空闲等待事件的、活动状态的、session的信息,并保存在

V$ACTIVE_SESSION_HISTORY视图中,我们(应该以及必须)知道,动态性能视图其实上是ORACLE自行构造的一堆存在于SGA内存区的虚表,就是说,ASH的数据是保存在内存里的,实际上,ORACLE分配给ASH的空间并不是无限大(更何况ORACLE自身管理的内存空间也不是无限大),查看ASH可供使用的内存空间,可以通过如下SQL:

SQL> select pool, name, bytes/1024/1024 Mb From v$sgastat where name like ¨ASH %¨;

POOL NAME Mb

------------ -------------------------- ---------------

shared pool ASH buffers 15.5

直白的讲 ,V$ACTIVE_SESSION_HISTORY中能够记录多少会话信息, 一方面取决于该数据库的SGA 分配给ASH buffers的大小 ,另一方面取决于数据库的启动和关闭(重启数据库时将重构SGA内存区)。这两方面的因素制约了V$ACTIVE_SESSION_HISTORY中能够保存的会话信息的能力,做为DBA,我们肯定是希望ASH尽可能多的保留关于会话的信息,但目前来看单纯依靠V$ACTIVE_SESSION_HISTORY肯定无法实现这点,那怎么办呢?别担心,ORACLE又提供了AWR特性,ASH收集到的会话信息,是做为AWR中快照信息的一部分,被保存到了硬盘上。

1.2 关于AWR

AWR 是 Oracle 10g 版本 推出的新特性, 全称叫Automatic Workload Repository-自动负载信息库。 谈到这一特性呢,不得不先提Statspack,Statspack称的上是ORACLE世界里的老人了,不过毕竟年岁大了,腿脚虽然还算灵便,但效率不那么高了,用时髦话讲就是不能适应时代发展步伐,不能紧跟时代潮流,不能保持做为一名优秀党员的先进性,始终坚持带三个表的为DBA服务。但是,说到底Statspack还是为了党国事业奋斗了一辈子,在党内还是有势力有威信有地位有影响的四有老人,还有余热可以发挥, 虽然其在统计实时性方面,表现已不足以满足DBA多变的需求,依然 不能一下就将其拿下, 因此 ORACLE 采取渐进方式先 推出了AWR,说是辅助Statspack工作,其实明眼人一看就明了,这是新指定的接班人哪。 提示:

关于Statspack的学和用请参考三思笔记相关章节: http://www.5ienet.com/note/html/stat/index.shtml AWR 与前辈Statspack在职业定位方面是相同的,都是负责收集、处理并维护性能统计信息,用于检查和分析性能问题(甚至生成的报告格式都非常接近),AWR生成的统计数据即可以通过V$视图和DBA_*数据字典查看,也可以通过脚本来生成相应报表。谈到相比Statspack,AWR究竟在哪些方面有所提升呢,捡主要的讲就两条:自动+实时,至于功能上的些许提高,不过是因为AWR年轻腿脚利索罢了。 提示:

进入10g版本,ORACLE更加注重强调使用EM(Enterprise Manager)管理各项操作,不过考虑性能、通用度等各方面因素,这里三思仍然主要通过脚本操作来使用AWR和ASH的各项功能。

3.addm ,sr,adr的用途

一. ADDM概述

ADDM提供了一个整体的优化方案.基于一段时间内的

AWR snapshots可以执行ADDM 分析,它可以帮我们

诊断在这段期间内数据库可能存在的瓶颈.

ADDM分析的目标是减小吞吐量的度量值, 在这里我们

将它称为

DB TIME是一个累积值(数据库服务器处理用户请求

所花费的时间).它包括了等待时间和CPU处理的时间

(针对所有活跃的用户进程而言),可以通过查询下面两个

视图来获得它的值:

V$SESS_TIME_MODEL, V$SYS_TIME_MODEL

注意: ADDM不会将处理用户响应时间作为调优的目标,你

应该使用

通过减小

处理更多的用户请求,也就是提高了吞吐量. 通过ADDM报告的

问题是按照DB time排序的.

ADDM所诊断到的问题包括这些:

1. CPU的瓶颈

2. 内存结构上的瓶颈 (SGA,PGA是否已经合理地设置 ?)

3. I/O 是否存在性能瓶颈? (I/O子系统是否工作正常 ?)

4. 高负载的SQL语句 (是否存在消耗过量系统资源的SQL ?)

5. 高负荷的PLSQL执行和编译,同时是否存在高负荷的JAVA使用?

6. RAC相关的问题: 什么是全局缓冲的热块和对象? 是否存在

潜在的内联(interconnect)问题 ?

7. 应用程序的使用是否已经达到了理想化: 是否存在下面

这些问题?

连接池的管理, 过量的解析, 应用程序层的锁竞争.

8. 数据库配置的问题:

日志文件的大小是否合理?

归档是否有问题?

是否频繁的达到检查点?

参数是否合理?

9. 并发的问题: 是否存在

10.

ADDM同时也记录了没有问题的区域.

在诊断的同时,ADDM还给出了一些可能的解决方案. ADDM

一般会提供多个可能的方案供DBA去选择.在产生建议的

时候ADDM充分考虑到了系统变化的多样性.包括:

1. 改变硬件: 增加更多的CPU或者增强I/O子系统;

2. 数据配置: 修改初始化参数文件;

3. 变更Schema: 对一个表或索引进行哈希分区,或者使用

自动的段空间管理(ASSM)

4. 更改应用程序: 例如为序列使用

5. 其它的建议:

对于高负载的SQL,运行

对于热块,运行

二. ADDM 分析的结果

ADDM 分析的结果以一些

1. 问题: 描述了导致数据库性能问题的根源;

2. 征兆: 包含了可能导致其他问题的信息

3. 信息: 报告其他没有问题的模块

三. ADDM 样例

四. 设置ADDM

缺省情况下,ADDM已经被自动启用,通过初始化参数文件中的STATISTICS_LEVEL来控制.

这个参数应该被设置成TYPICAL或者ALL(缺省值是TYPICAL).

如果你将这个参数设置成basic,很多Oracle的特性将被屏蔽.

ADDM 对于I/O性能的评估分析在部分程度上依赖于这个

DBIO_EXPECTED. 这个参数的含义是读取一个数据块

所花费的平均时间(以微秒为单位). Oracle使用的是

缺省值(10毫秒), 对于现在流行的硬盘来说, 这是一个比较

合适的值.如果你的硬盘比较陈旧,或者你有一个非常好的

RAM DISK,请修改这个值.

为了决定DBIO_EXPECTED这个参数该怎样去正确地配置,

需要完成下面的步骤:

1. 基于你的机器的硬件,估量一下读取单个数据库块所花费

的平均时间.

注意:这个度量应该针对随机的I/O(包括寻道的时间).传统的

值应该属于5000-20000微秒这个区间.

2. 为接下来的ADDM执行设置一个时间参数.

例如:如果估计的值是8000微秒,你应该以SYS的身份执行

下面的过程:

EXECUTE DBMS_ADVISOR.SET_DEFAULT_PARAMETER

('ADDM','DBIO_EXPECTED',8000);

五. 通过Oracle Enterprise Manager来访问ADDM:

六. 诊断与ADDM相关的问题:

为了诊断数据库性能问题, ADDM分析可以跨越任意两个snapshots,只要它们满足

下面两个条件:

1. 两个快照在创建过程中没有错误并且没有被删除;

2. 两个快照期间数据库不能发生关闭和启动的事件

(同statspack).

最简单的运行ADDM分析的方法就是运行Enterprise Manager.

另外,也可以手工地执行 $ORACLE_HOME/rdbms/admin/addmrpt.sql以及

dbms_advisor包.

这些脚本和包可以被任何用户执行,只要它们被赋予了

ADVISOR的角色.

6.1 使用addmrpt.sql来运行

(译者注:和statspack包中的spreport.sql非常相似)

6.2 使用dbms_advisor包:

基本步骤:

1) 创建一个task: dbms_advisor.create_task ;

2) 设置相关的参数:

START_SNAPSHOT,END_SNAPSHOT

(通过DBMS_ADVISOR.SET_TASK_PARAMETER来完成)

3) 执行这个task: DBMS_ADVISOR.EXECUTE_TASK

4) 查询相关信息: DBMS_ADVISOR.GET_TASK_REPORT

可以写一个PL/SQL函数,来完成下面这些功能:

. 自动识别最接近于指定时间的snapshots

. 运行ADDM

create or replace function run_addm

(start_time in DATE,end_time in DATE)

return varchar2

is

begin_snap number;

end_snap number;

tid number;

tname varchar2(30);

tdesc varchar2(256);

begin

-- Find the snapshot IDs corresponding to the given input parameters

select max(snap_id) into begin_snap

from DBA_HIST_SNAPSHOT

where trunc(end_interval_time,'MI')

select min(snap_id) into end_snap

from DBA_HIST_SNAPSHOT

where trunc(end_interval_time,'MI') >=end_time;

-- set Task name to NULL and let create_task return a unique name for

-- this task

tname:=' ';

-- set description for this task

tdesc:='run_addm( ' || begin_snap || ', ' || end_snap || ' )';

dbms_advisor.create_task('ADDM',tid,tname,tdesc);

dbms_advisor.set_task_parameter(tname,'START_SNAPSHOT',begin_snap);

dbms_advisor.set_task_parameter(tname,'END_SNAPSHOT',end_snap);

dbms_advisor.execute_task(tname);

retuen tname;

end;

/

在SQLPLUS中调用这个函数:

时间区间: 7:00PM -9:00 PM

set pagesize 0 long 1000000 longchunksize 1000

column get_clob form a80;

variable task_name varchar(30);

begin

:task_name := run_addm(

to_date('19:00:00 (10/20/04)','HH24:MI:SS (MM/DD/YY)'),

to_date('21:00:00 (10/20/04)','HH24:MI:SS (MM/DD/YY)'));

end;

/

--获得addm report

select dbms_advisor.get_task_report(:task_name)

from dba_advisor_taks t

where t.task_name=:taskname

and t.owner=SYS_CONTEXT('USERENV','SESSION_USER');

注意: SQLPLUS中的系统变量long需要被设置的足够大

以便可以显示全部的ADDM REPORT,因为

dbms_advisor.get_task_report返回的是一个

CLOB.

七. 与 ADDM相关的视图:

DBA_ADVISOR_TASKS

DBA_ADVISOR_LOG

DBA_ADVISOR_RECOMMENDATIONS

DBA_ADVISOR_FINDINGS 在平时的时候,遇到一些问题总会在metalink上提交SR(Service Request,SR,过去也叫Technical Assistance Request,TAR ),我们提交sr的时候,总是希望早点能够得到问题的解答。那么我们该如何提交sr,提交sr后该如何提高解答的速度呢?

1.sr分为4个等级,按紧急程度:一级>二级>三级>四级。一级一般是要求24小时处理,也就是说,oracle会连续的24小时帮你解决问题,但是也要求你能24小时的回复相应的要求,如果你很长时间没有回复,等级也会自动的降级。一级虽然能24小时处理,但是也有不好的地方,就是这个sr在下班的时候,会转移到另一个工程师处,可能下一个工程师就不太了解你系统的情况。二级一般不会24小时处理,但是是某个工程师一直跟进,这个也是我们常常提交的sr等级。三级四级我们不太常用,四级我们一般会问问一些和生产系统没关系的问题,或者提交一个要求,请oracle给你免费的寄安装介质。

2.处理sr有oracle的五大区域处理:美国、英国、印度、澳大利亚、大连,按照你当前提交的时间,提交给不同时区的工程师处理,中国一般是大连的处理,如果是一级sr,大连的工程师会将sr转移给下一区印度的工程师。一般工程师处理问题时,有个处理的队列,按照紧急程度排列,最上面的会最先处理,如果一个问题连续update三次,oracle工程师那边就显示的很紧急了,一般会优先处理你的问题了。:)

3.提交问题的时候最好用英文书写,如果用中文,就需要时间进行翻译,一般会多消耗2小时左右的时间。如果长时间还没有翻译好,可以打800的电话进行催促。

4.Escalation问题的升级,可以打800、可以在sr中提及、可以找DM,可以是基于你的判断,来要求升级问题。

5.SR界面中的提示缩写说明:

5.1 oracle回复:

NEW – New TAR

WIP – Work in Progress

RVW – Review

5.2 等待oracle技术支持的回复:

1CB – 1st Callback

2CB – 2nd Callback

IRR – Immediate Response Required

INT – Waiting Internal Response

DEV – Assigned to Development

5.3 等待客户的回复:

CUS – Waiting on Customer

SLP – Sleep until Customer Available

LMS – Left Message

SCL – Soft Close

HCL – Hard Close

WCP – Waiting for Customer to Apply Patch

6.一般在没有回复14天后自动的soft close,但是soft close如果有问题,还是能打开的,继续跟进问题。

7.在sr的信息是有法律效应的,要是出了事情,完全可以根据sr的内容和oracle打官司。因此……sr的回复一般都比较保守,比较谨慎。

自动诊断存储库(Automatic Diagnostic Repository) 是oracle database 11g的一个新特性,它提供了一个中心化存储trace files, dumps, health monitor reports, alert logs等. 不同的产品和实例都有统一的目录结构, 把各自的诊断数据存储在自己的ADR_HOME里.

基本概念:

1. Problem

Problem就是数据库的一个比较严重的错误,例如:ORA-600, ORA-04031, ORA-07445. 每个problem都有problem key和唯一的problem id, 并被存储于ADR中.

Problem key: 以文本格式存储了错误代码(ORA-600)和其它更多的参数. 如果两个或两个以上的incidents有相同的problem key,那么他们是有相同的错误导致的.

2. Incident

出现一次problem就是一个Incident. 如果一个problem发生多次,则没发生一次就产生一个incident,并有唯一的incident id 存储于ADR. 当产生一个incident时,将发生incident alert到 OEM, 以dump files的格式收集诊断数据,然后把dump文件存储在ADR incident子目录里.

3. Incident package

incident package是所有incidents数据的集合. 逻辑包逻辑上定义了incidents的集合, 在上传包给oracle support之前,必须创建物理的包(physic package). 可以用ADRCI创建和管理包,具体细节见后文.

4. ADRCI 命令:

正确设置ORACLE_HOME, PATH之后可以使用adrci.

ADRCI: Release 11.1.0.6.0 - Beta on Mon Jul 13 14:02:29 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.

ADR base =

adrci> help

HELP [topic]

Available Topics:

CREATE REPORT

ECHO

EXIT

HELP

HOST

IPS

PURGE

RUN

SET BASE

SET BROWSER

SET CONTROL

SET ECHO

SET EDITOR

SET HOMES | HOME | HOMEPATH

SET TERMOUT

SHOW ALERT

SHOW BASE

SHOW CONTROL

SHOW HM_RUN

SHOW HOMES | HOME | HOMEPATH

SHOW INCDIR

SHOW INCIDENT

SHOW PROBLEM

SHOW REPORT

SHOW TRACEFILE

SPOOL

There are other commands intended to be used directly by Oracle, type

adrci> show home

ADR Homes:

diag/tnslsnr/liang/listener

diag/rdbms/orcl/orcl

adrci> show incident

ADR Home = /u01/app/oracle/diag/tnslsnr/liang/listener:

*************************************************************************

0 rows fetched

ADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl:

*************************************************************************

INCIDENT_ID PROBLEM_KEY CREATE_TIME

-------------------- ----------------------------------------------------------- ----------------------------------------

2529 ORA 600 [kpotcgah-7] 2009-07-12 00:46:39.840091 +08:00

1 rows fetched

adrci> show problem

ADR Home = /u01/app/oracle/diag/tnslsnr/liang/listener:

*************************************************************************

0 rows fetched

ADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl:

*************************************************************************

PROBLEM_ID PROBLEM_KEY LAST_INCIDENT LASTINC_TIME

-------------------- ----------------------------------------------------------- -------------------- ----------------------------------------

1 ORA 600 [kpotcgah-7] 2529 2009-07-12 00:46:39.840091 +08:00 1 rows fetched

adrci> show incident -mode brief

ADR Home = /u01/app/oracle/diag/tnslsnr/liang/listener:

*************************************************************************

0 rows fetched

ADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl:

*************************************************************************

**********************************************************

INCIDENT INFO RECORD 1

**********************************************************

INCIDENT_ID 2529

STATUS ready

CREATE_TIME 2009-07-12 00:46:39.840091 +08:00

PROBLEM_ID 1

CLOSE_TIME

FLOOD_CONTROLLED none

ERROR_FACILITY ORA

ERROR_NUMBER 600

ERROR_ARG1 kpotcgah-7

ERROR_ARG2 12534

ERROR_ARG3 ORA-12534: TNS:operation not supported

ERROR_ARG4

ERROR_ARG5

ERROR_ARG6

ERROR_ARG7

ERROR_ARG8

SIGNALLING_COMPONENT

SIGNALLING_SUBCOMPONENT

SUSPECT_COMPONENT

SUSPECT_SUBCOMPONENT

ECID

IMPACTS 0

1 rows fetched

adrci> show incident -mode detail

ADR Home = /u01/app/oracle/diag/tnslsnr/liang/listener:

************************************************************************* 0 rows fetched

ADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl:

*************************************************************************

**********************************************************

INCIDENT INFO RECORD 1

**********************************************************

INCIDENT_ID 2529

STATUS ready

CREATE_TIME 2009-07-12 00:46:39.840091 +08:00 PROBLEM_ID 1

CLOSE_TIME

FLOOD_CONTROLLED none

ERROR_FACILITY ORA

ERROR_NUMBER 600

ERROR_ARG1 kpotcgah-7

ERROR_ARG2 12534

ERROR_ARG3 ORA-12534: TNS:operation not supported

ERROR_ARG4

ERROR_ARG5

ERROR_ARG6

ERROR_ARG7

ERROR_ARG8

SIGNALLING_COMPONENT

SIGNALLING_SUBCOMPONENT

SUSPECT_COMPONENT

SUSPECT_SUBCOMPONENT

ECID

IMPACTS 0

PROBLEM_KEY ORA 600 [kpotcgah-7]

FIRST_INCIDENT 2529

FIRSTINC_TIME 2009-07-12 00:46:39.840091 +08:00

LAST_INCIDENT 2529

LASTINC_TIME 2009-07-12 00:46:39.840091 +08:00

IMPACT1 0

IMPACT2 0

IMPACT3 0

IMPACT4 0

KEY_NAME ProcId

KEY_VALUE 16.52

KEY_NAME Client ProcId

KEY_VALUE oracle@liang.2363_4140193472

KEY_NAME SID

KEY_VALUE 170.17926

OWNER_ID 1

INCIDENT_FILE /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_w000_2363.trc

OWNER_ID 1

INCIDENT_FILE /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_2529/orcl_w000_2363_i2529.trc

1 rows fetched

adrci> show incident -mode detail -p

ADR Home = /u01/app/oracle/diag/tnslsnr/liang/listener:

*************************************************************************

0 rows fetched

ADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl:

*************************************************************************

**********************************************************

INCIDENT INFO RECORD 1

**********************************************************

INCIDENT_ID 2529

STATUS ready

CREATE_TIME 2009-07-12 00:46:39.840091 +08:00

PROBLEM_ID 1

CLOSE_TIME

FLOOD_CONTROLLED none

ERROR_FACILITY ORA

ERROR_NUMBER 600

ERROR_ARG1 kpotcgah-7

ERROR_ARG2 12534

ERROR_ARG3 ORA-12534: TNS:operation not supported

ERROR_ARG4

ERROR_ARG5

ERROR_ARG6

ERROR_ARG7

ERROR_ARG8

SIGNALLING_COMPONENT

SIGNALLING_SUBCOMPONENT

SUSPECT_COMPONENT

SUSPECT_SUBCOMPONENT

ECID

IMPACTS 0

PROBLEM_KEY ORA 600 [kpotcgah-7]

FIRST_INCIDENT 2529

FIRSTINC_TIME 2009-07-12 00:46:39.840091 +08:00

LAST_INCIDENT 2529

LASTINC_TIME 2009-07-12 00:46:39.840091 +08:00

IMPACT1 0

IMPACT2 0

IMPACT3 0

IMPACT4 0

KEY_NAME ProcId

KEY_VALUE 16.52

KEY_NAME Client ProcId

KEY_VALUE oracle@liang.2363_4140193472

KEY_NAME SID

KEY_VALUE 170.17926

OWNER_ID 1

INCIDENT_FILE /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_w000_2363.trc

OWNER_ID 1

INCIDENT_FILE /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_2529/orcl_w000_2363_i2529.trc

1 rows fetched

5. Package Incidents

Step 1—Create a logical incident package.

Step 2—Add diagnostic information to the incident package

Step 3—Generate the physical incident package

5.1 Create a logical incident package

1). 创建逻辑包

命令:

IPS CREATE PACKAGE INCIDENTincident_number

IPS CREATE PACKAGE PROBLEMproblem_ID

IPS CREATE PACKAGE PROBLEMKEY

IPS CREATE PACKAGE SECONDSsec

IPS CREATE PACKAGE TIME'start_time'TO'end_time'

实例:

adrci> ips create package incident 2529

DIA-48448: This command does not support multiple ADR homes

adrci> show home

ADR Homes:

diag/tnslsnr/liang/listener

diag/rdbms/orcl/orcl

注: 该命令不支持多ADR_HOME

adrci> set home diag/rdbms/orcl/orcl

adrci> ips create package incident 2529

Created package 3 based on incident id 2529, correlation level typical

此时incident 2529逻辑包已经创建成功.

adrci> IPS CREATE PACKAGE TIME '2007-07-24 00:00:00 -07:00' to '2007-07-30 23.59.59 -07:00'

2). 添加信息到逻辑包

命令:

IPS ADD INCIDENTincident_numberPACKAGEpackage_number

IPS ADD FILEfilespecPACKAGEpackage_number

注: filespec必须是全路径+文件名

3). 产生物理包

命令:

完全包(complete package)

IPS GENERATE PACKAGEpackage_numberINpath

增量包(incremental package:containing only the incidents that have occurred since the last package generation.)

IPS GENERATE PACKAGEpackage_numberINpathINCREMENTAL

实例:

adrci> ips generate package 3 in /tmp

Generated package 3 in file /tmp/ORA600kpo_20090713141545_COM_1.zip, mode complete

6. 配置IPS

1). 显示IPS配置

adrci> ips show configuration

2). 配置IPS

ipssetconfigurationparameter_idvalue

例如:adrci> ips set configuration 3 10

IPS配置参数

4.iptables :监听端口1521 ,ip:10.10.10.128

4.复合索引

5.一张表10万行,另外一个表1亿行,怎么来优化sql

6.数据库突然很慢,怎么来查看原因,最后写相应的sql语句,说明一下

7.oracle的高可用有哪些?具体怎么实现,写出对应的技术

8.简述数据库的历史,现在有哪些先进的数据库技术和他们的主要应用.