Oracle程序员面试分类模拟34_第1页
Oracle程序员面试分类模拟34_第2页
Oracle程序员面试分类模拟34_第3页
Oracle程序员面试分类模拟34_第4页
Oracle程序员面试分类模拟34_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

Oracle程序员面试分类模拟34简答题1.

什么是OCR、OLR和表决磁盘?如何备份及恢复OCR?正确答案:(1)OCR简介Oracle集群使用两种类型的文件来管理集群资源和节点:OCR(O(江南博哥)racleClusterRegistry,Oracle集群注册表)和表决磁盘(VotingDisk)。这两种文件必须存放在共享存储上。其中,OCR用于解决健忘问题,表决磁盘用于解决脑裂问题。在Oracle11.2中引入一个新的文件,称为OLR(OracleLocalRegistry,Oracle本地注册表),它只允许存放在本地。

Oracle集群软件(Clusterware)把整个集群的配置信息放在共享存储上,这个存储就是OCR磁盘(OCRDisk)。OCR是OracleRAC配置信息仓库,它管理集群节点的相关信息及实例到节点的映射信息。因此,OCR的内容非常重要,对OCR的操作必须确保OCR内容完整性。在整个集群运行过程中,并不是所有节点都能操作OCR磁盘,而只有一个节点能对OCR磁盘进行读写操作,这个节点称为MasterNode。在每个节点的内存中都有一份复制的OCR内容,这份称为OCRCache。同时,每个节点都有一个OCRProcess来读写OCRCache,但只有一个节点的OCRProcess能读写OCR磁盘中的内容。当OCR内容发生改变时,由MasterNode的OCRProcess负责更新本地和其他节点的OCRCache内容。

所有需要OCR内容的其他进程,比如OCSSD、EVM等都被称为ClientProcess。这些进程不会直接访问OCRCache,而是向OCRProcess发送请求,借助OCRProcess获得内容。如果想要修改OCR内容,也要由该节点的OCRProcess向Masternode的OCRprocess提交申请,由MasterOCRProcess完成物理的读写,并同步所有节点OCRCache中的内容。

OCR的结构如下图所示。

OCR的结构

OCR中保存着整个集群的配置信息,配置信息以“Key-Value”的形式被保存着。在OracleClusterware安装的过程中,安装程序会提示用户指定OCR位置。用户指定的这个位置会被记录在/etc/oracle/ocr.loc(Linux或AIX)或者/var/opt/oracle/ocr.loc(Solaris系统)文件中。OracleClusterware在启动时会根据这里面的内容从指定位置读入OCR内容。

其中,ocrconfig_loc指定OCR的位置。如果为OCR指定了镜像(Mirror),那么还会出现选项ocrmirrorconfig_loc,用于定义OCR镜像的位置。local_only指定是否是RAC系统,如果这个值为FALSE,那么表示是RAC系统,如果这个值为TRUE,那么表示是单实例系统(在使用ASM时需要)。

整个OCR的信息是树形结构,有3个大分支:分别是SYSTEM、DATABASE和CRS。每个分支下面又有许多小分支。OCR记录的信息只能由root用户修改。

OCR中通常包含下列内容:

1)节点成员信息。

2)数据库实例、节点以及其他的映射关系。

3)ASM。

4)资源配置信息(vip、services等)。

5)服务特性(Servicecharacteristics)。

6)Oracle集群中相关进程的信息。

7)CRS控制的第三方应用程序信息。

可以使用命令“ocrdump-local-stdout-xml|more|grep-i\<name\>|sed-e's∧<NAME\>//g'-e's∧<VNAME\>//g'|awk-F.'{print$1,$2,$3}'|uniq"将OCR中的内容输出到屏幕上。

(2)OCR备份恢复与Oracle数据库的备份恢复相似,OCR的备份也有物理备份和逻辑备份,因此有两种备份方式和两种恢复方式。物理备份是自动进行的,逻辑备份需要手动进行。

因为OCR的内容如此重要,所以Oracle每4h对其做一次物理备份,并且保留最后的3个物理备份,以及前一天、前一周的最后一个物理备份。用户不能自定义物理备份频率以及备份文件的副本数。这个备份由MasterNodeCRSD进程完成,备份的默认位置在$GRID_HOME/cdata/<cluster_name>目录下,也可由命令ocrconfig-showbackup获取备份的位置。每次备份后,备份文件名自动更改,以反映备份时间顺序,最近一次的备份称为backup00.ocr。这些备份文件除了保存在本地,DBA还应该在其他存储设备上保留一份,以防止意外的存储故障。备份目录可以通过命令“ocrconfg-backuploc<directory_name>”修改。

物理恢复OCR的过程一般有如下几个步骤:

其实OCR也可以通过手动的方式导出、导入,方法如下:

使用ocrconfig-export方式产生的备份,统称之为逻辑备份。对于OCR的配置发生重大的变化前后,如添加删除节点,修改集群资源,创建数据库等,都建议使用逻辑备份。对于由于错误配置而导致的OCR被损坏的情形,可以使用ocrconfig-import方式进行恢复。逻辑备份的恢复方式和物理备份的恢复方式一致,这里不再赘述。

对OCR的恢复还可以采用dd、kfed及md_restore命令进行,这里不再详述。

(3)OLR

OCR是用于保存CRSD所管理的资源的注册表,但是在CRSD启动之前集群还有很多初始化资源(例如ASM实例)需要启动,所以,只有OCR是不够的。因此,Oracle在11gR2版本中推出了另一种注册表OLR(OracleLocalRegistry,Oracle本地注册表)。OLR类似于Oracle集群注册表,但是OLR只存储与本地节点有关的信息。OLR不与集群中的其他节点共享。OLR存储了集群启动初期ohasd(OracleHighAvailabilityService)使用的重要环境,如Oracle集群件的版本、配置等。如果OLR丢失或损坏,那么将会导致ohasd进程启动失败。所以,OLR的主要作用就是为ohasd守护进程提供集群的配置信息和初始化资源的定义信息。

Oracle在一个名为/etc/oracle/olr.loc(Linux或AIX)或者/var/opt/oracle/olr.loc(Solaris系统)的文本文件中存储了OLR配置文件的位置。当集群启动时,ohasd会从该文件中读取OLR的位置。对于集群环境(GICluster)而言,OLR的文件名一般为$GRID_HOME/cdata/<hostname.olr>,而对于单节点(GIStandalone,OracleRestart)而言,OLR的文件名一般为$GRID_HOME/cdata/localhost/<hostname.olr>。下例为集群环境的配置:

OLR的结构仍然沿用了和OCR相同的树形结构,而且其中的信息组织形式和OCR也是相同的。

所以,其维护类似于OCR的维护过程。它们常用到的维护工具有ocrconfig、ocrdump和ocrcheck。其中,加上-local表示对OLR的操作,否则是对OCR的操作。

1)ocrcheck

对OCR/OLR执行快速健康检查,并输出空间使用统计信息。

2)ocrdump

将OCR/OLR的内容转储到一个操作系统文件。

3)ocrconfig

对OCR/OLR执行导入、导出、添加、替换、删除、恢复和显示备份操作。

(4)OLR备份恢复

OLR的备份策略和OCR的有所不同,默认情况下GI在初始安装时会在路径$GRID_HOME/cdata/<节点名>下产生一个备份。OLR不会被自动备份,如果在集群的一些配置信息发生改变后,需要使用下面的命令手动进行备份:

建议在集群的重要配置信息(例如:集群私网配置)发生改变之后,使用命令ocrconfig-local-manualbackup手动备份OLR。当OLR丢失之后,可以使用命令“ocrconfig-local

-restore<OLR备份文件>”来恢复,不能从集群的其他节点复制OLR到本地节点,这是因为OLR中保存的一些信息是针对本地节点的。如果需要验证OLR的一致性,那么可以使用ocrcheck-local命令。简单地说,所有适用于OCR的命令同样适用于OLR,但是需要增加-local选项。

对于OLR的备份恢复简单过程如下(MOS:1193643.1和1368382.1):

(5)表决磁盘

表决磁盘(VotingDisk)也称为仲裁盘,表决磁盘文件主要用于记录节点成员状态信息,例如,包含哪些节点成员,节点添加删除信息的记录等。在出现脑裂时,表决磁盘可以用来决定哪个节点获得控制权,其他的节点必须从集群中剔除。表决磁盘存储在ASM中,有如下几点要求:

1)表决磁盘文件必须全部放入ASM中。

2)表决磁盘存在ASM中的个数不能修改,而是通过ASM的NORMAL、HIGH、EXTERNAL冗余级别决定的。例如:在NORMAL中必须有3个故障组3个表决磁盘,在HIGH中必须要有5个故障组5个表决磁盘,在EXTERNAL只有1个表决磁盘。

3)表决磁盘文件在Oracle11gR2中不再支持dd命令对其进行备份和还原,而是支持crsctl相关命令或自动备份。在Oracle11gR2之前的版本,如果要备份表决磁盘的内容那么只有使用dd命令进行备份。

4)表决磁盘文件的个数必须是奇数,便于投票选举,且表决磁盘文件的个数最多为15个,但一般没必要超过5个。

在安装集群时也会提示指定表决磁盘的位置。安装完成后可以通过如下命令来查看表决磁盘的位置:

另外,也可以从V$ASMDISK这个视图中查询,VOTINGFILE列为Y的表示包含表决磁盘:

表决磁盘的配置位置是在GPnPprofile文件中。对于表决磁盘的维护有很多命令,这里不再详述。

最后需要说明的一点是,如果表决磁盘损坏,而OCR或OLR的备份不可用,那么可以通过重新执行root.sh脚本的方式来修复OCR,修复之后除OCR磁盘组外的所有磁盘组,只要磁盘头没有损坏,就都可以直接对磁盘组进行MOUNT操作来恢复业务数据库。因此,强烈建议OCR磁盘和其他存放数据库数据的磁盘分开存放。

2.

若用户LHRSYS登录失败,则从哪个视图可以获取登录失败的次数?正确答案:若某个用户登录数据库失败,则基表USER$的列LCOUNT加1。只要成功登录后,LCOUNT的值就会置0。另外,审计表也记录了登陆失败的信息,其RETURNCODE列的值为1017,如下:

3.

ORA_ROWSCN函数的作用是什么?正确答案:对于每一行数据,ORA_ROWSCN返回每一行最近被修改的大概时间,可用于查询表最后一次被执行DML操作的时间。由于Oracle通过事务提交对行所在数据块来进行SCN(SystemChangeNumber,系统改变号,一个由系统内部维护的序列号,当系统需要更新的时候自动增加,它是系统中维持数据的一致性和顺序恢复的重要标志)的跟踪,所以,它不精确。可以通过在创建表时使用行级别的依赖跟踪来获得一个更加精确的SCN。

在对视图进行查询时,不能使用ORA_ROWSCN函数,但对于视图的基表是可以使用ORA_ROWSCN函数的,也能在UPDATE或DELETE语句的WHERE子句中使用ORA_ROWSCN函数。ORA_ROWSCN虽然不能用于闪回查询,但是可以用闪回版本查询来代替ORA_ROWSCN。ORA_ROWSCN也不能用于外部表。ORA_ROWSCN函数的使用示例如下:

4.

SQL*Plus中@和@@的区别是什么?正确答案:@和@@都可以调用脚本,它们的不同之处如下:

@等于start命令,用来运行一个SQL脚本文件。@命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件。

@@用在脚本文件中,用来指定“@执行的脚本文件”与“@@执行的脚本文件”在同一目录,而不用指定全路径,也不从SOLPATH环境变量指定的路径中寻找文件,该命令一般用在嵌套脚本文件中。

5.

什么是日志文件?为什么要设立日志文件?正确答案:日志文件是用来记录事务对数据库的更新操作的文件。设立日志文件的目的是:进行事务故障恢复;进行系统故障恢复;协助后备副本进行介质故障恢复。

6.

如何给SQL*Plus安装帮助?正确答案:SQL*Plus的帮助必须手工安装,shell脚本为$ORACLE_HOME/bin/helpins。在安装之前,必须先设置SYSTEM_PASS环境变量,如:

如果不设置该环境变量,那么将在运行脚本的时候提示输入环境变量。当然,除了shell脚本,还可以利用SQL脚本安装,那就不用设置环境变量了,但是,必须以SYSTEM登录。

在安装SQL*Plus的帮助功能之后,就可以像如下的方法使用帮助了:

需要注意的是,在Oracle11g中,已经没有名称为“$ORACLE_HOME/bin/helpins”的shell脚本了,所以需要使用SQL脚本来安装。

7.

集群(Cluster)特有的后台进程有哪些?正确答案:集群由若干进程组成,其中,最重要的几个进程包括OCSSD、CRSD、EVMD等。在安装集群软件的最后阶段,会要求在每个节点执行root.sh脚本,这个脚本会在/etc/inittab文件的最后把这3个进程加入启动项(从Oracle11g开始变为了ohasd这一个进程),这样以后每次系统启动时,集群也会自动启动。如果EVMD和CRSD两个进程出现异常,那么系统会自动重启这两个进程。如果是OCSSD进程出现异常,那么系统会立即重启。

(1)OCSSD(ocssd.bin)OCSSD(OracleClusterSynchronizationServiceDaemon)进程是集群最关键的进程,它提供CSS服务。如果这个进程出现异常,那么会导致系统重启。CSS服务通过多种心跳机制实时监控集群状态,提供脑裂保护等基础集群服务功能。需要注意的是,除了集群需要这个进程外,在单实例环境中,如果使用了ASM(AutoStorageManagement,自动存储管理),那么也需要这个进程。这个进程用于支持ASM实例和RDBMS实例之间的通信。

(2)CRSD(crsd.bin)CRSD(ClusterReadyServiceDaemon)是实现“高可用性(HA)”的主要进程,它提供的服务称为CRS服务。Oracle集群是位于集群层的组件,它要为应用层资源(CRSResource)提供“高可用性服务”,所以,Oracle集群必须监控这些资源,并在这些资源运行异常时进行干预,包括关闭、重启进程或者转移服务。CRSD进程提供的就是这些服务。所有需要高可用性的组件,都会在安装配置的时候,以CRSResource的形式登记到OCR(OracleClusterRegistry)中,而CRSD进程就是根据OCR中的内容决定监控哪些进程,如何监控,出现问题时又如何解决。也就是说,CRSD进程负责监控CRSResource的运行状态,并要启动、停止、监控、容错(Failover)这些资源。默认情况下,CRS会自动尝试重启资源5次,若还是失败,则放弃尝试。

CRSResource包括GSD(GlobalServeiceDaemon)、ONS(OracleNotificationService)、VIP、Database、Instance和Service。这些资源被分成2类:GSD、ONS、VIP和Listener属于Nodeapps类,Database、Instance和Service属于Database-RelatedResource类。Nodeapps是指每个节点只需要一个就够了,例如每个节点只有一个Listener,而Database-RelatedResource是指这些资源和数据库有关,不受节点的限制,例如一个节点可以有多个实例,每个实例可以有多个Service。GSD、ONS和VIP这3个服务是在安装Clusterware的最后,执行VIPCA时创建并登记到OCR中的。Database、Listener、Instance和Service是在各自的配置过程中自动或者手动登记到OCR中的。

(3)EVMD(evmd.bin)EVMD(EventManagerDaemon)这个进程负责发布CRS产生的各种事件(Event)。这些事件可以通过两种方式发布给客户:ONS和CalloutScript。EVMD进程除了发布复杂事件之外,它还是CRSD和CSSD两个进程之间的桥梁。CRS和CSS两个服务之间的通信就是通过EVMD进程完成的。

除了以上3个进程外,还有一些其他的进程参考下表。

其他的进程

8.

Oracle的自治事务是什么?正确答案:Oracle的自治事务(AutonomousTransaction)是将一个主事务分割成几个子事务,在执行完子事务以后再继续执行主事务。这里的关键是,子事务是独立于主事务的,子事务中的ROLLBACK和COMMIT操作只会影响子事务中的DML操作;同样,主事务中的ROLLBACK和COMMIT操作只会影响主事务中的DML操作,而不会影响子事务中的操作。在子事务中已经COMMIT的操作,不会被主事务中的ROLLBACK撤销。

可以在程序开头使用如下命令实现自治事务:

定义自治事务必须遵循以下规则:

1)如果要被定义为自治事务的程序是匿名的,那么它必须是一个最外层的程序块。

2)如果要被定义为自治事务的程序不是匿名的,那么它必须是函数或者存储过程。在一个包中,只有其中的函数或存储过程能够被定义成自治事务。整个包不能声明为自治事务。

3)一个对象的方法可以声明为自治事务。

4)触发器可以声明为自治事务。

5)内嵌程序块不能声明为自治事务。

需要注意的是,对于一个匿名的自治事务程序块来说,只有这个块的BEGIN和END之间的代码被看作是自治事务。

自治事务可以用来解决“ORA-14551:无法在查询中执行DML操作”错误。触发器无法包含COMMIT语句,除非有PRAGMAAUTONOMOUS_TRANSACTION标记。但是,只有触发中的语句才能被提交,主事务则不行。

9.

分区表性能注意事项正确答案:在使用分区表的时候需要注意以下几方面的内容:

1)在查询分区表时尽量带上分区键过滤条件,否则可能引起全分区扫描。

2)在设计分区表时,避免数据都进入默认分区,从而导致出现默认分区超大或各个分区大小严重不均衡的情况,失去分区表的意义。

3)需要特别注意分区表性能比普通表性能差的情况。这种情况的本质原因是,虽然分区表的分区索引比全局索引要小很多,但是由于没有扫描指定的分区,而是扫描了很多个小的索引,这些小索引的高度累计起来一般都比全局索引要高。索引的范围检索性能是由索引的高度(BLEVEL)决定的,而不是由索引的大小决定。所以,性能差异很明显。

10.

什么是动态采样(DynamicSampling)?正确答案:对于没有收集统计信息的表,Oracle为了能够得到相对准确的执行计划,会在执行SQL之前对SQL语句涉及的表做动态采样(DynamicSampling,从Oracle11gR2开始称之为DynamicStatistic)。

有两种方法可以开启动态采样:

1)将参数OPTIMIZER_DYNAMIC_SAMPLING的值设为大于或等于1。从Oracle10g开始,该值默认为2,若设置为0,则禁用动态采样。

2)使用动态采样的Hint:DYNAMIC_SAMPLING(TLEVEL)。该Hint表示对目标表T强制使用等级为参数level指定值的动态采样。

默认采样数据块数量受隐含参数“_OPTIMIZER_DYN_SMP_BLKS”的控制,其默认值是32,表示动态采样时默认采样数据块数量为32。

下表针对Oracle11.2.0.4(对Oracle10g而言,采样的数据块数量有差异,详见官方文档)不同采样级别的差异。

采样的数据块越多,得到的分析数据就越接近于真实,但同时伴随着资源消耗也越大。

引入动态采样有如下几方面的作用:

1)CBO依赖的是充分的统计信息,但是并不是每个用户都会非常认真、及时地去对每个表做分析。为了保证执行计划都尽可能地准确,Oracle需要使用动态采样技术来帮助CBO获取尽可能多的信息。

2)全局临时表。通常来讲,临时表的数据是不做分析的,但是当一个查询关联到这样的临时表时,CBO要想获得临时表上的统计信息分析数据,就只能依赖于动态采样了。

3)为了相对准确地估算出当目标SQL语句WHERE条件中出现有关联关系的列时整个WHERE条件的组合可选择率,进而能相对准确地估算出返回结果集的Cardinality。动态采样除了可以在对象没有分析时,给CBO提供分析数据之外,还可以对不同列之间的相关性做统计。

动态采样的一些缺点如下:

1)采样的数据块有限,对于海量数据的表,结果难免有偏差。

2)采样会消耗系统资源,特别是OLTP数据库,尤其不推荐使用动态采样。动态采样也需要额外的消耗数据库资源。在OLTP系统中,SQL被反复执行,变量被绑定,硬解析很少,在这样一个环境中,是不宜使用动态采样的。在OLAP或者数据仓库环境下,SQL执行消耗的资源要远远大于SQL解析,那么让解析在消耗多一点资源做一些动态采样分析,从而做出一个最优的执行计划是非常值得的。所以,一般在OLAP或者数据仓库环境中,将动态采样的level设置为3或者4比较好。相反,在OLTP系统下,尽量避免使用动态采样。

在执行计划的Note部分若有“dynamicsamplingusedforthisstatement(level=2)”,则表示Oracle使用了level为2的动态采样。

11.

如何实现分组取前3条记录?正确答案:可以利用分析函数,如获取每个部门薪水前三名的员工或每个班成绩前三名的学生,如下:

12.

在Windows环境下,错误“ORA-12560:TNS:协议适配器错误”的常见原因有哪些?正确答案:常见原因有如下几个:

1)监听服务没有启动起来。Windows环境操作步骤:开始—程序—管理工具—服务,打开服务面板,启动oracleXXXlistener服务。

2)数据库实例没有启动。启动命令为:netstartOracleServiceORCL。

3)环境变量问题。请仔细检查ORACLE_HOME和PATH的路径。若是在同一台机器上同时安装了Oracle的服务器端和客户端,则要确保执行“sqlplus/assysdba”命令的sqlplus在服务器路径下。另外,需要设置ORACLE_SID,设置方法为:setORACLE_SID=XXX。

13.

如何判断某一个数据块是否在内存中?正确答案:通过V$BH视图可以查询。V$BH视图保存着BufferCache中每一个BLOCK的信息,是一个重要视图。例如,T1表在数据文件1中,第一个BLOCK是103001,则通过如下的SQL可以查看这个BLOCK有没有在BufferCache中,若返回的值大于0,则说明该块在BufferCache中:

14.

IPPhone的原理是什么?都用了哪些协议?正确答案:IP电话(又称IPPhone)是通过互联网或其他使用IP技术的网络来实现电话通信的。它是一种全新的通信技术,建立在IP技术上的分组化、数字化传输技术基础之上。其原理是通过语音压缩算法对语音数据进行压缩编码处理,然后把这些语音数据按IP等相关协议进行打包,经过IP网络把数据包传输到接收方,再把这些语音数据包串起来,经过解码解压处理后,恢复成原来的语音信号,从而达到由IP网络传送语音的目的。Voip(VoiceoverInternetProtocol)使用的协议有H.323协议簇、SIP、Skype协议、H.248和MGCP。

15.

ROWID和ROWNUM有什么区别?正确答案:Oracle有两个著名的伪列ROWID和ROWNUM,下面分别来介绍它们。

(1)ROWID

ROWID是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的。对每个表都有一个ROWID的伪列,但是表中并不物理存储ROWID列的值。不过可以像使用其他列那样使用它,但是不能删除该列,也不能对该列的值进行修改、插入。

ROWID对访问一个表中的给定的行提供了最快的访问方法,通过ROWID可以直接定位到相应的数据块上,然后将其读到内存。当创建一个索引时,该索引不但存储索引列的值,而且也存储索引值所对应的行的ROWID,这样通过索引就可以快速找到相应行的ROWID,通过该ROWID,就可以迅速将数据查询出来。这也就是在使用索引查询时,速度比较快的原因。

一般来说,当表中的行确定后,ROWID就不会发生变化,一旦一行数据插入数据库,ROWID在该行的生命周期内是唯一的,即使该行产生行迁移,行的ROWID也不会改变,UPDATE不会改变ROWID,INSERT更不会。从ROWID定义可知,只有当数据行的物理位置改变时才会导致ROWID改变,所以,只需要关心那些会导致数据物理位置变化的操作即可。

ROWID可以分为以下几种类型:

1)物理ROWID:存储堆组织表、表簇、表分区、和索引分区中的行地址。

2)逻辑ROWID:存储索引组织表中的行地址。

3)外部ROWID:是外来表(如通过网关访问的DB2表)中的标识符。它们不是标准的Oracle数据库ROWID。

有一种数据类型称为通用ROWID或UROWID,支持各种ROWID。

当如下情况发生时,ROWID将发生改变,即当数据迁移到其他块的时候,ROWID就会改变:

1)对一个表做表空间的移动或重建后。

2)对一个表进行了exp/imp或expdp/impdp后。

3)MOVE、FLASHBACKTABLE、修改分区键值到另一个分区、分区表的分区数据转移到其他分区、SHRINKTABLE等。

通过DBMS_ROWID可以获取文件号、块号等信息,如下:

(2)ROWNUM

ROWNUM是一个伪列,不是真正的列,在表中并不真实存在,它是Oracle数据库从数据文件或缓冲区中读取数据的顺序。切勿理解成记录的行号(很多人一直这样认为的),例如想查询第二行记录按下面的方法是查询不到的:

ROWNUM主要应用于Top-N查询中。

16.

请使用ON子句连接查询SCOTT.EMP和SCOTT.DEPT表,要求显示EMPNO、ENAME、JOB和SAL字段。正确答案:题目要求使用ON子句,这是一个考查点,SQL语句如下:

17.

什么是用户的表空间配额(UsertablespaceQuota)?正确答案:用户的表空间配额也称为表空间限额,指的是用户可以使用指定表空间的最大大小。控制用户的表空间配额也就等于控制用户所占用的表空间大小。在默认情况下,需要对用户赋予RESOURCE角色,虽然该角色没有UNLIMITEDTABLESPACE权限,但是对用户赋予了该角色后,系统将会默认给用户赋予UNLIMITEDTABLESPACE的系统权限,因此,新建的用户对所有表空间都是没有配额的,即不受空间的限制。表空间配额可以在创建用户的时候指定,也可以在创建用户后再修改用户的配额。关于表空间配额需要注意以下几点:

1)DBA用户是具有UNLIMITEDTABLESPACE的权限的,若是回收DBA角色,则会导致UNLIMITEDTABLESPACE权限被连带回收,易引起生产事故,所以,在回收DBA角色时需特别注意。

2)当用户使用空间超出限额的时候会报“ORA-01536”和“ORA-01950”的错误。

3)目标用户必须不能含有UNLIMITEDTABLESPACE的系统权限,否则空间配额对用户的设置无效,也就会出现在DBA_TS_QUOTAS中的BYTES大于MAX_BYTES的情况。

常用命令如下:

18.

什么是数据库镜像?它有什么用途?正确答案:数据库镜像即根据DBA的要求,自动把整个数据库或者其中的部分关键数据复制到另一个磁盘上。每当主数据库更新时,DBMS自动把更新后的数据复制过去,即DBMS自动保证镜像数据与主数据的一致性。

数据库镜像的用途有:①用于数据库恢复。当出现介质故障时,可由镜像磁盘继续提供使用,同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。②提高数据库的可用性。在没有出现故障时,当一个用户对某个数据加排它锁进行修改时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。

19.

如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?正确答案:总体来说有两种方式来获取,第一,利用系统包DBMS_METADATA包中的GET_DDL函数来获取,第二,利用exp或expdp来获取。

下面来看第一种方式,如何利用系统包DBMS_METADATA包中的GET_DDL函数来获取对象的定义语句。下面是该函数的入参和出参:

其详细参数如下:

(1)OBJECT_TYPE:需要返回原数据的DDL语句的对象类型。

(2)NAME:对象名称。

(3)SCHEMA:对象所在的SCHEMA,默认为当前用户所在SCHEMA。

(4)VERSION:对象原数据的版本。

(5)MODEL:原数据的类型默认为ORACLE。

(6)TRANSFORM:默认值为DDL。

(7)RETURNS:对象的原数据默认以CLOB类型返回。

一般情况下,只需要给出OBJECT_TYPE、NAME和SCHEMA3个参数即可。

1)查看创建表SQL语句:

2)查看创建索引的SQL语句:

3)查看创建主键的SQL语句:

4)查看创建外键的SQL语句:

5)查看创建视图(VIEW)的SQL语句:

6)查看创建存储过程(PROCEDURE)的SQL语句:

7

温馨提示

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

评论

0/150

提交评论