一些问题
1、为什么UNION ALL比UNION更快
你如果还记得,union操作是将两个数据集合并在一起。它不会产生重复或者多余的行。为了完成这样的效果,需要对这两张表执行SORT操作。这个SORT操作明显是计算密集的,并且会使用大量的内存。相反,UNION ALL仅仅是将两个集合的数据任意的合并在一起,而不管行是否重复。
2、使用Oracle的CREATE DATABASE语句来手动的新建数据库有什么好处呢?
你可以给新建数据库的操作编写成脚本,这样将它包含在产品发布的安装脚本中。
你可以把新建数据库的脚本放在CVS中以便进行版本控制,当你对该脚本进行修改时候,你可以跟踪这些修改,就像你对软件代码所进行的修改一样。
你可以将执行结果写到日志中,以便检查错误
你可以了解更多的数据库新建过程,比如哪些选项是可选的以及为什么。
3、创建好的密码的三条经验规则都是什么?DBA如何在Oracle中实施这些规则?你可能遇到的商业挑战有哪些?
典型的密码破译软件都会使用一个本地语言的字典,以及固有名字的列表,以此尝试猜出未知的密码。由于计算机可以很快的发起上万次的尝试,因此这将是闯入数据库的一个非常有效的方法。好的密码应该不是一个字典中的词汇,它也不应该是固有名字、生日以及其他一些容易猜到的信息。它应该足够长,例如8位到10位字符,包括大小写、特殊字符,如果可能还应该包括替换字符。(alternate character)
Oracle有一个工具叫做密码安全概要文件(password security profile)。如果你安装了它,它会加强密码的复杂性,长度规则以及其他的密码相关的安全措施。
在安全理论中,密码可以做的很好,并且也是一个可以解决的问题。但是,现实世界中的情况又是如何呢?通常最大的挑战是在企业中实施的那些规则。它可能会遇到相当的抵制,因为这会引起那些不重视考虑安全问题的用户的争论。要通过你在工作中遇到的安全漏洞和非法闯入的真实故事,或者在Internet上讨论的案例,来教育这些商业群众有关的安全风险,这对强调现实的风险会很有帮助。
4、解释Oralce Wait Interface,它是如何工作,它提供了什么功能,限制又是什么? db_file_sequential_read和db_file_scattered_read事件指示了什么?
Oracle Wait Interface参考Oracle数据字典来管理等待事件。对v$system_event、v$session_event等表进行select可以告诉你发生在数据库(或者会话)的生命周期中的事件总数。前者是整个系统的事件总数,后者是每个会话的事件总数。db_file_sequential_read事件与读单个块以及使用rowid访问表有关。而db_file_scattered_read事件着和全表扫描有关。它之所以这样命名是因为表的所有的块都被读出,然后散落在缓存中。
5、在Oracle中,你怎么样才能返回查询的前N个结果?为什么明显的方法不行?
大多数人可能想到将ROWNUM伪列和ORDER BY一起使用。不幸的是,ROWNUM在ORDER BY之前就确定了,因此你无法得到你想要的结果。正确的答案是使用子查询先做ORDER BY。比如要返回工资最高的前5个雇员:
SELECT * FROM (SELECT * FROM employees ORDER BY salary) WHERE ROWNUM < 5;
6、Oracle Data Guard可以在标准版中使用吗,如果可以,如何使用?你怎样测试备用数据库是同步的?
Oracle的Data Guard技术是一层软件,并且能够基于备用数据库工具自动建立。Oracle标准版是可以用作备用数据库,并且手动的更新的。粗略的讲,设置你的生产数据库为archivelog模式。创建该数据库的热备份,将备份移到备用设备上。然后在生产设备上新建一个备用controlfile,将这个文件和所有的归档的redolog文件转移到备用服务器上。一旦你将这些都做完了,将它们放到各自合适的位置,恢复备用数据库,这样就可以开始回滚了。从这一点起,你一定要手动的移动和应用这些归档的redolog,以便保持和生产数据库同步。
如何测试备用数据库,在生产服务器上对某个表进行修改,并且提交这个修改。然后手动的切换logfile,这样修改就被归档了。手动的转移这个最新的归档redolog文件,并且手动的应用到备用数据库上。然后以只读模式打开你的备用数据库,并且对你改动的表进行select,确认改变是生效的。一旦你测试完毕,关闭你的备用数据库,再以standy模式启动。
7、什么是数据库链接?公共和私有的数据库链接的区别是什么?什么是固定用户数据库链接?
数据库链接让你连接到远程的数据库,无论是Oracle还是其他的,并且执行查询表,甚至将表的数据和本地数据库中的表进行连接(join)。
私有数据库链接只能被拥有它的用户/模式使用和访问。全局的数据库链接可以被数据库中所有的用户访问。
固定的用户链接是指你只能通过在链接中指定的用户来访问远程的数据库。另外的一种,当前用户数据库链接是使用你登陆到本地数据库的用户来连接远程的数据库。