Oracle函数面试题(二)

2014-11-24 15:53:29 · 作者: · 浏览: 12
句例外处理 举例说明
答案: 当sql 语句在执行过程中出现意外时,如查询时,未查询到结果;更改时无记录等情况的应采取的措施.
以oracle为例:测试其对exception的理解.如
select 字段 into 变量 from table ;
若查询出多条记录,应增加exception 例外处理.
Oracle处理异常有三种:
1.预定义的例外处理,EXCEPTION WHEN exception_name THEN
2.EXCEPTION_INIT产生例外
首先要declare 声明一个例外名;然后将例外名和错误代码绑定pragma exception_init(错误名,错误代码);最后在EXCEPTION 处when 错误名then
3.用户自定义例外,不用EXCEPTION,当判断条件成熟时用raise_application_error(-20000~~~-20999,提示信息)。
13、判断下列论述是否正确。 (1) 一个事务中的某条SQL命令提交时,其它SQL命令可以不提交。 (2) 在一个关系表中,主键可唯一标识一行记录。 (3) 一个关系表中的外键必定是另一表中的主键。 (4) 回滚可以在事务失败时,回到操作事务前的数据状态。
答案: (1)错误 (2)正确 (3)正确 (4)正确
14、以下哪些手段可保证数据库中数据的完整性和一致性: (1)自定义数据类型 (2)触发器 (3)主键和外键 (4)事务
答案: (1)(2)(3)(4) (为什么有1)
15、使用存储过程访问数据库比直接用SQL语句访问有哪些优点
答案:存储过程是预编译过的,执行时勿须编译,执行速度更快;存储过程封装了一批SQL语句,便于维护数据的完整性与一致性;可以实现代码的复用。
1.高级
16、对于精通的数据库系统描述其体系结构,主要包括存储机制、回滚机制、运行机制等.
答案:对oracle 系统而言,描述sga的结构; 后台pmon,ckpt、lgwr,smon等进程的功能;表空间的分配策略; 回滚段的结构
oracle的sga(系统全局区)包括的主要区有:数据库缓存区,重做日志缓存区,共享池(数据字典缓存和库缓存),大池等。数据库缓存区用来存放最近使用过的数据块主要和后台进程中的数据库写进程(DBWR)以及数据文件发生关系;重做日志缓存区用于存放操作数据库数据所产生的重做日志信息,与之合作的有重做日志写进程(LGWR)和重做日志文件;共享池主要缓存SQL/PLSQL,资源锁,控制信息等,其中的库缓存主要缓存被解析执行过的SQL/PLSQL库缓存可分为共享SQL和私有SQL两个区,共享SQL用于存放SQL语句的语法分析结果和执行计划,私有SQL则用来存放与具体SQL语句执行有关的绑定变量,会话参数等。
ORACLE实例的另外一个重要部分就是其后台进程,主要的后台进程有:数据库写进程(DBWR),重做日志写进程(LGWR),系统监视器(SMON),进程监视器(PMON),检查点进程(CKPT)。DBWR主要是对数据库缓存区中的脏冷数据进行写入数据文件操作;LGWR主要是将对数据库数据操作所产生的重做日志信息写入到重做日志文件中;SMON完成由于非正常关闭数据库的情况下重起数据库时对数据库的恢复;PMON用来恢复失败的用户进程和服务进程,并释放其所占的系统资源;CKPT可以表示数据库在此出处于完整状态。
逻辑存储结构:数据块BLOCK,区EXTENT,段SEGMENT,表空间TABLESPACE
物理存储空间:表空间,数据文件,控制文件,日志文件,数据字典
软件体系结构就是上边对SGA和后台进程的描述。
17、对于精通的数据库系统描述其数据一致性的保证机制,包括lock,事务一致性等.
答案: 在并发环境下,采用多种机制保持其数据的一致性,如oracle系统提供的事务级的一致性、行级锁、表级锁等等.
18、对精通的数据库系统描述其联机备份机制、恢复机制,考核其对日志的理解.
答案: 描述相关数据库的实时联机备份策略,如数据库系统在运行中通过何种方式保证其数据的实时备份, 出现问题时,应采取何种办法从联机备份进行恢复.
对对oracle而言,其archive online 备份方式应如何设置、修改什么参数、如何安排备份空间等等.
19、精通的数据库系统描述性能优化方法,包括优化的策略、参数、验证方法等.
答案:
20、Truncate; 与 delete;的区别 (这道题可以衍生出很多的问题比如:想快速的清除一个很大的表中的数据应该用设么操作 答案是:应该用truncate。还有,在对两个相同纪录数的分别表使用了truncate,和delete commit;后对这两个表进行count(*)统计记录数操作,那个表速度会快些 答案是:使用了truncate的会快些。)
21、写一个‘游标’并使用它。(这道题应该注意的是:在使用游标后一定要记得关闭游标)。
Declare
Cursor cursor_name is
Select * from tablename;
Begin
Open cursor_name;
Loop
Fetch cursor_name into bianliang;
Exit when cursor_name%notfound;
Sql……..
End loop;
Close cursor_name;
End;
22、在创建表的时候会设置
pctfree 10
pctused 40
而创建表的索引的时候却没有
pctused 40
这是为什么
(这道题的主要思想是索引不能在pctused 40上得到什么好处)
23、使用过的最大的表有多少行纪录 (这道题不是看应试者的技术过不过关,而是考察应试者是否有大型数据库的管理操作经验)
不要对表的索引列进行函数操作,因为这样系统就不能使用索引,使查询变得很慢,但是在ora8i以后就已经开始支持函数的索引,弥补了这个不足。
24、ORACLE数据库启动与关闭的步骤
启动:启动实例—-加载数据库数据—–打开数据库
关闭:关闭数据库—-卸载数据库数据—-关闭实例
25、Delete与truncate的区别
delete一般用于删除少量记录的操作,而且它是要使用回滚段并且要进行显示的提交事务。而truncate则使用于大量删除数据,而且隐式提交事务,其速度要比使用delete快的多。
26、DDL和DML分别代表什么
DDL表示数据定义语言,在ORACLE中主要包括CREATE,ALTER,DROP
DML表示数据操作语言,主要的DML有SELECT,INSERT,UPDATE,DELETE
28、 Javascript中动态效果时调用的函数。
29、数据库中有若干条相同的记录,删除到只剩下一条记录。如何做,请用SQL语句通过ROW_ID来写出执行过程。
Delete table_name where ziduan=’’ and rowed<(select max(rowed) from table_name where ziduan=’’);
30、oracle数据库表存放到磁盘什么地方(什么物理空间上——大概意