阿里巴巴的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呢?答:爱好加职业历史积累
阿里巴巴的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呢?答:爱好加职业历史积累