⑴ 面试题:oracle数据库优化
oracle数据库优化的话主要有以下几个方面(我接触过的,可能不全面):
1 查询语句的优化,这个主要是根据语句和数据库索引的情况,结合查询计划的分析结果,对性能较低的查询语句进行重写,在执行查询前执行表分析语句也可以算这里;
2 数据结构优化,这个包括根据实际的应用中业务逻辑,对数据库的结构进行重新设计,或者创建相关索引里提高查询效率;
3 数据库设置优化,这方面主要是调整数据库和数据结构的相关参数提高应用访问系统的效率;
4 存储结构优化,在数据量较大的情况下,可以考虑通过数据库的存储结构进行优化,比如对数据进行partition,将数据存储在磁盘阵列服务器上等。
我的经验有限,以上是部分建议
⑵ oracle数据库考试简答题,请回答一下吧,三个都回答了才会给分哦
REF CURSOR游标:
动态游标,在运行的时候才能确定游标使用的查询。分类:
强类型(限制)REF CURSOR,规定返回类型
弱类型(非限制)REF CURSOR,不规定返回类型,可以获取任何结果集。
TYPE ref_cursor_name IS REF CURSOR [RETURN return_type]
Oracle 的隔离级别
SQL92定义的隔离级别在理论上很完善,但是 Oracle 显然认为在实际实现的时候并不应该完全照搬SQL92的模型。
- Oracle不支持 SQL92 标准中的“读取未提交数据(read uncommitted)”隔离级别,想要脏读都没可能。
- Oracle 支持 SQL92 标准中的“读取已提交数据(read committed)”隔离级别,(这也是Oracle默认的隔离级别)。
- Oracle不支持 SQL92 标准中的“可重现的读取(repeatable read)”隔离级别,要想避免“不可重现的读取(nonrepeatable read)”可以直接使用“序列化(serializable)”隔离级别。
- Oracle 支持 SQL92 标准中的“序列化(serializable)”隔离级别,但是并不真正阻塞事务的执行(这一点在后文还有详述)。
- Oracle 还另外增加了一个非SQL92标准的“只读(read-only)”隔离级别。
oracle startup的时候分为三个步骤:
1. Start an instance.
2. Mount the database.
3. Open the database.
三个步骤中所要做的工作主要如下:
1、start an instance
命令为 startup nomount
在这一步中主要工作有:
Reading the parameter file initsid.ora
Allocating the SGA
Starting the background processes
Opening the ALERT file and the trace files
读参数文件是为了读里面的dbname,各个内存参数的大小,比如sga的大小,以便分配内存,还有控制文件的路径等。在这一步并不打开控制文件,所以如果你要重建控制文件的时候,需要工作在这个状态下。
2、Mount the database.
命令为 startup mount,如果在nomount状态下命令为: alter database mount
在这一步中主要工作有:
Associating a database with a previously started instance
Locating and opening the control files specified in the parameter file
Reading the control files to obtain the names and status of the data files and redo log files
在这一步,主要用到的文件是控制文件.然后读控制文件,得到各个数据文件和联机日志文件的名字和状态(online or offline) ,但是并不去检查各个文件是否存在.所以如果你要修改数据文件的名字和重建联机日志文件等操作,就需要工作在mount状态下.因为下一步要打开各个数据文件和联机日志文件,所以如果数据文件不存在,你就需要在mount状态下,恢复文件,才能使下一步不报错误.
3、Open the database.
命令为 startup,如果在mount状态下命令为: alter database open.
在这一步中主要工作有:
Opening the online data files
Opening the online redo log files
在这一步中,数据库主要的工作是打开第2步中在控制文件中读到的在线的联机日志文件和数据文件.如果数据文件和联机日志文件不存在,oracle就会报错.oracle打开数据文件和日志文件之后,会对数据文件和日志文件进行一致性检查,如果发现不一致,会启动SMON进程进行实例恢复.
另外,在整个过程中密码文件都是必须的,因为要验证操作的用户是否具有适当的权限。这个只是从宏观上来看oracle启动的整个过程。
⑶ Oracle测试题
Oracle的体系结构是一个需要掌握的比较重要的概念,这个结构体系也比较复杂,我稍为总结了一下概念。
Oracle数据库主要的物理存储结构包括构成数据库的各种物理文件,包括数据文件、控件文件、重演日志文件、归档重演日志文件、参数文件、警告、跟踪日志文件和备份文件等。
数据文件:
每个Oracle数据库都有一个或者多个物理数据文件(datafile),数据文件包含了所有的数据库数据,数据库的逻辑结构的数据(如表、索引等)都被物理地存储在分给数据库的数据文件中。
数据文件包含下列类型的数据:
表数据
索引数据
数据字典定义
回滚事务所需的信息
存储过程、函数和数据包的代码
用来排序的临时数据
数据文件的特点:
一个数据文件只能与一个数据库相关联。
可以对数据文件设置一些特性,在数据库空间用完的情况下可以自动扩展。
一个或多个数据文件构成了一个数据库存储的逻辑单元——表空间(table space)。
数据会汇集在内存里,由数据库的书写进程(DBWR)决定。(DBWO?)
select status,bytes,name from v$datafile;
控制文件:
数据库控制文件(control file)是一个很小的二进制文件,它维护着数据库的全局物理结构,用以支持数据库成功地启动和运行。创建数据库时,同时就提供了与之对应的控制文件。
每一个控制文件只能与一个Oracle数据库相关联。
控制文件包含了数据库实例在启动和正常操作时,访问数据库所需的关于数据库的信息。
控制文件包含以下的信息:
数据库名称
数据库创建的时间戳
相关的数据文件、重演日志文件的名称和位置
表空间信息
数据文件脱机范围
日志历史
归档日志信息
备份组和备份块信息
备份数据文件和重演日志信息
数据文件拷贝信息
当前日志序列数
检查点(checkpoint)信息
保护控制文件,必须注意的几个方面:
每一个数据库都要使用多路复制的控制文件
把每一个控制文件的复件保存在不同的物理磁盘上
使用操作系统的冗余镜像机制
监控备份
select name from v$controlfile;
重演日志文件:
每一个Oracle数据库都有一个由两个或多个重演日志文件(redo log file)构成的文件组,这组重演日志文件合称为数据库的重演日志。
一个重演日志文件是由重做条目(redo entry,也叫重做记录)组成的。
重演日志的主要功能是记录下所有数据的改变。
重演日志文件中的信息可以用在数据库从系统失败或者介质失败的恢复之中 。
select * from v$logfile;
归档重演日志文件:
归档重演日志文件(archive log file)就是对写满的重演日志文件复制若保存生成的文件。可以通过设置数据库在归档模式(ARCHIVELOG mode)下来自动地保存日志文件。归档进程(ARCO)在后台负责把写满的重演日志文件复制到归档日志目标中。归档日志文件在数据库恢复时起决定性作用。
Select * From v$archived_log
参数文件:
参数文件(parameter file)包含了一组关于数据库和实例的配置参数。Oracle推荐用户使用一个服务器参数文件(SPFILE)作为维护初始化参数的动态手段。一个服务器参数文件允许用户在一个服务器端的磁盘文件里持久地保存和管理初始化参数。
警告、跟踪日志文件:
每一个服务器和后台进程都可以写入一个相关的跟踪文件(trace file)。当一个进程发现了一个内部错误的时候,它把关于错误的信息转储到它的跟踪文件里。写入到跟踪文件的一部分信息是给数据库管理员使用的,而其他信息是给Oracle支持服务的。跟踪文件信息还可以用于调整应用程序和实例。
警告文件(alert file)是一种特殊的跟踪文件,一个数据库的警告文件就是包括按时间排序的消息和错误的记录。
备份文件:
用户管理的备份和恢复实际上就是要求用户在试图恢复备份的时候先还原备份文件。服务器管理的备份和恢复管理了备份过程,例如,调度备份及恢复过程就是在需要恢复的时候施加正确的备份文件。
⑷ oracle数据库判断题
oracle系统中SGA所有用户进程和服务器进程所共享(错)。
oracle数据库系统中数据块的大小与操作系统有关(对)。
oracle数据库系统中,启动数据库和第一步是启动一个数据库实例(对)。 启动数据库实例、挂载数据库
数据库概念模型主要用于数据库概念结构设计()。
SGA 是针对某一服务器进程而保留的内存区域,它是不可以共享的。(对)
用户进程可以直接操纵数据库。(*) --oracle有自己的进程的
Order by 子句仅对检索数据的显示有影响,并不改变表中行的内部顺序。(对)
从一个表中删除元组时, delete 和 drop table 命令可以起到同样的效果。(错) 元组其实就是行,delete可以,drop的可以删除表对象
隐式指针与显式指针的不同在于显式指针仅仅访问一行,隐式的可以访问多行。(错) 游标的话分为显示和隐式的,你可以看这个链接
(http://heisetoufa.javaeye.com/blog/366483)
与主键不同,惟一键可以是 null 值。(错) 主键是非空的
Delete 可以有选择地删除记录,使用 rollback 语句可以取消这个命令的执行。(对) delete之后没有commit的时候是可以rollback的
Create table <table name> as select 能够创建一个复制表对象。(对)
使用 having 子句是为了限制 group by 子句返回的行的个数。() 拿不准 having的作用见链接(http://..com/question/130503528.html?fr=ala0)
⑸ oracle数据库的题目,求答案。。。。
答案如下,正确为T,错误为F
1、 oracle数据库系统中, 启动数据库的第一步是启动一个数据库实例。 ( T ) 2、Oracle服务器端的监听程序是驻留在服务器上的单独进程,专门负责响应客 户机的连接请求。( F) 3、 oracle数据库中实例和数据库是一一对应的 (非ORACLE并行服务, 非集群) 。 ( T) 4、系统全局区SGA 是针对某一服务器进程而保留的内存区域,它是不可以共享 的。( F ) 5、数据库字典视图ALL_***视图只包含当前用户拥有的数据库对象信息。 ( F ) 8、数据字典中的内容都被保存在SYSTEM表空间中。( T ) 9、HAVING后面的条件中可以有聚集函数,比如SUM(),AVG()等, WHERE 后面的 条件中也可以有聚集函数。( F ) 10、"上海西北京" 可以通过like ‘%上海_’查出来。( F
)
11、 表空间是oracle 最大的逻辑组成部分。Oracle数据库由一个或多个表空间 组成。 一个表空间由一个或多个数据文件组成,但一个数据文件只能属于一个表 空间。( T ) 12、表空间分为永久表空间和临时表空间两种类型。( T ) 13、truncate是DDL操作,不能 rollback。( T ) 14、 如果需要向表中插入一批已经存在的数据, 可以在INSERT语句中使用WHERE 语句。( F ) 15、Oracle数据库中字符串和日期必须使用双引号标识。( F ) 16、Oracle数据库中字符串数据是区分大小写的。( T )
17、Oracle数据库中可以对约束进行禁用,禁用约束可以在执行一些特殊操作 时候保证操作能正常进行。( F )
18、为了节省存储空间,定义表时应该将可能包含NULL值的字段放在字段列表 的末尾。( T ) 20、在连接操作中,如果左表和右表中不满足连接条件的数据都出现在结果中, 那么这种连接是全外连接。( T ) 21、自然连接是根据两个表中同名的列而进行连接的,当列不同名时,自然连接 将失去意义。( T ) 23、PL/SQL代码块声明区可有可无。( T ) 24、 隐式游标与显式游标的不同在于显式游标仅仅访问一行, 隐式的可以访问多
行。( F )
25、隐式游标由PL/SQL维护,当执行查询时自动打开和关闭。( T ) 26、显式游标在程序中显式定义、打开、关闭,游标有一个名字。( T )
27、隐式游标的游标属性前缀是SQL。( T ) 28、显式游标的游标属性的前缀是游标名。( T ) 29、隐式游标的属性%ISOPEN总是为FALSE。(
T ) 30、显式游标的%ISOPEN根据游标的状态确定值(
F )
31、隐式游标的SELECT语句带有INTO子串,只有一行数据被处理。( T ) 32、 显式游标可以处理多行数据, 在程序中设置循环, 取出每一行数据。 ( T
)
34、可以在PL/SQL中使用GOTO语句使运行流程进行跳转。( F )
35、因为存储过程不返回值,使用时只能单独调用;而函数却能出现在能放置表 达式的任何位置。( Y )
查看页面:http://wenku..com/view/d64574cd8bd63186bcebbc8c.html
⑹ 关于Oracle数据库编程题的解答。谢谢各位!
1、查询姓“李”的老师的个数;
SELECT COUNT(Tno) FROM Teacher WHERE Tname LIKE '李%'
2、查询学过“c001”并且也学过编号“c002”课程的同学的学号、姓名;
SELECT Sno, Sname
FROM Student
WHERE sno IN(SELECT sno
FROM (SELECT Sno FROM SC WHERE Cno = 'c001') t1
(SELECT Sno FROM SC WHERE Cno = 'c002') t2
WHERE t1.sno = t2.sno)
3、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
SELECT Sno, Sname
FROM student
WHERE Sno IN(SELECT SC
FROM SC
WHERE CNO IN (SELECT CNO FROM Course WHERE Cname = '叶平')
GROUP BY SC HAVING COUNT(CNO) = (SELECT COUNT(CNO) FROM Course WHERE Cname = '叶平'))
4、查询“c001”课程比“c002”课程成绩高的所有学生的学号
SELECT C1.SC
FROM (SELECT SC, Score FROM SC WHERE Cno = 'c001') c1
(SELECT SC, Score FROM SC WHERE Cno = 'c002') c2
WHERE c1.SC = c2.SC
AND c1.Score > c2.Score
如果只有C1,而没有C2成绩,用这个好一点
SELECT SC
FROM (SELECT SC, Score FROM SC WHERE Cno = 'c001') c1
left join (SELECT SC, Score FROM SC WHERE Cno = 'c002') c2
ON c1.SC = c2.SC AND c1.Score > c2.Score
5、查询平均成绩大于60分的同学的学号和平均成绩;
SELECT Sno, AVG(score)
FROM SC GROUP BY Sno Having AVG(score) > 60
6、查询所有同学的学号、姓名、选课数、总成绩;
SELECT stu.Sno, stu.Sname, COUNT(Cno), SUM(score)
FROM Student stu, SC
WHERE stu.Sno = Sc.sno
GROUP BY stu.sno, stu.Sname
7、查询没有学全所有课的同学的学号、姓名;
SELECT Sno, Sname
FROM SC
WHERE Sno NOT IN (SELECT Sno
FROM SC
GROUP BY SC
HAVING COUNT(CNO) < (SELECT COUNT(DISTINCT CNO) FROM SC))