程序员人生 网站导航

【面试】【Oracle常见问题总结】【01】

栏目:数据库应用时间:2016-06-03 19:09:51

【常见面试问题总结目录>>>】


001 数据库分页查询

  select * from (
    select t.*,rownum from table1 t where condition )
  where rownum>(pangeNow⑴)*pageSize and rownum<=(pageNow)*pageSize

002 事务概念

  答案:事务是这样1种机制,它确保多个SQL语句被当作单个工作单元来处理。事务具有以下的作用:
  1致性:同时进行的查询和更新彼此不会产生冲突,其他用户不会看到产生了变化但还没有提交的数据。
  可恢复性:1旦系统故障,数据库会自动地完全恢复未完成的事务。

003 触发器的作用,甚么时候用触发器,创建触发器的步骤,触发器里是不是可以有commit, 为何?

  答案:触发器是可以由事件来启动运行的,存在于数据库服务器中的1个进程。他的作用:可以实现1般的束缚没法完成的复杂束缚,从而实现更加复杂的完全性要求。使用触发器其实不存在严格的限定,只要用户想在无人工参与的情况下完成1般的定义束缚不可以完成的束缚,来保证数据库完全性,那末就能够使用触发器。
  由于触发器主要是用来保证数据库的完全性的,所以要创建1个触发器,首先要明确该触发器应当属于那1种(DML,INSTEAD OF,SYSTEM)由于他们各有个的用处;其次就是要肯定触发器被触发以后所设计到的数据。 触发器中不可使用COMMIT。

004 关系数据库系统与文件数据库系统的区分在那里?关系数据库系统1般适用那些方面?

  答案: 关系数据库系统文件系统的区分在于:
  首先,关系性数据库的整体数据是结构化的,采取关系数据模型来描写,这是它与文件系统的根本区分。(数据模型包括:数据结构,数据操作和完全性束缚条件)
  其次,关系数据库系统的同享性高,冗余低可以面向全部系统,而文件系统则具有利用范围的局限性,不容易扩大。
  第3,关系数据库系统采取两级映照机制保证了数据的高独立性,从而使得程序的编写和数据都存在很高的独立性。这方面是文件系统没法到达的,它只能针对某1个具体的利用。(两级映照:保证逻辑独立性的外模式/模式映照和保证物理独立性的内模式/模式映照。外模式:用户模式,是数据库用户的局部数据的逻辑结构特点的描写。模式:数据库全部数据的逻辑结构特点的描写。内模式:也就是数据终究的物理存储结构的描写。)
  第4,就是关系性数据库系统由统1的DBMS进行管理,从而为数据提供了如安全性保护,并发控制,完全性检查和数据库恢复服务。

005 触发器的概念,存储进程的概念.

  答案: 触发器: 是存储在数据库中的进程,当表被修改(增、删、改)时它隐式地被激起。 存储进程:是数据库语言SQL的集合,一样也存储在数据库中,但是他是由其他利用程序来启动运行或也能够直接运行。

006 甚么是事务1致性 ? 选择熟习的数据库实现1个事务处理,如信誉卡提款. 答案:

  事务的1致性:是事务原子性的体现,事务所对应的数据库操作要末成功要末失败没有第3种情况。事务不论是提交成功与否都不能影响数据库数据的1致性状态。
  事务:用户定义的1个数据库操作序列,这些操作要末全部成功完成要末全部不做,是1个不可分割的整体。定义事务的SQL语句有:BEGIN TRANSACTION,COMMIT,ROLLBACK。
  事务的原子性:就是事务所包括的数据库操作要末都做,要末都不做.
  事务的隔离性:事务对数据的操作不能够遭到其他事务的影响。
  事务的延续性:也就是说事务对数据的影响是永久的。
  对信誉卡提款这1事务而言就是要保证’提取到现金’和’卡帐号余额’的修改要同时成功或失败.
  BEGIN TRANSACTION
    读取A的帐户余额BALANCE
    BALANCE=BALANCE-AMOUNT转帐金额
    IF(BALANCE<0)
      THEN ROLLBACK
    ELSE BEGIN
      将A的新余额写回
      读取B的帐户余额BALANCEB
      BALANCEB=BALANCEB+AMOUNT转帐金额
      将B的新余额写回
      COMMIT
    END IF
  END

007 实现索引的方式? 索引的原理? 索引的代价? 索引的类型?

  答案: 实现索引的方式有两种:针对1张表的某些字段创建具体的索引,如对oracle: create index 索引名称 on 表名(字段名);在创建表时为字段建立主键束缚或唯1束缚,系统将自动为其建立索引。
  索引的原理:根据建立索引的字段建立索引表,寄存字段值和对应记录的物理地址,从而在搜索的时候根据字段值搜索索引表的到物理地址直接访问记录。
  引入索引虽然提高了查询速度,但本身占用1定的系统存储容量和系统处理时间,需要根据实际情况进行具体的分析.
  (oracle)索引的类型有:B树索引位图索引函数索引等。

008 view 的概念 ? 什么时候利用?

答案: view 是对表级数据的多角度的透视,适用于对查询安全性、灵活性有1定要求的环境.

009 使用存储进程访问数据库比直接用SQL语句访问有哪些优点?

  答案:存储进程是预编译过的,履行时不必编译,履行速度更快;存储进程封装了1批SQL语句,便于保护数据的完全性与1致性;可以实现代码的复用。

010 Oracle中回滚的概念?回滚段有甚么作用。

  回滚就是在事务提交之前将数据库数据恢复到事务修改之前数据库数据状态。
  回滚段就是为回滚提供根据,记录的是事务操作数据库之前的数据或对应于之前操作的操作,这个内容要根据之前的操作而定。比如说之前事务操作如果是UPDATE那末回滚段则存储UPDATE之前的数据,如果事务是DELETE操作那末存储的则是与之相对应的INSERT操作语句,相反如果事务操作是INSERT那末记录像应的则是DELETE操作了。

011 介绍1下oracle的体系结构?

  逻辑体系结构:块,区,段,表空间
  物理体系结构:表空间,3大文件
  软件体系结构:SGA,后台进程.

012 简述ORACLE中SGA的组成部份。

  答:系统全局区包括:同享池重做日志缓存区数据高速缓存区大池JAVA池

013 简述ORACLE的启动和关闭各有多少步骤?

  启动:启动实例、装载数据库数据、打开数据库。 关闭:关闭数据库、卸载数据库数据、关闭实例。

014 ORACLE数据库都有哪些类型的文件?

  数据文件,控制文件,日志文件,参数文件

015 在Oracle中,你所创建的表空间信息放在哪里?

  寄存在数据字典中,数据字典内容对应于系统表空间SYSTEM表空间。

016 ORACLE的基本数据类型有哪些?

  Char()存储定长字符,定义的时候可以不为他指定长度但是如若往里插入值则会出错;varchar2()存储变长字符定义的时候必须指定长度,date存储时间日期;Number()数字类型,包括整型,浮点型等;clob()大容量字符串;blob()大2进制对象

017 数据库的几种物理文件?

  1)数据文件
  2)控制文件
  3)日志文件

018 控制文件都含有哪些信息?

  控制文件寄存有实例信息(实例名称创建时间等),数据文件和日志文件信息,还有系统运行时记录的系统变更码(SCN),检查点信息和归档确当前状态信息等。数据库在加载数据库的时候首先要读取控制文件取得和数据库有关的物理结构信息以后才能够正确加载数据文件和日志文件并打开数据库

019 truncate和delete的区分?

  1. TRUNCATE在各种表上不管是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤消,而TRUNCATE则不会被撤消。
  2. TRUNCATE是1个DDL语言而DELETE是DML语句,向其他所有的DDL语言1样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
  3. TRUNCATE将重新设置高水平线和所有的索引。在对全部表和索引进行完全阅读时,经过TRUNCATE操作后的表比DELETE操作后的表要快很多。
  4. TRUNCATE不能触发触发器,DELETE会触发触发器。
  5. 不能授与任何人清空他人的表的权限。
  6. 当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
  7. 不能清空父表。

020 表空间如何扩大?并用语句写出?

  两种扩大方式:
  1. 增加数据文件 alter tablespace tablespace_name add datafile ‘’ xxMB
  2. 扩大数据文件大小 alter database datafile ‘’ resize newMB

021 表空间区管理方式?哪一种方式现在是推荐使用的?

  1. 字典管理方式 extent management dictionary;默许方式
  2. 本地管理方式 extent management local[autoallocate/uniform xxmb]<推荐>;

022 分区表的利用?

  1. 1个分区表有1个或多个分区,每一个分区通过使用范围分区、散列分区、或组合分辨别区的行
  2. 分区表中的每个分区为1个段,可各自位于不同的表空间中
  3. 对同时能够使用几个进程进行查询或操作的大型表分区非常有用

023 谈谈索引的用法及原理?

  索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据块,从而大大减少读取数据块的I/O次数,因此可以显著提高性能。

024 存储进程的利用,如何既有输入又有输出?

  Create procedure pro_name (xxxx in/out type; yyyy in/out/inout type; )
  is/as zzzz type;
  begin
    sqlpro;
    exception exceptionxxxxx;
    commit;
  end;

025 Oracle中的异常有哪几类?

  oracle中有3种类型的异常。预定义的异常 非预定义的异常 用户定义的异常 第2种非预定义的异常是与特定的oracle毛病关联。

026 Oracle的优化策略(对MySQL一样适用)

  优化的策略1般包括: 内存优化、操作系统优化、数据存储的优化、网络优化等方法
  具体到不同的数据库触及到要调剂不同的数据库配置文件、不同的操作系统参数、网络参数等等, 不同的数据库不同。

027 使用索引查询1定能提高查询的性能吗?为何?

  通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期保护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O. 由于索引需要额外的存储空间和处理,那些没必要要的索引反而会使查询反应时间变慢.使用索引查询不1定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种情况:
  基于1个范围的检索,1般查询返回结果集小于表中记录数的30%宜采取;
  基于非唯1性索引的检索,索引就是为了提高查询性能而存在的,如果在查询中索引没有提高性能,只能说是用错了索引,或讲是场合不同

028 绑定变量是甚么?绑定变量有甚么优缺点?

  绑定变量是指在SQL语句中使用变量,改变变量的值来改变SQL语句的履行结果。
  优点:使用绑定变量,可以减少SQL语句的解析,能减少数据库引擎消耗在SQL语句解析上的资源。提高了编程效力和可靠性。减少访问数据库的次数, 就可以实际上减少ORACLE的工作量。
  缺点:常常需要使用动态SQL的写法,由于参数的不同,可能SQL的履行效力不同;
  绑定变量是相对文本变量来说的,所谓文本变量是指在SQL直接书写查询条件, 这样的SQL在不同条件下需要反复解析,绑定变量是指使用变量来代替直接书写条件,查询bind value在运行时传递,然后绑定履行。
  优点是减少硬解析,下降CPU的争用,节省shared_pool
  缺点是不能使用histogram,sql优化比较困难

029 简单描写tablespace / segment / extent / block之间的关系

  tablespace: 1个数据库划分为1个或多个逻辑单位,该逻辑单位成为表空间;每个表空间可能包括1个或多个 Segment;
  Segments: Segment指在tablespace中为特定逻辑存储结构分配的空间。每个段是由1个或多个extent组成。包括数据段、索引段、回滚段和临时段。
  Extents: 1个 extent 由1系列连续的 Oracle blocks组成.ORACLE为通过extent 来给segment分配空间。
  Data BlocksOracle 数据库最小的I/O存储单位,1个data block对应1个或多个分配给data file的操作系统块。
  table创建时,默许创建了1个data segment,每一个data segment含有min extents指定的extents数,每一个extent据据表空间的存储参数分配1定数量的blocks

030 回滚段的作用是甚么?

  回滚段用于保存数据修改前的映象,这些信息用于生成读1致性数据库信息、在数据库恢复和Rollback时使用。1个事务只能使用1个回滚段。
  事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影象)会寄存在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影象来将修改的数据恢复到原来的值。
  事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。
  读1致性:当1个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。 当1个语句正在履行时,该语句将看不到从该语句开始履行后的未提交的修改(语句级读1致性) 当ORACLE履行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN) 来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当1个长时间的查询正在履行时, 若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影象来构造1个读1致性视图

031 日志的作用是甚么

  日志文件(Log File)记录所有对数据库数据的修改,主要是保护数据库以避免故障,和恢复数据时使用。其特点以下:
  1. 每个数据库最少包括两个日志文件组。每一个日志文件组最少包括两个日志文件成员。
  2. 日志文件组以循环方式进行写操作。
  3. 每个日志文件成员对应1个物理文件。
  记录数据库事务,最大限度地保证数据的1致性与安全性
  重做日志文件:含对数据库所做的更改记录,这样万1出现故障可以启用数据恢复,1个数据库最少需要两个重做日志文件
  归档日志文件:是重做日志文件的脱机副本,这些副本可能对从介质失败中进行恢复很必要。

031 SGA主要有那些部份,主要作用是甚么

  系统全局区(SGA):是ORACLE为实例分配的1组同享缓冲存储区,用于寄存数据库数据和控制信息,以实现对数据库数据的管理和操作。 SGA主要包括:
  1. 同享池(shared pool) :用来存储最近履行的SQL语句和最近使用的数据字典的数据。
  2. 数据缓冲区 (database buffer cache):用来存储最近从数据文件中读写过的数据。
  3. 重作日志缓冲区(redo log buffer):用来记录服务或后台进程对数据库的操作。 另外在SGA中还有两个可选的内存结构:
  4. Java pool: 用来存储Java代码。
  5. Large pool: 用来存储不与SQL直接相干的大型内存结构。备份、恢复使用。

033 Oracle系统进程主要有哪些,作用是甚么

  数据写进程(DBWR):负责将更改的数据从数据库缓冲区高速缓存写入数据文件
  日志写进程(LGWR):将重做日志缓冲区中的更改写入在线重做日志文件
  系统监控 (SMON): 检查数据库的1致性如有必要还会在数据库打开时启动数据库的恢复
  进程监控 (PMON): 负责在1个Oracle 进程失败时清算资源
  检查点进程(CKPT):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。
  归档进程 (ARCH):在每第二天志切换时把已满的日志组进行备份或归档
  恢复进程 (RECO): 保证散布式事务的1致性,在散布式事务中,要末同时commit,要末同时rollback

034 备份如何分类

  逻辑备份:exp/imp 指定表的逻辑备份 物理备份:
  热备份:alter tablespace begin/end backup;
  冷备份:脱机备份(database shutdown)
  RMAN备份
  full backup/incremental backup(积累/差异) 物理备份
  物理备份是最主要的备份方式。用于保证数据库在最小的数据库丢失或没有数据丢失的情况下得到恢复。
  冷物理
    冷物理备份提供了最简单和最直接的方法保护数据库因物理破坏丢失。建议在以下几种情况中使用。
    对1个已存在大最数据量的数据库,在晚间数据库可以关闭,此时利用冷物理备份。 对需对数据库服务器进行升级,(如更换硬盘),此时需要备份数据库信息,并在新的硬盘中恢复这些数据信息,建议采取冷物理备份。
  热物理
    主要是指备份进程在数据库打开并且用户可使用的情况下进行。需要履行热物理备份的情况有:
由于数据库性质要求不中断工作,因此此时只能采取热物理备份。 由于备份的要求的时间太长,而数据库只能短时间关闭时。
  逻辑备份 (EXP/IMP)
    逻辑备份用于实现数据库对象的恢复。但不是基于时间点可完全恢复的备份策略。只能作为联机备份和脱机备份的1种补充。
  完全逻辑备份
    完全逻辑备份是将全部数据库导出到1个数据库的格式文件中,该文件可以在不同的数据库版本、操作系统和硬件平台之间进行移植。
指定表的逻辑备份
  通过备份工具,可以将指定的数据库表备份出来,这可以免完全逻辑备份所带来的时间和财力上的浪费。

035 事物务是甚么?

  事务是作为1个逻辑单元履行的1系列操作,1个逻辑工作单元必须有4个属性,称为 ACID(原子性、1致性、隔离性和持久性)属性,只有这样才能成为1个事务:
  原子性:事务必须是原子工作单元;对其数据修改,要末全都履行,要末全都不履行。
  1致性:事务在完成时,必须使所有的数据都保持1致状态。在相干数据库中,所有规则都必须利用于事务的修改,以保持所有数据的完全性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
  隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要末是另外一并发事务修改它之前的状态,要末是另外一事务修改它以后的状态,事务不会查看中间状态的数据。这称为可串行性,由于它能够重新装载起始数据,并且重播1系列事务,以使数据结束时的状态与原始事务履行的状态相同。
  持久性:事务完成以后,它对系统的影响是永久性的。该修改即便出现系统故障也将1直保持。

036 数据库死锁的预防与消除

  死锁产生的条件
    1、资源不能同享,需要只能由1个进程或线程使用
    2、要求且保持,已锁定的资源自已保持着不释放
    3、不剥夺,自给申请到的资源不能被他人剥夺
    4、循环等待
  想预防死锁,把上面4个条件破坏1个就能够了。
  避免死锁的途径就是避免满足死锁条件的情况产生,为此用户需要遵守以下原则。
    (1)尽可能避免并发地履行触及到修改数据的语句。
    (2)要求每一个事务1次就将所有要使用的数据全部加锁,否则就不予履行。
    (3)预先规定1个封闭顺序,所有的事务都必须按这个顺序对数据履行封闭。如不同的进程在事务内部对对象的更新履行顺序应尽可能保持1致。
    (4)每一个事务的履行时间不可太长,在业务允许的情况下可以斟酌将事务分割成为几个小事务来履行。【比如说把复杂的多表查询分散成屡次单表查询】
    (5)数据存储空间离散法。数据存储空间离散法是指采取各种手段,将逻辑上在1个表中的数据分散到若干离散的空间上去,以便改良对表的访问性能。主要通过将大表按行或列分解为若干小表,或按不同的用户群分解两种方法实现。这类方法类似分散“数据热门”,但是确切,如果数据不是太常常被访问,那末死锁就不会太常常产生。
    (6)还是类似(1)的,比如有1个修改上百条记录的update语句,我们可以修改成每10条1个update语句,或干脆就每条记录1个update语句。
    (7)将常常更新的数据库和查询数据库分开

037 ORACLE中的控制文件甚么时候读取?

  ORACLE服务器启动时,先启动实例然后再读取数据库的各个文件固然也包括控制文件。也就是说在数据库服务器启动的第2步时读取。

038 Oracle索引分为哪几类,说出唯1索引和位图索引的概念。

  Oracle索引有B树索引,位图索引,函数索引,簇索引等。
  唯1索引也是B树索引的1种,它要求被索引的字段值不可以重复。在创建的时候使用B树算法创建。
  位图索引其实不是采取像唯1索引那样存储(索引字段值,记录ROWID)来创建索引段的,而是为每个唯1的字段值创建1个位图,位图中使用位元来对应1个记录的ROWID。位元到ROWID是通过映照的到的。

039 描写tablespace和datafile之间的关系

  1个表空间可包括1个或多个数据文件。表空间利用增加或扩大数据文件扩大表空间,表空间的大小为组成该表空间的数据文件大小的和。1个datafile只能属于1个表空间; 1个tablespace可以有1个或多个datafile,每一个datafile只能在1个tablespace内, table中的数据,通过hash算法散布在tablespace中的各个datafile中,tablespace是逻辑上的概念,datafile则在物理上贮存了数据库的种种对象

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐