oracle数据库面试题

Oracle常见面试题
1、对数据库SQL2005、ORACLE熟悉吗?
   SQL2005是微软公司的数据库产品。是一个RDBMS数据库,一般应用在一些中型数据库的应用,不能跨平台。
   ORACLE是ORACLE公司的数据产品,支持海量数据存储,支持分布式布暑,支持多用户,跨平台,数据安全完整性控制性能优越,是一个ORDBMS,一般用在大型公司。
2、能不能设计数据库?如何实现数据库导入与导出的更新
   使用POWERDISINE工具的使用,一般满足第三范式就可以了。EXP与IMP数据库的逻辑导入与导出
3、如何只显示重复数据,或不显示重复数据
   显示重复:select * from tablename group by id having count(*)>1
   不显示重复:select * from tablename group by id having count(*)=1
4、什么是数据库的映射
   就是将数据库的表与字段对应到模型层类名与属性的过程.
5、如何用存储过程写分页?
   在SQLSERVER中使用TOP分页,在ORACLE中用ROWNUM,或分析函数ROW_NUMBER
   使用TOP:
   select top 20,n.* from tablename n minus select top 10,m.* from tablename m
   使用分析函数:
    select * from
   (select n.*,row_number() over(order by columnname) num  from tablename n)
    where num>=10 and num <=20;
   使用过程时,只要将分页的范围用两个参数就可以实现。在ORACLE中,要将过程封装在包里,还要用动态游标变量才能实现数据集的返回。
6、ORACLE中左连接与右连接
   左连接:LEFT JOIN  右连接:RIGHT JOIN
   select n.column,m.column from tablename1 n left join tablename2 m
   on n.columnname=m.columnname
   用WHERE实现:
   select n.column,m.column from tablename1 n, tablename2 m
   where n.columnname(+)=m.columnname

7、什么时候会用到触发器
   A安全管理、B日志管理、C复杂业务逻辑实现
8、如何实现数据库的优化?
    A、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。
    B、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。
    C、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。
    D、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。
    E、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。
    F、调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。
9.T表:(字段:ID,NAME,ADDRESS,PHONE,LOGDATE)
  E表:(字段:NAME,ADDRESS,PHONE)
        1)将表T中的字段LOGDATE中为2001-02-11的数据更新为2003-01-01,请写出相应的SQL语句。(该字段类型为日期类型)
        update t set logdate=to_date('2003-01-01','yyyy-mm-dd')where logdate=to_date('2001-02-11','yyyy-mm-dd');
        2)请写出将表T中NAME存在重复的记录都列出来的SQL语句(按NAME排序)
        select * from t where name in (select name from t group by name having coung(*)>1) order by name;
        3)请写出题目2中,只保留重复记录的第一条,删除其余记录的SQL语句(即使该表不存在重复记录)
        select ID,NAME,ADDRESS,PHONE,LOGDATE from (select t.*,row_number() over(partition by name order by name) rn from t)where rn = 1;
        4)请写出将E表中的ADDRESS、PHONE更新到T表中的SQL语句(按NAME相同进行关联)
        update t set (address,phone)=(select address,phone from e where e.name=t.name);
        5)请写出将T表中第3~5行数据列出来的SQL语句
        select * from t where rownum <=5 minus select * from t where rownum <=2;
10.解释冷备份和热备份的不同点以及各自的优点
  热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘)
11.你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
    重建控制文件,用带backup control file 子句的recover 命令恢复数据库。
12.如何转换init.ora到spfile?
    使用create spfile from pfile 命令
13.解释data block , extent 和 segment的区别(这里建议用英文术语)
    data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象拥有的所有extents被称为该对象的segment.
14.给出两个检查表结构的方法
    1)DESCRIBE命令
    2)DBMS_METADATA.GET_DDL 包
15.比较truncate和delete 命令
    两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .而Delete是DML操作需要rollback segment 且花费较长时间
16.给出在STAR SCHEMA中的两种表及它们分别含有的数据
  Fact tables 和dimension tables.  fact table 包含大量的主要的信息而 dimension tables 存放对fact table 某些属性描述的信息
17.如何在不影响子表的前提下,重建一个母表
  子表的外键强制实效,重建母表,激活外键
18.解释归档和非归档模式之间的不同和它们各自的优缺点
    归档模式是指你可以备份所有的数据库 transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。但是非归档模式可以带来数据库性能上的少许提高
19.如何建立一个备份控制文件?
    Alter database backup control file to trace.
20.给出数据库正常启动所经历的几种状态 ?
    STARTUP NOMOUNT – 数据库实例启动
 STARTUP MOUNT      – 数据库装载
 STARTUP OPEN          – 数据库打开
21. 如何增加buffer cache的命中率?
        在数据库较繁忙时,适用buffer cache advisory 工具,查询v$db_cache_advice . 如果有必要更改,可以使用 alter system set db_cache_size 命令
22. ORA-01555的应对方法?
        具体的出错信息是snapshot too old within rollback seg , 通常可以通过增大rollback seg来解决问题。当然也需要察看一下具体造成错误的SQL文本
23.创建数据库时自动建立的tablespace名称?
  SYSTEM tablespace.
24.创建用户时,需要赋予新用户什么权限才能使它联上数据库。
    CONNECT
25.如何在tablespace里增加数据文件?
    ALTER TABLESPACE <tablespace_name> ADD DATAFILE <datafile_name> SIZE <size>
26如何变动数据文件的大小?
    ALTER DATABASE DATAFILE <datafile_name> RESIZE <new_size>;
27.哪个VIEW用来检查数据文件的大小?
     DBA_DATA_FILES
28.哪个VIEW用来判断tablespace的剩余空间
    DBA_FREE_SPACE
29.如何判断谁往表里增加了一条纪录?
    auditing
30. 如何重构索引?
 ALTER INDEX <index_name> REBUILD;
31. 解释什么是Partitioning(分区)以及它的优点。
  Partition将大表和索引分割成更小,易于管理的分区。
32.  如何搜集表的各种状态数据?
      ANALYZE
  The ANALYZE command.
34. 如何启动SESSION级别的TRACE
     DBMS_SESSION.SET_SQL_TRACE
  ALTER SESSION SET SQL_TRACE = TRUE;
35.IMPORT和SQL*LOADER 这2个工具的不同点
  这两个ORACLE工具都是用来将数据导入数据库的。区别是:IMPORT工具只能处理由另一个ORACLE工具EXPORT生成的数据。而SQL*LOADER可以导入不同的ASCII格式的数据源
36.用于网络连接的2个文件?
 TNSNAMES.ORA and SQLNET.ORA

你可能感兴趣的:(oracle数据库面试题)