简答题1. 在Oracle中,数据块、Redo日志块及控制文件数据块的大小分别是多少?如何查询?
这3种数据块分别介绍如下:
1)数据块(Data Block),是读写数据文件的最小单位,默认是8KB,可以通过SQL语句“SELECT FILE#,NAME,BLOCK_SIZE FROM V$DATAFILE;”查询,单位为BYTE。
2)Redo日志数据块(Redo Log Block),其大小一般等于操作系统的系统块的大小,一般为512B或4096B,可以通过SQL语句“SELECT BLOCKSIZE FROM V$LOG;”或“SELECT LEBSZ FROM X$KCCLE;”查询,单位为BYTE。
3)控制文件数据块(Control File Block),默认为16KB,可以通过SQL语句“SELECT BLOCK_SIZE FROM V$CONTROLFILE;”查询,单位为BYTE。
[考点] 逻辑结构
2. 如何查询到数据库的增长情况?
可以通过视图DBA_HIST_TBSPC_SPACE_USAGE来获取数据库的增长情况。
[考点] 性能诊断
3. 怎样收集表的统计信息?怎样收集分区表的统计信息?
主要采用DBMS_STATS.GATHER_TABLE_STATS包进行统计信息的收集,如下:
DBMS_STATS.GATHER_TABLE_STATS(USER,'TB_NAME',CASCADE=>TRUE);--普通表
DBMS_STATS.GATHER_TABLE_STATS(USER,'TB_NAME',PARTNAME=>'PT_PART_NAME',GRANULARITY=>'PARTITION',CASC ADE=>TRUE);--针对分区表的单个分区进行收集统计信息
除此之外,还有一些其他的用法,如下:
1)EXEC DBMS_STATS.GATHER_DATABASE_STATS(USER);——收集当前数据库下所有用户的统计信息。
2)EXEC DBMS_STATS.GATHER_SCHEMA_STATS(USER);——收集当前数据库用户下所有对象的统计信息。
当系统的分区表数据量很大时,如果每次都收集全部的分区必然会导致统计信息的收集非常慢,在Oracle 11g之后可以通过设置INCREMENTAL来只针对数据有变动的分区做收集:
EXEC DBMS_STATS.SET_TABLE_PREFS(USER,'TABLE_NAME','INCREMENTAL','TRUE'); --只收集数据变动的分区
SELECT DBMS_STATS.GET_PREFS('INCREMENTAL',NULL,'TABLE_NAME')FROM DUAL; --查看分区表INCREMENTAL的值
[考点] 统计信息
4. 如何批量删除JOB?
可以采用SQL来生成删除JOB的语句,首先执行以下语句,可以根据情况对结果进行过滤:
SELECT 'EXEC DBMS_SCHEDULER.DROP_JOB('''||JOB_NAME||''',TRUB);FROM USER_SCHEDULER_JOBS T1;
将以上SQL生成的结果复制到命令窗口就可以批量执行了。
[考点] JOB
5. DBMS_OUTPUT提示缓冲区不够,怎么增加?
采用命令“DBMS_OUTPUT.ENABLE(20000);”,另外,如果DBMS_OUTPUT的信息不能显示,那么需要设置SET SERVEROUTPUT ON。
[考点] 系统包
6. 如何监控索引的使用状况?
在开发应用程序时,可能会建立很多索引,那么这些索引的使用到底怎么样,是否有些索引一直都没有用到过,在这种情况下就需要对这些索引进行监控,以便确定它们的使用情况,并为是否可以清除它们给出依据。
监控索引有两种方式:
(1)直接监控索引的使用情况
1)设置所要监控的索引:ALTER INDEX IDX_T_XX MONITORING USAGE;
2)查看该索引有没有被使用:SELECT*FROM V$OBJECT_USAGE;
3)关闭监控:ALTER INDEX IDX_T_XX NOMONITORING USAGE;
查询V$OBJECT_USAGE就可以知道数据库对索引的使用情况。通过一段时间的监控,就可以确定哪些是无用的索引。另外,为了避免使用V$OBJECT_USAGE只能查询到当前用户下索引的监控情况,可以使用如下语句查询数据库中所有被监控索引的使用情况:
SELECT U.NAME OWNER,IO.NAME INDEX_NAME, T.NAME TABLE_NAME,DECODE(BITAND(I.FLAGS,65536),0,'NO','YES') MONITORING,
DECODE(BITAND(OU.FLAGS,1),0,'NO','YES')USED, OU.START_MONITORING START_MONITORING,
OU.END_MONITORING END_MONITORING
FROM SYS.USERS U, SYS.OBJ$IO, SYS.OBJ$ T. SYS.IND$ I, SYS.OBJECT_USAGE OU
WHERE I.OBJ#=OU.OBJ# AND IO.OBJ#=OU.OBJ# AND T.OBJ#=I.BO# AND U.USER#=IO.OWNER#;
(2)通过查看历史的执行计划,分析索引的使用情况
可以从视图DBA_HIST_SQL_PLAN中获取到数据库中所有索引的扫描次数情况,然后根据扫描次数和开发人员沟通是否需要保留索引。
[考点] 索引
7. Oracle如何删除归档日志文件?
在RMAN工具里删除归档日志文件:
1.rman target/
2.CROSSCHECK ARCHIVELOG ALL;
3.LIST EXPIRED ARCHIVELOG ALL;
4.DELETE EXPIRED ARCHIVELOG ALL;
[考点] RMAN
8. 用一条SQL语句查询出每门课都大于80分的学生姓名:
name kecheng fenshu
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
SELECT DISTINCT NAME FROM TABLE WHERE NAME NOT IN (SELECT DISTINCT NAME FROM TABLE WHERE FENSHU<=80);。
[考点] SQL部分
9. 如何固定SQL执行计划?
在实际项目中,通常在开发环境下,一些SQL执行没有任何功能问题,而当生产环境或生产环境的数据量发生较大的变化时,其SQL的执行效率非常低。此时如果更改SQL,那么可能需要重新修改源程序以及重新编译程序。如果修改源程序的成本比较大,那么可以使用一些方法在不改变源应用程序的情况下更改特定SQL的执行计划并固定下来。因为在SQL语句的执行计划发生更改时,可能存在性能风险。SQL计划发生更改的原因有很多,如优化程序版本、优化程序统计信息、优化程序参数、方案定义、系统设计和SQL概要文件创建等。有4种方式可以固定和控制执行计划,分别是使用Hint(提示)、OUTLINE(存储概要)、SQL PROFILE(SQL概要文件)和SPM(SQL Plan Managemem,SQL计划管理)。
[考点] 执行计划
10. 索引的优缺点有哪些?
创建索引可以大大提高系统的性能,总体来说,索引的优点如下:
1)大大加快数据的检索速度,这也是创建索引的最主要的原因。
2)索引可以加速表和表之间的连接。
3)索引在实现数据的参照完整性方面特别有意义,例如,在外键列上创建索引可以有效地避免死锁的发生,也可以防止当更新父表主键时,数据库对子表的全表锁定。
4)索引是减少磁盘I/O的许多有效手段之一。
5)当使用分组(GROUP BY)和排序(ORDER BY)子句进行数据检索时,可以显著减少查询中分组和排序的时间,大大加快数据的检索速度。
6)创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
7)通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
索引的缺点如下:
1)索引必须创建在表上,不能创建在视图上。
2)创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
3)建立索引需要占用物理空间,如果要建立聚簇索引,那么需要的空间会很大。
4)当对表中的数据进行增加、删除和修改的时候,系统必须要有额外的时间来同时对索引进行更新维护,以维持数据和索引的一致性,所以,索引降低了数据的维护速度。
[考点] 基本概念
11. 后台进程、服务器进程和用户进程之间的区别是什么?
后台进程、服务器进程和用户进程间的关系如下图所示。
(1)USER PROCESS (用户进程)
用户进程指的是Oracle客户端进程。例如,常用的Oracle的SQL*Plus就是最常用的客户端进程。
(2)SERVER PROCESS(服务器进程)
服务器进程指的是与客户端连接的服务器端的后台进程。对于每个前台的用户进程,后台都有一个服务器进程与之对应。服务器主要是通过它和用户进程进行联系、沟通及进行数据的交换。
(3)BACKGROUND PROCESSES(后台进程)
后台进程是Oracle的程序,在Oracle实例启动的时候启动,用来管理数据库的读写、恢复和监视等工作,例如PMON、SMON等进程。后台进程是Oracle实例的核心。
在UNIX操作系统上,Oracle的后台进程对应于操作系统进程,也就是说,一个Oracle后台进程将启动一个操作系统进程;在Windows操作系统上,Oracle的后台进程对应于操作系统线程,打开任务管理器,只能看到一个ORACLE.EXE的进程,但是通过另外的工具,就可以看到包含在ORACLE.EXE进程中的线程。
[考点] 后台进程
12. 分区表有哪几类?如何选择用哪种类型的分区表?
Oracle的分区可以分为范围分区(RANGE PARTITION)、哈希分区(HASH PARTITION)、列表分区(IIST PARTITION)、复合分区(组合分区)、INTERVAL分区(间隔分区)和系统分区。其中,INTERVAL分区和系统分区是Oracle 11g的新特性,尤其INTERVAL分区在生产环境中还是比较实用的。对于海量数据的数据库设计,分区的设计非常重要。例如,对于一个大表,应该采用哪种类型的分区,对于以后数据库的性能和管理至关重要。其实,范围分区、哈希分区和列表分区这三种分区的特点都非常明显:
1)如果需要进行数据的过期化处理,那么范围分区基本上是唯一的选择。
2)如果需要数据的均匀分布,那么可以考虑使用哈希分区。
3)如果数据的值可以很好地对应于某个分区,那么就可以考虑使用列表分区。
在上面的原则基础上,再结合性能的影响因素,来最终确定使用哪种类型的分区。
如果选择的分区不能确保各分区内数据量的基本平均,那么这种分区方式有可能是不恰当的。比如对于RANGE分区,假设分了10个分区,而其中一个分区中的记录数占总记录数的90%,其他9个分区只占总记录数的10%,则这个分区方式就起不到数据平衡的作用。
[考点] 分区表
13. Oracle数据库在物理上是由哪些文件组成的?
Oracle数据库物理结构如下图所示。
Oracle数据库的物理结构由控制文件(Control Files)、数据文件(Data Files)、联机Redo日志文件(Online Redo Log Files)、参数文件(Parameter File)、归档日志文件(Archive Log Files)和密码文件(Password File)组成。
1)控制文件:包含维护和验证数据库完整性的必要信息,其中记录了数据库的物理结构。例如,控制文件用于识别数据文件和Redo日志文件。每个Oracle数据库都有相应的控制文件,一个数据库至少需要一个控制文件,控制文件属于二进制文件。控制文件的命名格式通常为ctr*.ctl。
2)数据文件:存储数据的文件。
3)联机Redo日志文件:包含对数据库所做的更改记录,一个数据库至少需要两组联机Redo日志文件。联机Redo日志文件也叫在线重做日志文件或联机重做日志文件。
4)参数文件:定义Oracle实例的特性,分为SPFILE和PFILE两种类型的参数文件。
5)归档文件:归档文件是联机Redo日志文件的脱机副本,这些归档文件对于介质恢复很重要。
6)密码文件:认证哪些用户有权限启动和关闭Oracle实例。
Oracle中逻辑结构包括表空间(TABLESPACE)、段(SEGMENT)、区(EXTENT)和块(BLOCK)。数据库由表空间构成,而表空间又由段构成,段又由区构成,区又由Oracle块构成,即块→区→段→表空间→数据库。
[考点] 物理结构
14. 假定一个部门的数据库包括以下信息。
1)职工的信息:职工号、姓名、地址和所在部门。
2)部门的信息:部门所有职工、部门名、经理和销售的产品。
3)产品的信息:产品名、制造商、价格、型号及产品的内部编号。
4)制造商的信息:制造商名称、地址、生产的产品名和价格。
试画出这个数据库的E-R图。
15. 在表中建立了索引以后,导入大量数据为什么会很慢?
对已经建立了索引的表中插入数据时,插入一条数据就要对该记录按索引排序。因此,导入大量数据的时候速度会很慢。解决这种情况的办法是,在没有任何索引的情况插入数据,然后建立索引。
[考点] 索引
16. 如何格式化输出结果?
可以使用column命令。
[考点] SHELL脚本系列
17. 如何随机抽取表SCOTT.EMP的前5条记录?
使用SYS_GUID或DBMS_RANDOM.VALUE函数,如下:
SELECT*FROM(SELECT*FROM SCOTT.EMP ORDER BY SYS_GUID())WHERE ROWNUM<=5;
SELECT*FROM(SELECT*FROM SCOTT.EMP ORDER BY DBMS_RANDOM.VALUE)WHEREROWNUM<=5;
18. 软件生存期有哪几个阶段?
软件定义时期、软件开发时期、软件维护时期。
[考点] 数据库系统的组成与结构
19. RMAN是什么?RMAN的特点有哪些?
为了更好地实现数据库的备份和恢复工作,Oracle提供了恢复管理器(Recovery Manager,RMAN)。RMAN是一个可以用来备份、恢复和还原数据库的应用程序,是随Oracle服务器软件一同安装的Oracle工具软件,通过执行相应的RMAN命令可以实现备份和恢复操作。RMAN可以用来备份和恢复数据库文件、归档日志、控制文件和系统参数文件,也可以用来执行完全或不完全的数据库恢复。RMAN有三种不同的用户接口:COMMAND LINE方式、GUI方式(集成在OEM中的备份管理器)、API方式(用于集成到第三方的备份软件中)。
RMAN具有如下特点:
1)功能类似物理备份,但比物理备份强大N倍。
2)可以把备份打包成备份集,也可以按固定大小分割备份集。
3)备份与恢复的过程可以自动管理。
4)可以使用脚本(存在Recovery Catalog中)。
5)RMAN会检测和报告损坏的数据块。
6)可以跳过未使用的数据块。在执行RMAN备份时,RMAN不会备份从未被写入的数据块。而传统的备份方法无法知道已经使用了哪些数据块。
7)备份压缩,也可以压缩空块。RMAN使用一种Oracle特有的二进制压缩模式来节省备份设备上的空间。尽管传统的备份方法也可以使用操作系统的压缩技术,但RMAN使用的压缩算法是定制的,能够最大限度地压缩数据块中一些典型的数据。
8)执行增量备份,可以在块级别上实现增量。如果不使用增量备份,那么每次RMAN都备份已使用块;如果使用增量备份,那么每次RMAN都备份上次备份以来变化的数据块,这样可以节省大量的磁盘空间、I/O时间、CPU时间和备份时间。
9)块级别的恢复。可以只还原或修复标识为损坏的少量数据块。在RMAN修复损坏的数据块时,表空间的其他部分以及表空间中的对象仍可以联机。
10)在备份时不需要将表空间置于热备份模式。
11)可以使用RMAN来测试备份而不需要实际还原它们。
[考点] RMAN