数据库程序员面试分模拟题3_第1页
数据库程序员面试分模拟题3_第2页
数据库程序员面试分模拟题3_第3页
数据库程序员面试分模拟题3_第4页
数据库程序员面试分模拟题3_第5页
已阅读5页,还剩8页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库程序员面试分模拟题3简答题1.

如何启动Oracle数据库的监听日志?正确答案:Oracle监听器是一个服务器端程序,用于监听所有来自客户端的请求,并为其提供数据库服务。

以下是一些常(江南博哥)用的设置。

1)设置监听器日志文件目录:lsnrctlSETLOG_DIRECTORYdirectory。

2)设置监听器日志文件名:lsnrctlSETLOG_FILEfile_name。

3)设置监听器日志的状态:lsnrctlSETLOG_STATUS{on|off}。[考点]网络

2.

审计有哪些类型?正确答案:Oracle中审计总体上可分为“标准审计”和“细粒度审计”,后者也称为“基于政策的审计”,在Oracle10g之后功能得到很大增强。其中,标准审计可分为用户级审计和系统级审计。用户级审计是任何Oracle用户都可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功和(或)不成功的访问以及各种类型的SQL操作。系统级审计只能由DBA设置,用以监测成功或失败的登录要求、监测GRANT和REVOKE操作以及其他数据库级权限下的操作。

在Oracle中分别支持以下三种标准审计类型,或者说,可以从3个角度去启用审计:

1)语句审计(StatementAuditing),对某种类型的SQL语句审计,不指定结构或对象。审计SQL语句的成功执行或不成功执行。这里从SQL语句的角度出发,进行指定。审计只关心执行的语句。例如,AUDITCREATETABLE语句,其中,AUDIT为使用审计的关键字。该语句表示对CREATETABLE语句的执行进行记录,不管这条语句是否为针对某个对象的操作。

2)权限审计(PrivilegeAuditing),对执行相应动作的系统特权的使用审计,对涉及某些权限的操作进行审计,这里强调“系统权限”,例如,“AUDITCREATETABLE;”命令,可以表咀对涉及“CREATETABLE”权限的操作进行审计。所以,在这种命令的情况下,既产生一个语句审计,又产生了一个权限审计。有时候语句审计和权限审计是相互重复的。

3)对象审计(ObjectAuditing),对一特殊模式对象上的指定对象的审计。对一个特殊模式对象上的DML语句进行审计。记录作用在指定对象上的操作。例如,AUDITSELECTONSCOTT.DEPT语句,表示指定SCOTT用户的DEPT表,审计对其进行的SELECT语句。

[考点]审计

3.

在不知道原密码的明文是什么的情况下,如何更新密码?正确答案:在Oracle中,若用户的密码变为锁定状态(LOCKED、LOCKED(TIMED))时,DBA可以直接执行“ALTERUSER用户名ACCOUNTUNLOCK”来解锁。但是,如果用户的状态变成过期状态(EXPIRED、EXPIRED(GRACE)),那么DBA必须要更改用户的密码账户才能重新使用。但有些时候,因为各种原因并不知道原密码的明文是什么,这时候可以有如下2种办法来更新密码。

1.用原密码的密文来更改密码

在Oracle10g中,DBA_USERS视图的PASSWORD字段提供了密码的密文形式,而在Oracle11g中,该字段被弃用了,内容为空,但是在基表USER$中的PASSWORD字段依然有记录密文形式,所以可以通过如下的形式来获取密码的密文形式:

SELECTD.USERNAME,D.ACCOUNT_STATUS,D.LOCK_DATE,D.EXPIRY_DATE,D.PROFILE,

NVL(D.PASSWORD,(SELECTNB.PASSWORDFROMUSER$NBWHERENB.NAME=D.USERNAME))PASSWORD

FROMDBA_USERSDWHERED.USERNAME='LHRSYS';

另外,可以通过DBMS_METADATA.GET_DDL包或者expdp、exp命令来获取创建用户的语句从而获取密码的密文形式。

SYS@lhrdb>setlong9999

SYS@lhrdb>SELECTDBMS_METADATA.GET_DDL('USER','LHRSYS')DDL_SQLFROMDUAL;

DDL_SQL

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

CREATEUSER"LHRSYS"IDENTIFIEDBYVALUES'S:853EA80BAE11F79D6946453F38059E30313FE84C96AE2EE4F3AA35A648BD;F809740420A44EFC'

DEFAULTTABLESPACE"USERS"TEMPORARYTABLESPACE"TEMP"

获取了密码的密文后就可以用如下的命令来修改了,注意:使用密文的命令中多了一个VALUES关键字:

所以,即使不知道用户的原密码是什么,也可以用它的密文来更改密码。这样既保持了密码不改变,又可以把EXPIRED的状态更改掉。

2.直接更新USERS基表

不管用户的状态是什么,通过更新USERS表可以让用户处于OPEN状态。[考点]用户

4.

什么是反向键索引(ReverseKeyIndexes)?正确答案:反向键索引也称为反转索引,是一种B-Tree索引,它在物理上反转每个索引键的字节,但保持列顺序不变。例如,如果索引键是20,并且在一个标准的B-Tree索引中此键被存为十六进制的两个字节C1、15,那么反向键索引会将其存为15、C1。

SYS@orciasm>SELECTDUMP(20,'16')FROMDUAL;

DUMP(20,'16')

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

Typ=2Len=2:c1,15

反向键索引解决了在B-Tree索引右侧的叶块争用问题。在OracleRAC数据库中的多个实例重复不断地修改同一数据块时,这个问题尤为严重。在一个反向键索引中,对字节顺序反转,会将插入分散到索引中的所有叶块。例如键20和21,本来在一个标准键索引中会相邻,现在存储在相隔很远的独立的块中。这样,顺序插入产生的I/O被更均匀地分布了。

使用反向键索引的最大的优点莫过于降低索引叶子块的争用,减少热点块,提高系统性能。由于反向键索引自身的特点,如果系统中经常使用范围扫描进行读取数据(例如在WHERE子句中使用“BETWEENAND”语句或比较运算符“>”“<”“>=”“<=”等),那么反向键索引将不会被使用,因为此时会选择全表扫描,反而会降低系统的性能。只有对反向键索引列进行“=”操作时,其反向键索引才会使用。

创建索引时使用REVERSE关键字,如下:

CREATEINDEXREV_INDEX_LHRONXT_REVI_LHR(OBJECT_ID)REVERSE;

ALTERINDEXREV_INDEXREBUIDNOREVERSE;

ALTERINDEXNAME_INXREBUILDONLINENOREVERSE;

ALTERINDEXID_INXREBUILDREVERSEONLINE;

ALTERINDEXID_INXREBUILDONLINEREVERSE;[考点]分类

5.

SAPIQ属于行式还是列式数据库?正确答案:SAPIQ属于列式数据库。SAPIQ是SAP(SystemsApplicationsandProductsinDataProcessing)收购的原属Sybase的产品。Sybase在2004年左右就推出了列存储的SAPIQ(曾用名SybaseIQ)数据库系统,主要用于在线分析、数据挖掘、商业智能等查询密集型应用。不同于传统的数据库,SAPIQ拥有列式存储、网格架构、专利的数据压缩和先进的查询优化器。需要注意的是,由于SAPIQ采用关系模型,所以,IQ数据库依然属于关系型数据库。IQ的架构与大多数关系型数据库不同,它的设计主要用以支持大量并发用户的即时查询,其设计与执行进程优先考虑查询性能,其次是完成批量数据更新的速度。而传统关系型数据库引擎的设计既考虑在线的事务进程又考虑数据仓库(而事实上,往往更多地关注事务进程)。[考点]行存储和列存储

6.

在创建数据文件时如何指定裸设备?正确答案:和普通文件没有太大的区别,都是在单引号里边写上裸设备的详细路径就可以了。例如,要创建一个表空间,使用两个裸设备,每个分别为30MB的大小,可以用下面的命令:

CREATETABLESPACERAW_TS

DATAFILE'/dev/raw1'SIZE30712k

DATAFILE'/dev/raw2'SIZE30712k;[考点]裸设备(RAW)

7.

实例恢复和介质恢复的区别是什么?正确答案:Redo日志是Oracle为确保已经提交的事务不会丢失而建立的一种机制。实际上,Redo日志的存在是为两种场景准备的,一种称为实例恢复(InstanceRecovery),另一种称为介质恢复(MediaRecovery)。

Redo日志的数据是按照THREAD来组织的,对于单实例系统来说,只有一个THREAD;对于RAC系统来说,可能存在多个THREAD。每个数据库实例拥有一组独立的Redo日志文件,拥有独立的LogBuffer,某个实例的变化会被独立地记录到一个THREAD的Redo日志文件中。

有关实例恢复和介质恢复的区别见下表。分类实例恢复介质恢复简介数据库没有正常关闭(即非一致性关闭,例如断电、硬件故障、关键后台进程出现故障(PMON、LGWR等),执行了SHUTDOWNABORT或STARTUPFORCE命令)会导致数据库实例在重启时自动使用联机Redo日志和Undo数据执行实例恢复,具体恢复的工作是由SMON这个后台进程来完成的,SMON自动应用联机Redo日志文件中的条目和读取Undo表空间中的数据完成实例恢复而不需要任何用户干预。一个单实例数据库或者RAC数据库所有实例失败之后,第一个打开数据库的实例会自动执行实例恢复,这种形式的实例恢复称为崩溃恢复(CrashRecovery)。在RAC环境中,若RAC数据库的一部分但不是所有实例失败后,在RAC中幸存的实例自动执行失败实例的恢复介质恢复是当存储的数据文件出现故障(例如,数据文件丢失、损坏)的时候进行的,介质恢复无法自动进行,必须手动执行RECOVERDATABASE或者RECOVERDATAFILE命令来实施。在做介质恢复的时候,需要使用归档日志。介质恢复是基于物理备份恢复数据,是Oracle数据库出现介质故障时恢复的重要保障发生时机当EndSCN不等于StartSCN的时候,数据库需要做实例恢复。若数据库异常关闭,则EndSCN号将为空,数据库就需要做实例恢复当SystemCheckpointSCN、DatafileCheckpointSCN和StartSCN三者中有一个不同时就需要做介质恢复恢复的目的在数据库发生故障时,确保BufferCache中的数据不会丢失;确保数据库可以处于一致性状态。只有当联机Redo日志文件和Undo表空间的介质没有被破坏才能确保实例恢复能够成功当数据文件发生故障时,能够恢复数据利用资源OnlineRedo、ActiveRedo和UndoBackupSet、ArchiveLog、Online和InactiveRedo等过程利用Redo前滚(重做);打开数据库;利用Undo回滚RESTORE:RECOVER是否自动完成自动完成手动恢复,需要DBA干预,分为完全和不完全恢复是否需要开启归档不需要开启归档模式需要开肩归档模式举例用户在8:30:00触发了5个事务,分别是T1、T2、T3、T4、T5。在8:38:00之前,T3和T5完成,在8:38:00产生了一个检查点事件,此时系统将对数据的更改都写入数据文件中。在8:38:27时,出现故障,导致实例异常关闭,在8:38:00至8:38:27之间的操作仅仅记录在Redo日志中,并没有将这些更改写入数据文件中。当实例重新启动时,SMON将执行实例恢复。例如,在8:43:00分重启实例,SMON执行实例恢复,整个执行过程可以分为两个部分:前滚和回滚。前滚是指8:38:00至8:38:27:00之间的操作应用到数据文件上,由于这些操作都记录在Redo日志中,因此只需要从Redo日志中读取这些操作并执行即可。前滚执行完毕后,SMON进程立即打开数据库,此时,数据库处于实例异常关闭前的状态。打开数据库后进入回滚,回滚阶段是指将未提交的事务回滚,即将示例中T1、T2和T4回滚,在8:45:00时,实例恢复执行完毕在系统重启后发现数据库中数据文件被rm删除了,这个时候需要执行RESTOREDATABASE和RECOVERDATABASE命令进行介质恢复[考点]RMAN

8.

获取执行计划有哪几种方法?正确答案:对于这几种获取执行计划的方法有如下结论:

1)若目标SQL需要执行很长时间才能返回结果,则推荐使用EXPLAINPLANFOR来获取执行计划。

2)若要查询目标SQL的所有子游标的执行计划,则推荐使用DBMS_XPLAN.DISPLAY_CURSOR('&SQLID',NULL,'ADVANCEDALLSTATS')或awrsqrpt.sql来获取执行计划。

3)若要分析SQL语句的内部调用详情,则推荐使用10046事件。

4)若想确保看到真实的执行计划,则不能使用EXPLAINPLANFOR和SETAUTOTRACETRACEONLYEXPLAIN。

5)若想获取到表的访问次数,则推荐/*+GATHER_PLAN_STATISTICS*/。

6)若数据库版本大于10g,则对执行时间较长的SQL语句推荐使用SQL实时监控特性查看html报告。[考点]执行计划

9.

如果联机Redo日志文件损坏,那么如何恢复?正确答案:联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢失据的风险,强烈建议在条件允许的情况下,对Redo日志进行多路镜像。需要注意的是,RMAN不能备份联机Redo日志文件。所以,联机Redo日志一旦出现故障,则只能进行清除日志了。清除日志文件即表明可以重用该文件。如果日志文件已经归档,那么可以使用:

ALTERDATABASECLEARLOGFILEGROUPN;

如果该日志还没有归档,那么需要用:

ALTERDATABASECLEARUNARCHIVEDLOGFILEGROUPN;--不需要数据文件

ALTERDATABASECLEARUNARCHIVEDLOGFILE...UNRECOVERABLEDATAFILE;--需要数据文件[考点]RMAN

10.

数据库参数RESOURCE_LIMIT的作用是什么?正确答案:该参数用来启用或禁用数据库资源限制(通过PROFILE设定)。关于RESOURCE_LIMIT需要注意以下两点:

1)用户所有拥有的PROFILE中有关密码的限制永远生效,不受限制。

2)用户所有拥有的PROFILE中有关资源的限制与RESOURCE_LIMIT参数的设置有关,当为TRUE时生效,当为FALSE时(默认值是FALSE)无效。在Oracle12c之前该参数默认为FALSE,而从12c开始,该参数默认为TRUE。

11.

能否把整个裸设备都作为Oracle的数据文件?正确答案:不行。必须让数据文件的大小稍微小于该裸设备的实际大小,一般来说,至少要空出两个Oracle块的大小。[考点]裸设备(RAW)

12.

数据库安全包括哪两层含义?正确答案:数据库安全包括两层含义:第一层是指系统运行安全,例如,一些网络不法分子通过网络、局域网等途径入侵计算机使系统无法正常启动,或超负荷让服务器运行大量算法,并关闭CPU风扇,使CPU过热烧坏等破坏性活动;第二层是指系统信息安全,例如,黑客对数据库入侵,并盗取想要的资料。数据库系统的安全特性主要是针对数据而言的,包括数据独立性、数据安全性、数据完整性、并发控制、故障恢复等几个方面。[考点]数据库安全

13.

如何监控TEMP和Undo表空间并将耗费TEMP和Undo空间非常大的SQL语句记录下来?正确答案:总体思路是采用JOB定时将耗费TEMP和Undo的SQL语句记录在表中,这样日后查询将是非常方便的。[考点]性能诊断

14.

RAC等待事件gcbufferbusyacquire和gcbufferbusyrelease的区别是什么?正确答案:gcbufferbusy是RAC数据库中常见的等待事件,从Oracle11g开始gcbufferbusy分为gcbufferbusyacquire和gcbufferbusyrelease。

gcbufferbusyacquire是当会话1尝试请求访问远程实例上的数据块,但是在会话1之前已经有相同实例上另外一个会话2请求访问了相同的数据块,并且没有完成,那么会话1等待gcbufferbusyacquire。

gcbufferbusyrelease是在会话1之前已经有远程实例的会话2请求访问了相同的数据块,并且没有完成,那么会话1等待gcbufferbusyrelease。[考点]RAC

15.

Oracle的表可以分为哪几类?正确答案:从理论上来讲,不存在一种能够满足所有读取要求的数据存储方式,所以,Oracle设计了大约5种数据的存储格式,详见下表。

从上表中可以看出,没有最好的技术,只有最合适的技术。[考点]对象

16.

Oracle数据库的介质恢复包含哪两个过程?正确答案:介质恢复是基于物理备份恢复数据,它是Oracle数据库出现介质故障时恢复的重要保障。介质恢复包括块恢复、数据文件恢复、表空间恢复和整个数据库的恢复。介质恢复主要是针对错误类型中的介质失败,如果是少量的块失败,那么可以使用介质恢复中的块恢复来快速修复;但如果是其他情况的丢失,那么需要根据具体情况,可使用数据文件恢复、表空间恢复甚至全库恢复。

Oracle数据库的介质恢复实际上包含了两个过程:数据库还原(RESTORE)与数据库恢复(RECOVER),具体如下:

1)数据库还原是指利用备份的数据库文件来替换已经损坏的数据库文件或者将其恢复到一个新的位置。RMAN在进行还原操作时,会利用恢复目录(有建立恢复目录的话就使用目标数据库的控制文件)来获取备份信息,并从中选择最合适的备份进行修复操作。当选择备份时,有以下两个原则:①选择距离恢复目录时刻最近的备份;②优先选择镜像复制,其次才是备份集。

2)数据库恢复是指数据文件的介质恢复,即为修复后的数据文件应用联机或归档日志,从而将修复的数据库文件更新到当前时刻或指定时刻下的状态。在执行恢复数据库时,需要使用RECOVER命令。

还原是将某个时间点的数据文件的副本再拷贝回去,还原后的数据库处于不一致的状态,或不是最新的状态,还需要执行恢复操作。恢复就是使用归档日志文件和联机Redo日志文件将不一致的数据库应用到一致性状态。需要注意的是,还原只是建立在数据库备份的基础版本上,例如,如果数据库备份包括0级备份和很多1级备份,还原只是应用0级备份,恢复过程会根据情况自动应用1级备份或Redo日志将数据库恢复到一致性的状态。[考点]RMAN

17.

会话游标有哪些属性?正确答案:会话游标有4个属性,见下表。属性类型简介适用对象适用SQLSQL%FOUND布尔型最近的FETCH是否提取到数据,表示一条SQL语句被执行成功后受其影响而改变的记录数是否大于或等于1,若是则赋值为TRUE,否则为FALSE。在一条DML语句被执行前,SQL%FOUND的值是NULL隐式游标、显式游标INSERT、DELETE、UPDATE、SELECT...INTO...SQL%NOTFOUND布尔型最近的FETCH是否没有提取到数据,表示一条SQL语句被执行成功后受其影响而改变的记录数是否为0,若是则赋值为TRUE,否则为FALSE。在一条DML语句被执行前,SQL%NOTFOUND的值是NULL隐式游标、显式游标SQL%ROWCOUNT数值型表示最近的一条SQL语句成功执行后受其影响而改变的记录的数最,后续执行的SQL会覆盖SQL%ROWCOUNT的值隐式游标、显式游标SQL%ISOPEN布尔型游标是否打开,当游标打开时返回TRUE。对于隐式游标而言,SQL%ISOPEN的值永远是FALSE显式游标

当执行一条DML语句后,DML语句的结果保存在这4个游标属性中,这些属性用于控制程序流程或者了解程序的状态。当运行DML语句时,PL/SQL打开一个内建游标并处理结果。在这些属性中,SQL%FOUND和SOL%NOTFOUND是布尔值,SQL%ROWCOUNT是整数值。需要注意的是,若游标属于隐式游标,则在PL/SOL中可以直接使用上表中的属性;若游标属于显式游标,则上表中的属性里“SQL%”需要替换为自定义显式游标的名称。上表中的这4个属性对于动态游标依然适用。[考点]游标

18.

COUNT(1)比COUNT(*)在执行效率上要快吗?正确答案:错。COUNT(1)和COUNT(*)在执行效率上是一样的。COUNT()函数是Oracle中的聚合函数,用于统计结果集的行数。其语法形式如下:

COUNT({*|[DISTINCT|ALL]expr})[OVER(analytic_clause)]

可以把COUNT的使用情况分为以下3类:

1)COUNT(1)、COUNT(*)、COUNT(常量)、COUNT(主键)、COUNT(ROWID)、COUNT(非空列)。

2)COUNT(允许为空列)。

3)COUNT(DISTINCT列名)。

下面分别从查询结果和效率方面做个比较。

1.结果区别

1)COUNT(1)、COUNT(*)、COUNT(ROWID)、COUNT(常量)、COUNT(主键)、COUNT(非空列)这几种方式统计的行数是表中所有存在的行的总数,包括值为NULL的行和非空行。所以,这几种方式的执行结果相同。这里的常量可以为数字或字符串,例如,COUNT(2)、COUNT(333)、COUNT('x')、COUNT('xiaomaimiao')。需要注意的是,这里的COUNT(1)中的“1”并不表示表中的第一列,它其实是一个表达式,可以换成任意数字、字符或表达式。

2)COUNT(允许为空列1这种方式统计的行数不会包括字段值为NULL的行。

3)COUNT(DISTINCT列名)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论