数据库笔试题面试题集

1,范式java

7大范式:1NF, 2NF,3NF,BCNF,4NF,5NF,6NFmysql

什么叫normalization?Denormalization?程序员

Normalization是数据库规范化,denormalization是数据库逆规范化。算法

在设计和操做维护数据库时,关键的步骤就是要确保数据正确地分布到数据库的表中。使用正确的数据结构,不只便于对数据库进行相应的存取操做,并且可 以极大地简化应用程序的其余内容(查询、窗体、报表、代码等)。正确进行表设计的正式名称就是”数据库规范化”。目的:减小数据库中数据冗余,增进数据的 一致性。sql

范式概念:数据库

1)1NF:目标就是表中每列都不可分割;
2)2NF:目标就是表中的每行都是有标识的。前提是知足了1NF. 当关键字为单field时,必定知足2NF。当关键字为组合field时(即超过一个field),不能存在组合关键字中有某个字段可以决定非关键字段的 某部分。非主field非部分依赖于主field,即非关键字段必须彻底依赖于一组 组合关键字,而不是组合关键字的某一部分。
3)3NF:目标是一个table里面全部的列不依赖于另一个table里面非关键的列。前提是知足了2NF,不存在某个非关键字段决定另一个非关键字段。即:不存在传递依赖(关键字x->非关键属性y->非关键属性z)
4)BCNF:前提是知足了2NF,不存在某个非关键字段决定另一个非关键字段。也不存在某个关键字段决定另一个关键字段。即:在3NF基础上,加上约束:不存在某个关键字段决定另一个关键字段。
1 第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不知足第一范式(1NF)的数据库就不是关系数据库。所谓第一范式(1NF)是指数 据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。若是出现重复的属性,就可能须要 定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。例如,对于图 3-2 中的员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表 中只出现一次。简而言之,第一范式就是无重复的列。
2 第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上创建起来的,即知足第二范式(2NF)必须先知足第一范式(1NF)。第二范式(2NF)要求数据库表 中的每一个实例或行必须能够被唯一地区分。为实现区分一般须要为表加上一个列,以存储各个实例的唯一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,由于每一个员工的员工编号是唯一的,所以每一个员工能够被唯一区分。这个唯一属性列被称为主关键字或主键、主 码。第二范式(2NF)要求实体的属性彻底依赖于主关键字。所谓彻底依赖是指不能存在仅依赖主关键字一部分的属性,若是存在,那么这个属性和主关键字的这 一部分应该分离出来造成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分一般须要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二 范式就是非主属性非部分依赖于主关键字。
3 第三范式(3NF)
知足第三范式(3NF)必须先知足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例 如,存在一个部门信息表,其中每一个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将 部门名称、部门简介等与部门有关的信息再加入员工信息表中。若是不存在部门信息表,则根据第三范式(3NF)也应该构建它,不然就会有大量的数据冗余。简 而言之,第三范式就是属性不依赖于其它非主属性。
例子:
第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
例如,以下的数据库表是符合第一范式的:字段1 字段2 字段3 字段4
而这样的数据库表是不符合第一范式的:字段1 字段2 字段3 字段4 字段31字段32
很显然,在当前的任何关系数据库管理系统(S)中,傻瓜也不可能作出不符合第一范式的数据库,由于这些S不容许你把数据库表的一列再分红二列或多列。所以,你想在现有的S中设计出不符合第一范式的数据库都是不可能的。
第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的状况),也即全部非关键字段都彻底依赖于任意一组候选关键字。
假定选课关系表为Ss(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),由于存在以下决定关系:
(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
这个数据库表不知足第二范式,由于存在以下决定关系:
(课程名称) → (学分)
(学号) → (姓名, 年龄)
即存在组合关键字中的字段决定非关键字的状况。
因为不符合2NF,这个选课关系表会存在以下问题:1) 数据冗余:同一门课程由n个学生选修,”学分”就重复n-1次;同一个学生选修了门课程,姓名和年龄就重复了-1次。2) 更新异常:若调整了某门课程的学分,数据表中全部行的”学分”值都要更新,不然会出现同一门课程学分不一样的状况。3) 插入异常:假设要开设一门新的课程,暂时尚未人选修。因为尚未”学号”关键字,课程名称和学分也没法记录入数据库。4) 删除异常:假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。可是,与此同时,课程名称和学分信息也被删除了。很显然,这也会致使插 入异常。
把选课关系表Ss改成以下三个表:
学生:Sn(学号, 姓名, 年龄);
课程:s(课程名称, 学分);
选课关系:Ss(学号, 课程名称, 成绩)。
这样的数据库表是符合第二范式的,消除了数据冗余、更新异常、插入异常和删除异常。
另外,全部单关键字的数据库表都符合第二范式,由于不可能存在组合关键字。
第三范式(3NF):在第二范式的基础上,数据表中若是不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三 范式。所谓传递函数依赖,指的是若是存在”A → → “的决定关系,则传递函数依赖于A。所以,知足第三范式的数据库表应该不存在以下依赖关系:关键字段 → 非关键字段x → 非关键字段y
假定学生关系表为Sn(学号, 姓名, 年龄, 所在[]学院[], 学院地点, 学院电话),关键字为单一关键字”学号”,由于存在以下决定关系:
(学号) → (姓名, 年龄, 所在[]学院[], 学院[]地点, []学院[]电话)
这个数据库是符合2NF的,可是不符合3NF,由于存在以下决定关系:
(学号) → (所在[]学院[]) → ([]学院[]地点, []学院[]电话)
即存在非关键字段”[]学院[]地点”、”[]学院[]电话”对关键字段”学号”的传递函数依赖。
它也会存在数据冗余、更新异常、插入异常和删除异常的状况,读者可自行分析得知。
把学生关系表分为以下两个表:
学生:(学号, 姓名, 年龄, 所在[]学院[]);
[]学院[]:([]学院[], 地点, 电话)。
这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。
鲍依斯-科得范式(BCNF):在第三范式的基础上,数据库表中若是不存在任何字段对任一候选关键字段的传递函数依赖则符合BCNF.
假设仓库管理关系表为Ssanag(仓库, 存储物品, 管理员, 数量),且有一个管理员只在一个仓库工做;一个仓库能够存储多种物品。这个数据库表中存在以下决定关系:
(仓库, 存储物品) →(管理员, 数量)
(管理员, 存储物品) → (仓库, 数量)
因此,(仓库, 存储物品)和(管理员, 存储物品)都是Ssanag的候选关键字,表中的惟一非关键字段为数量,它是符合第三范式的。可是,因为存在以下决定关系:
(仓库) → (管理员)
(管理员) → (仓库)
即存在关键字段决定关键字段的状况,因此其不符合BCNF范式。它会出现以下异常状况:1) 删除异常:当仓库被清空后,全部”存储物品”和”数量”信息被删除的同时,”仓库”和”管理员”信息也被删除了。2) 插入异常:当仓库没有存储任何物品时,没法给仓库分配管理员。3) 更新异常:若是仓库换了管理员,则表中全部行的管理员都要修改。
把仓库管理关系表分解为二个关系表:
仓库管理:Ssanag(仓库, 管理员);
仓库:Ss(仓库, 存储物品, 数量)。
这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。
简言之数据库五大范式:
第一范式:对于表中的每一行,必须且仅仅有惟一的行值.在一行中的每一列仅有惟一的值而且具备原子性.
(第一范式是经过把重复的组放到每一个独立的表中,把这些表经过一对多关联联系起来这种方式来消除重复组的)
第二范式:第二范式要求非主键列是主键的子集,非主键列活动必须彻底依赖整个主键。主键必须有惟一性的元素,一个主键能够由一个或更多的组成惟一值的列组 成。一旦建立,主键没法改变,外键关联一个表的主键。主外键关联意味着一对多的关系.(第二范式处理冗余数据的删除问题。当某张表中的信息依赖于该表中其 它的不是主键部分的列的时候,一般会违反第二范式)
第三范式:第三范式要求非主键列互不依赖.(第三范式规则查找以消除没有直接依赖于第一范式和第二范式造成的表的主键的属性。咱们为没有与表的主键关联的全部信息创建了一张新表。每张新表保存了来自源表的信息和它们所依赖的主键)
第四范式:第四范式禁止主键列和非主键列一对多关系不受约束
第五范式:第五范式将表分割成尽量小的块,为了排除在表中全部的冗余。c#

 

2,索引:windows

什么叫 revised key index?设计模式

反键索引是B*Tree索引的一个分支,它的设计是为了运用在某些特定的环境下的。Oracle推出它的主要目的就是为了下降在并行服务器 (Oracle Parallel Server)环境下索引叶块的争用。当B*Tree索引中有一列是由递增的序列号产生的话,那么这些索引信息基本上分布在同一个叶块,当用户修改或访问 类似的列时,索引块很容易产生争用。反向索引中的索引码将会被分布到各个索引块中,减小了争用.缓存

例子:有一个字段id,他的值落在一个很小的区间,好比从9000-9999,若是建b-tree索引,那么值过于紧密,反键的原理是把值取反,那么id的区间就从0009-9999,区间就被放大,这个时候经过索引来查找数据效率会比较高(oracle这么说的)。

好处是:解决了树的倾斜问题,并且能够解决在大量IO操做的状况下,防止硬盘在某个区域操做过于频繁,引发”热点”问题。

树的分支:由于索引通常是按树这个数据结构来组织,因此有不少分支,把不一样类别或范围的数据存放在分支里,在符合条件的分支里查询比在全表查询效率高不少。

树的倾斜:树的某个分支过与庞大,而其余分支内容却不多,这样的索引很是不健康的,查询速度也很慢,如上面的示例数据,都在10000-20000 的分支,而20000-30000或者以上的分支是空的。反转后把这些数据均匀分布到不一样的分支,能够使索引更加健康,也更有效率。

热点问题:因为系统在表数据的增删改查的同时,同时要承担索引开支,而这主要是硬盘的IO操做,若是树是倾斜的,并且数据的增长是按必定顺序增加的,这种状况会致使硬盘对某一固定区域操做频繁,会出现热点问题,并且出现瓶颈。

Oracle五种索引:

1)b*tree index:几乎全部的关系型数据库中都有b*tree类型索引,也是被最多使用的。其树结构与二叉树比较相似,根据rid快速定位所访问的行。 B-Tree索引是基于二叉树的,由分支块(branch block)和叶块(leaf block)组成。在树结构中,位于最底层底块被称为叶块,包含每一个被索引列的值和行所对应的rowid。在叶节点的上面是分支块,用来导航结构,包含了 索引列(关键字)范围和另外一索引块的地址。

2)反向索引:反转了b*tree索引码中的字节,是索引条目分配更均匀,多用于并行服务器环境下,用于减小索引叶的竞争。 反向索引又一个缺点就是不能在全部使用常规索引的地方使用。在范围搜索中其不能被使用。

3)降序索引:8i中新出现的索引类型,针对逆向排序的查询。

4)位图索引:使用位图来管理与数据行的对应关系,多用于OLAP系统。 位图索引最好用于低cardinality列(即列的惟一值除以行数为一个很小的值,接近零),例如又一个“性别”列,列值有 “Male”,“Female”,“Null”等3种,但一共有300万条记录,那么3/3000000约等于0,这种状况下最适合用位图索引。位图以一 种压缩格式存放,所以占用的磁盘空间比B-Tree索引要小得多。

5)函数索引:这种索引中保存了数据列基于function返回的值,在select * from table where function(column)=value这种类型的语句中起做用。基于函数的索引也是8i以来的新产物,它有索引计算列的能力,它易于使用而且提供 计算好的值,在不修改应用程序的逻辑上提升了查询性能。使用基于函数的索引有几个先决条件:

(1)必须拥有QUERY REWRITE(本模式下)或GLOBAL QUERY REWRITE(其余模式下)权限。

(2)必须使用基于成本的优化器,基于规则的优化器将被忽略。

(3)必须设置如下两个系统参数:

QUERY_REWRITE_ENABLED=TRUE

QUERY_REWRITE_INTEGRITY=TRUSTED

能够经过alter system set,alter session set在系统级或线程级设置,也能够经过在init.ora添 加实现。

五种索引的建立:

(1)*Tree索引。

Create index indexname on tablename(columnname[columnname...])

(2)反向索引。

Create index indexname on tablename(columnname[columnname...]) reverse

(3)降序索引。

Create index indexname on tablename(columnname DESC[columnname...])

(4)位图索引。

Create BITMAP index indexname on tablename(columnname[columnname...])

(5)函数索引。

Create index indexname on tablename(functionname(columnname))

注意:建立索引后分析要索引才能起做用。

五种索引的使用场所:

(1)B*Tree索引。

常规索引,多用于oltp系统,快速定位行,应创建于高cardinality列(即列的惟一值除以行数为一个很大的值,存在不多的相同值)。

(2)反向索引。

B*Tree的衍生产物,应用于特殊场合,在ops环境加序列增长的列上创建,不适合作区域扫描。

(3)降序索引。

B*Tree的衍生产物,应用于有降序排列的搜索语句中,索引中储存了降序排列的索引码,提供了快速的降序搜索。

(4)位图索引。

位图方式管理的索引,适用于OLAP(在线分析)和DSS(决策处理)系统,应创建于低cardinality列,适合集中读取,不适合插入和修改,提供比B*Tree索引更节省的空间。

(5)函数索引。

B*Tree的衍生产物,应用于查询语句条件列上包含函数的状况,索引中储存了通过函数计算的索引码值。能够在不修改应用程序的基础上能提升查询效率。

索引无论用的时候:

(1)RBO&CBO。

Oracle有两种执行优化器,一种是RBO(Rule Based Optimizer)基于规则的优化器,这种优化器是基于sql语句写法选择执行路径的;另外一种是CBO(Cost Based Optimizer)基于规则的优化器,这种优化器是Oracle根据统计分析信息来选择执行路径,若是表和索引没有进行分析,Oracle将会使用RBO代替CBO;若是表和索引好久未分析,CBO也有可能选择错误执行路径,不过CBO是Oracle发展的方向,自8i版原本已经逐渐取代RBO.

(2)AUTOTRACE。

要看索引是否被使用咱们要借助Oracle的一个叫作AUTOTRACE功能,它显示了sql语句的执行路径,咱们能看到Oracle内部是怎么执行sql的,这是一个很是好的辅助工具,在sql调优里普遍被运用。咱们来看一下怎么运用AUTOTRACE:

① 因为AUTOTRACE自动为用户指定了Execution Plan,所以该用户使用AUTOTRACE前必须已经创建了PLAN_TABLE。若是没有的话,请运行utlxplan.sql脚本(它在$ORACLE_HOME/rdbms/admin目录中)。

② AUTOTRACE能够经过运行plustrce.sql脚本(它在$ORACLE_HOME/sqlplus/admin目录中)来设置,用sys用户 登录而后运行plustrce.sql后会创建一个PLUSTRACE角色,而后给相关用户授予PLUSTRACE角色,而后这些用户就能够使用 AUTOTRACE功能了。

③ AUTOTRACE的默认使用方法是set autotrace on,可是这方法不老是适合各类场合,特别当返回行数不少的时候。Set autotrace traceonly提供了只查看统计信息而不查询数据的功能。

 

3,死锁

是指两个或两个以上的进程在执行过程当中,因争夺资源而形成的一种互相等待的现象,若无外力做用,它们都将没法推动下去.此时称系统处于死锁状态或系 统产生了死锁,这些永远在互相等待的进程称为死锁进程.因为资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需 的资源而没法继续运行,这就产生了一种特殊现象死锁。

产生死锁的缘由主要是:

(1) 由于系统资源不足。

(2) 进程运行推动的顺序不合适。

(3) 资源分配不当等。

若是系统资源充足,进程的资源请求都可以获得知足,死锁出现的可能性就很低,不然就会因争夺有限的资源而陷入死锁。其次,进程运行推动顺序与速度不一样,也可能产生死锁。

产生死锁的四个必要条件:

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已得到的资源保持不放。

(3) 不剥夺条件:进程已得到的资源,在末使用完以前,不能强行剥夺。

(4) 循环等待条件:若干进程之间造成一种头尾相接的循环等待资源关系。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不知足,就不会发生死锁。

例子:

运行事务 1 的线程 T1 具备学生基本信息表上的排它锁。运行事务2的线程 T2 具备系部表上的排它锁,而且以后须要学生基本信息表上的锁。事务2 没法得到这一锁,由于事务 1 已拥有它。事务2 被阻塞,等待事务 1。而后,事务1 须要 系部表的锁,但没法得到锁,由于事务 2 将它锁定了。事务在提交或回滚以前不能释放持有的锁。由于事务须要对方控制的锁才能继续操做,因此它们不能提交或回滚。

 

4,BYTE[] buf = BYTE[1024];in.read(buf);

in是一个接收图像数据的网络IO流,请指出这段代码有什么问题,并请用java代码改进它。

答:流操做均可能会跑出IOException,应该对该异常进行捕获处理。且当buf没有被初始化的时候使用会抛出NullPointerException。

byte [] buf = new byte[1024];

try {

System.in.read(buf);

} catch (IOException e) {

e.printStackTrace();

}

 

5,设计模式:Facade

你正在分析一个子系统的接口,发现接口不少。而后你同事劝你用Fecade, 问你用Fecade有什么好处?

Facade(外观)模式为子系统中的各种(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。Facade模式 正是这样一个“门面”:咱们原本须要与后台的多个类或者接口打交道,而Facade模式是客户端和后台之间插入一个中间层——门面,这个门面跟后台的多个 类或接口打交道,而客户端只须要跟门面打交道便可。使用Facade模式能够说是后台设计和编码人员的一个必备素质。我不止碰到过一个这样的后台开发人 员,他们认为只要把后台功能完成了就万事大吉,而没有站在后台使用者的角度来看一看本身写出来的代码。其实,咱们写出来的后台代码是要给别人使用的,因此 咱们提供给使用者的接口要越简单越好,这不单是对使用者好,同时对开发者也是好处多多的,至少你的接口简单了,你和使用者的交流就容易了。

区分Façade模式、Adapter模式、Bridge模式与Decorator模式。Façade模式注重简化接口,Adapter模式注重转换接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式注重稳定接口的前提下为对象扩展功能

在遇到如下状况使用Facade模式:

1)当你要为一个复杂子系统提供一个简单接口时。子系统每每由于不断演化而变得愈来愈复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更 具可重用性,也更容易对子系统进行定制,但这也给那些不须要定制子系统的用户带来一些使用上的困难。 Facade能够提供一个简单的缺省视图,这一视图 对大多数用户来讲已经足够,而那些须要更多的可定制性的用户能够越过Facade层。

2)客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其余的子系统分离,能够提升子系统的独立性和可移植性。

3)当你须要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点,若是子系统之间是相互依赖的,你可让它们仅经过Facade进行通信,从而简化了它们之间的依赖关系。

优缺点:

1)它对客户屏蔽子系统组件,于是减小了客户处理的对象的数目并使得子系统使用起来更加方便。

2)它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件每每是紧耦合的。

松耦合关系使得子系统的组件变化不会影响到它的客户。Facade模式有助于创建层次结构系统,也有助于对对象之间的依赖关系分层。Facade模 式能够消除复杂的循环依赖关系。这一点在客户程序与子系统是分别实现的时候尤其重要。在大型软件系统中下降编译依赖性相当重要。在子系统类改变时,但愿尽 量减小重编译工做以节省时间。用Facade能够下降编译依赖性,限制重要系统中较小的变化所需的重编译工做。Facade模式一样也有利于简化系统在不 同平台之间的移植过程,由于编译一个子系统通常不须要编译全部其余的子系统。

 

6,冷备份与热备份

冷备份:

冷备份发生在数据库已经正常关闭的状况下,当正常关闭时会提供给咱们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份Oracle信息而言,冷备份是最快和最安全的方法。

冷备份的优势是:

1.是很是快速的备份方法(只需拷贝文件)

2.容易归档(简单拷贝便可)

3.容易恢复到某个时间点上(只需将文件再拷贝回去)

4.能与归档方法相结合,做数据库“最新状态”的恢复。

5.低度维护,高度安全。

冷备份也有以下不足:

1.单独使用时,只能提供到“某一时间点上”的恢复。

2.在实施备份的全过程当中,数据库必需要做备份而不能做其它工做。也就是说,在冷备份过程当中,数据库必须是关闭状态。

3.若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。

4.不能按表或按用户恢复。

若是可能的话(主要看效率),应将信息备份到磁盘上,而后启动数据库(使用户能够工做)并将所备份的信息拷贝到磁带上(拷贝的同时,数据库也能够工做)。

冷备份中必须拷贝的文件包括:

1.全部数据文件

2.全部控制文件

3.全部联机REDO LOG文件

4.Init.ora文件(可选)。

下面是作冷备份的完整例子:

(1) 关闭数据库$sqldba lmode=y

SQLDBA >connect internal;

SQLDBA >shutdown normal;

(2) 用拷贝命令备份所有的时间文件、重作日志文件、控制文件、初始化参数文件

SQLDBA >! cp < file > < backup directory >

(3) 重启Oracle数据库

$sqldba lmode=y

SQLDBA >connect internal;

SQLDBA >startup;

热备份

热备份是在数据库运行的状况下,采用archivelog mode方式备份数据的方法。因此,若是你有昨天夜里的一个冷备份并且又有今天的热备份文件,在发生问题时,就能够利用这些资料恢复更多的信息。

热备份的要求是:

1. 热备份工做必须要求数据库在Archivelog 方式下操做,在SQLDBA状态下用alter database archivelog|noarchivelog命令可改变备份的模式。

2. 热备份只能在数据库不使用或使用率低的状况下进行。

3. 热备份须要大量的档案空间。

通常状况,Oracle 以循环的方式写入Online redo log 文件,当填满第一个redo log文件后写第二个,直至最后一个,最后一个被填满后,后台进程LGWR就覆盖第一个,在Archivelog方式下,后台进程ARCH在每个 redo log 文件被覆盖前,给它做一个拷贝,通常,这些文档的redo log 文件被写入磁盘或磁带中。若是磁盘空间够用,建议使用磁盘,这样可大大减小完成备份所需的时间。

在做热备份以前,要将config.ora文件中的log_archive_start 设为true 将log_archive_dest一旦数据库运行在archivelog状态下,就能够作备份了。

热备份的命令文件由三部分组成:

1.数据文件一个表空间一个表空间地备份。

(1)设置表空间为备份状态

(2)备份表空间的数据文件

(3)恢复表空间为正常状态

2.备份归档log文件。

(1)临时中止归档进程

(2)log下那些在archive redo log目标目录中的文件

(3)从新启动archive进程

(4)备份归档的redo log 文件

3.用alter database backup controlfile命令来备份拷贝文件

热备份的优势是:

1.可在表空间或数据文件级备份,备份时间短。

2.备份时数据库仍可以使用。

3.可达到秒级恢复(恢复到某一时间点上)。

4.可对几乎全部数据库实体做恢复。

5.恢复是快速的,在大多数状况下在数据库仍工做时恢复。

热备份的不足是:

1.不能出错,不然后果严重。

2.若热备份不成功,所得结果不可用于时间点的恢复。

3.因难于维护,因此要特别仔细当心,不容许“以失败而了结”。

 

7,你必须利用备份恢复数据库,可是你没有控制文件,该如何解决问题呢?

重建控制文件,用带backup control file 子句的recover 命令恢复数据库。

recover dbname using backup controlfile;

 

8,如何转换init.ora到spfile?

create spfile from pfile=’init.ora’;

 

9,oracle体系结构:

Oracle物理结构

由控制文件、数据文件、重作日志文件、参数文件、归档文件、密码文件组成

控制文件:包含维护和验证数据库完整性的必要信息、例如,控制文件用于识别数据文件和重作日志文件,一个数据库至少须要一个控制文件

数据文件:存储数据的文件

重作日志文件:含对数据库所作的更改记录,这样万一出现故障能够启用数据恢复。一个数据库至少须要两个重作日志文件

参数文件:定义Oracle 例程的特性,例如它包含调整SGA 中一些内存结构大小的参数

归档文件:是重作日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

密码文件:认证哪些用户有权限启动和关闭Oracle例程

oracle逻辑结构

表空间、段、区、块

表空间:是数据库中的基本逻辑结构,一系列数据文件的集合。

段:是对象在数据库中占用的空间

区:是为数据一次性预留的一个较大的存储空间

块:ORACLE最基本的存储单位,在创建数据库的时候指定

oracle内存分配

SGA和PGA

SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息, 它是在Oracle 服务器所驻留的计算机的实际内存中得以分配,若是实际内存不够再往虚拟内存中写。

PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反PGA 是只被一个进程使用的区域,PGA 在建立进程时分配在终止进程时回收

oracle后台进程

(数据写进程、日志写进程、系统监控、进程监控、检查点进程、归档进程、服务进程、用户进程)

数据写进程:负责将更改的数据从数据库缓冲区高速缓存写入数据文件

日志写进程:将重作日志缓冲区中的更改写入在线重作日志文件

系统监控:检查数据库的一致性若有必要还会在数据库打开时启动数据库的恢复

进程监控:负责在一个Oracle 进程失败时清理资源

检查点进程:负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

归档进程:在每第二天志切换时把已满的日志组进行备份或归档

服务进程:用户进程服务。

用户进程:在客户端,负责将用户的SQL 语句传递给服务进程,并从服务器段拿回查询数据。

Oracle Instance

Oracle 例程由SGA 内存结构和用于管理数据库的后台进程组成。例程一次只能打开和使用一个数据库。

SCN(System Change Number):系统改变号

一个由系统内部维护的序列号。当系统须要更新的时候自动增长,他是系统中维持数据的一致性和顺序恢复的重要标志。

实例和SID的关系是什么?

常常有人问SID 是什么?在Oracle 系统中SID 是一个常常出现的变量,如环境变量ORACLE_SID, 初始化文件initSID.ora,那究竟什么是SID 呢?其实SID 就是Oracle 实例的标识,不一样的SID 对应不一样的内存缓冲(SGA)和不一样的后台进程。这样一来咱们就能够得当在一台物理的服务器上能够有多个SID 的数据库实例

Oracle数据库和实例的关系是什么?

数据库是由物理文件和存取数据文件的实例组成,当存取数据文件的实例是一个的时候,数据库被称作单节点数据库。这是咱们看到的最多的数据库形式。当 然还有一种多节点数据库,就是一个以上的实例共同访问一个数据库(或者说共同访问一组数据文件), 更好的提供稳定性和并行处理能力。这在8i中被称为OPS(Oracle Parallel Server ),在Oracle9i 中被称为RAC(real application cluster)。在这种数据库中。两个/多个实例分别在不一样服务器上,全部Oracle 数据文件在共享的磁盘阵列上,多个服务器上的实例能够同时工做,他们经过一个内部的网络进行通讯。若是一台服务器不能提供服务的话,另外一台会接管它的工 做,特别是在关键的业务有很大的潜力。

在运行的数据库中数据文件中是否是可能存在没有被提交的数据?

这是可能存在的,由于用户数据文件的数据是由DBWR写入的,DBWR是一个很底层的后台进程,不负责与用户交互。用户的交互是由LGWR完成的。

在问题10中,若是存在没有写入的数据,那么机器忽然断电,数据完整性会不会损坏?

不会的,由于数据库的完整性是LGWR来保证的,并且ORACLE保证了DBWR写入数据文件的任何修改已经被记录在重作日志文件中。当系统再次启 动的时候,经过读取重作日志文件就能够知道那些数据没有被提交。这时候ORACLE 会自动回滚那些数据。因此说联机日志的损坏,特别是当前联机日志的损坏,对数据库的影响是巨大的,可能会致使数据库的不完整。

Oracle安裝完成后的初始用户名与密码?

sys/change_on_install

system/manager

scott/tiger

sysman/oem_temp

建立Sequence

create  sequence  zxk  increment  by  10   start  with  10  maxvalue  1000   cycle ;

数据字典

数据字典是ORACLE数据库的最重要的部分之一,是由一组只读的表及其视图所组成。这些表和视图是数据库被创建同时由数据库系统创建起来的,起着 系统状态的目录表的做用。数据字典描述表、列、索引、用户、访问权以及数据库中的其它实体,当其中的一个实体被创建、修改或取消时,数据库将自动修改数据 字典。所以,数据字典老是包含着数据库的当前描述,可用SQL存取数据字典,因为数据字典为只读,只容许查询。数据字典中所有基本表和用户可存取视图为 ORACLE用户SYS所持有,全部对象包含在SYS模式中。当ORACLE数据库系统启动后,数据字典老是可用,它驻留在SYSTEM表空间中。数据字 典包含视图集,在许多状况下,每一视图集有三种视图包含有相似信息,彼此之前缀相区别,前缀为USER、ALL和DBA。

 

10,给出两个检查表结构的方法

1)DESCRIBE命令

sql>desc dbname;

2)DBMS_METADATA.GET_DDL 包

 

11,怎样查看数据库引擎的报错

alert log.

 

12,比较truncate和delete 命令

一、在功能上,truncate是清空一个表的内容,它至关于delete from table_name。

二、 delete是dml操做,truncate是ddl操做;所以,用delete删除整个表的数据时,会产生大量的roolback,占用不少的rollback segments, 而truncate不会。

三、在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于之后的使用,另外它是“假相”的删除,至关于windows 中用delete删除数据是把数据放到回收站中,还能够恢复,固然若是这个时候从新启动系统(OS或者RDBMS),它也就不能恢复了!而用 truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被当即释放,至关于windows中用shift+delete删除数据,不可以 恢复!

四、truncate 调整high water mark 而delete不;truncate以后,TABLE的HWM退回到 INITIAL和NEXT的位置(默认)delete 则不能够。

五、truncate 只能对TABLE,delete 能够是table,view,synonym。

六、TRUNCATE TABLE 的对象必须是本模式下的,或者有drop any table的权限 而 DELETE 则是对象必须是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的权限。

七、在外层中,truncate或者delete后,其占用的空间都将释放。

八、truncate和delete只删除数据,而drop则删除整个表(结构和数据)。

在删除大数据量时(一个表中大部分数据时),能够采用如下步骤:

一、先将不须要删除的数据复制到一个临时表中

二、trunc table 表

三、将不须要删除的数据复制回来。

不一样:DELETE语句执行删除的过程是每次从表中删除一行,而且同时将该行的的删除操做做为事务记录在日志中 保存以便进行进行回滚操做。TRUNCATE TABLE 则一次性地从表中删除全部的数据页并不把单独的删除操做记录记入日志保存,删除行是不能恢复的。而且在删除的过程当中不会激活与表有关的删除触发器。执行速 度快。

truncate的功能能够拆分为:dropping + re-creating a table,但truncate的效率要高。由于truncate无须考虑表索引、约束、触发器等的重建。另外truncate执行后,没法回滚(roll back)

HWM(high water mark,最高水位线):The high water mark is divides a segment into used blocks and free blocks。Blocks below the high water mark (used blocks) have at least once contained data. This data might have been deleted. Since Oracle knows that blocks beyond the high water mark don’t have data, it only reads blocks up to the high water mark in a full table scan(FTS).在oracle10g中增长了调整HWM的命令:alter table xxx shrink space。

 

13,归档模式与非归档模式:

非归档模式:只能作冷备份,而且恢复时只能作彻底备份.最近一次彻底备份到系统出错期间的数据不能恢复。非归档模式只能离线备份,并且必须备份全部的数据文件,控制文件,日志文件!

归档模式:能够作热备份,而且能够作增量备份,能够作部分恢复.归档模式,能够在线或者离线备份数据库,能够是 全备份或者是部分备份(单个表空间,数据文件).归档模式可以作到零数据丢失。固然归档会消耗一些存储和性能资源。归档模式,数据库的日志能够长时间保 存,有了归档日志,能够随时恢复归档日期内任什么时候间点的数据,便于数据库数据安全保护。

RMAN备份:必须使用archivelog,对因而否使用ARCHIVELOG,得看应用具体状况的.数据库归档模式,能够使用rman或手工在线备份数据。

用ARCHIVE LOG LIST 能够查看期模式状态时归档模式仍是非归档模式.

sql>archive log list;

sql>alter dbname archivelog;

sql>alter dbname noarchivelog;

 

14,如何创建备份控制文件?

SQL> alter database backup controlfile to trace;

 

15,数据库的状态:

四种状态:open,close,mount,nomount

打开数据库:

STARTUP NOMOUNT – 启动instance,可是不装载数据库

STARTUP MOUNT – 启动instance,并装载数据库,可是不打开数据库

STARTUP OPEN – 启动instance,并装载数据库,而后打开数据库

1)启动&装载&打开&限制仅DBA访问:STARTUP RESTRICT;

取消:ALTER SYSTEM DISABLE RESTRICTED SESSION;

2)强制启动:STARTUP FORCE;

3)只读方式打开数据库:STARTUP OPEN READ ONLY;

关闭数据库:

SHUTDOWN NORMAL;

SHUTDOWN IMMEDIATE;

SHUTDOWN TRANSACTIONAL;

SHUTDOWN ABORT;

 

16,解释$ORACLE_HOME和$ORACLE_BASE的区别?

ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录。

 

17,如何判断数据库的时区?

SQL> select dbtimezone from dual;

SQL> select sessiontimezone from dual;

SQL> select sysdate from dual;

SQL> select systimestamp from dual;

SQL> select current_date from dual;

SQL> select current_timestamp from dual;

 

18,解释GLOBAL_NAMES

GLOBAL_NAME:Global name of the database,是数据库的一个持久性设置.

GLOBAL_NAMES:用于设定数据库连接名称是否必须与远程数据库的GLOBAL_NAME匹配,默认为false。若是这个参数设置为TRUE,在创建数据库连接时就必须用相同的名字连结远程数据库。

 

19,物化视图:materialized view

Oracle数据库中有两种view,一种是存储为pure SQL,一种是维护一张表。是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任 何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对总体查询性能的提升,并无实质上的好处。物化视图是包括一个查询结果的数据库 对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也能够称为快照

物化视图对于前台数据库使用者来讲如同一个实际的表,具备和表相通的通常select操做,而其其实是一个视图,一个按期刷新数据的视图(具体刷 新时间在定义物化视图的时候已有定义),使用物化视图能够实现视图的全部功能,而物化视图确不是在使用时才读取,大大提升了读取速度,特别适用抽取大数据 量表某些信息以及数据链链接表使用.

具体语法以下:

CREATE MATERIALIZED VIEW an_user_base_file_no_charge

REFRESH COMPLETE START WITH SYSDATE

NEXT TRUNC(SYSDATE+29)+5.5/24

as

select distinct user_no

from cw_arrearage t

where (t.mon = dbms_tianjin.getLastMonth or

t.mon = add_months(dbms_tianjin.getLastMonth, -1))

drop materialized view an_user_base_file_no_charge;

补充:

Oracle的物化视图提供了强大的功能,能够用于预先计算并保存表链接或汇集等耗时较多的操做的结果,这样,在执行查询时,就能够避免进行这些耗 时的操做,而从快速的获得结果。物化视图有不少方面和索引很类似:使用物化视图的目的是为了提升查询性能;物化视图对应用透明,增长和删除物化视图不会影 响应用程序中SQL语句的正确性和有效性;物化视图须要占用存储空间;当基表发生变化时,物化视图也应当刷新。

物化视图能够分为如下三种类型:包含汇集的物化视图;只包含链接的物化视图;嵌套物化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其余方面则区别不大。建立物化视图时能够指定多种选项,下面对几种主要的选择进行简单说明:

建立方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。BUILD IMMEDIATE是在建立物化视图的时候就生成数据,而BUILD DEFERRED则在建立时不生成数据,之后根据须要在生成数据。默认为BUILD IMMEDIATE。

查询重写(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出建立的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断可否经过查询物化视图 来获得结果,若是能够,则避免了汇集或链接操做,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。

刷新(Refresh):指当基表发生了DML操做后,物化视图什么时候采用哪一种方式和基表进行同步。刷新的模式有 两种:ON DEMAND和ON COMMIT。ON DEMAND指物化视图在用户须要的时候进行刷新,能够手工经过DBMS_MVIEW.REFRESH等方法来进行刷新,也能够经过JOB定时进行刷新。 ON COMMIT指出物化视图在对基表的DML操做提交的同时进行刷新。刷新的方法有四种:FAST、COMPLETE、FORCE和NEVE*。**ST刷 新采用增量刷新,只刷新自上次刷新之后进行的修改。COMPLETE刷新对整个物化视图进行彻底的刷新。若是选择FORCE方式,则Oracle在刷新时 会去判断是否能够进行快速刷新,若是能够则采用FAST方式,不然采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND。

在创建物化视图的时候能够指定ORDER BY语句,使生成的数据按照必定的顺序进行保存。不过这个语句不会写入物化视图的定义中,并且对之后的刷新也无效。

物化视图日志:若是须要进行快速刷新,则须要创建物化视图日志。物化视图日志根据不一样物化视图的快速刷新的须要,能够创建为ROWID或PRIMARY KEY类型的。还能够选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。

能够指明ON PREBUILD TABLE语句将物化视图创建在一个已经存在的表上。这种状况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要 求参数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated。

物化视图能够进行分区。并且基于分区的物化视图能够支持分区变化跟踪(PCT)。具备这种特性的物化视图,当基表进行了分区维护操做后,仍然能够进 行快速刷新操做。对于汇集物化视图,能够在GROUP BY列表中使用CUBE或ROLLUP,来创建不一样等级的汇集物化视图。

 

20,当用户进程出错,哪一个后台进程负责清理它?PMON:进程监控进程

21,哪一个后台进程刷新materialized views?The Job Queue Processes:做业队列进程

22,如何判断哪一个session正在连结以及它们等待的资源?V$SESSION / V$SESSION_WAIT

23,如何分辨某个用户是从哪台机器登录ORACLE的:SELECT machine , terminal FROM V$SESSION

24,如何查看系统被锁的事务时间:select * from v$locked_object ;

25. 如何以archivelog的方式运行oracle:在init.Ora中,log_archive_start = true,重启。

26. 怎么获取有哪些用户在使用数据库:select username from v$session;

27. 数据表中的字段最大数是多少:表或视图中的最大列数为 1000

28. 怎样查得数据库的SID :select name from v$database; 也能够直接查看 init.ora文件

29,建立Sequence:create  sequence zxk increment by 10 start  with  10  maxvalue 1000 cycle ;

 

30,oracle日志

Oracle9i中有2种日志,一种称为Redo Log(重作日志),另外一种叫作Archive Log(归档日志)。重作日志redo log file是LGWR进程(日志写入进程)从Oracle实例中的redo log buffer写入的,是循环利用的。就是说一个redo log file(group) 写满后,才写下一个。归档日志archive log是当数据库运行在归档模式下时,一个redo log file(group)写满后,由ARCn进程(归档进程)将重作日志的内容备份到归档日志文件下,而后这个redo log file(group)才能被下一次使用。无论数据库是不是归档模式,重作日志是确定要写的。而只有数据库在归档模式下,重作日志才会备份,造成归档日 志。归档日志结合全备份,用于数据库出现问题后的恢复使用。

 

31,如何强制进行 Log Switch?

当一个redo log file被写满了以后要换另一个redo log file,这个时候要用到的操做叫log switch。

SQL>ALTER SYSTEM SWITCH LOGFILE;

 

32,Coalescing作了什么?

Coalescing针对于字典管理的tablespace进行碎片整理,将临近的小extents合并成单个的大extent.

 

33,oracle表空间

Oracle数据库(tablespace)是由若干个表空间构成的。任何数据库对象在存储时都必须存储在某个表空间中。表空间对应于若干个磁盘文件,即表空间是由一个或多个磁盘文件构成的。表空间至关于操做系统中的文件夹,也是数据库逻辑结构与物理文件之间的一个映射。每一个数据库至少有一个表空间,表空间的大小等于全部从属于它的数据文件大小的总和。

在Oracle 10g中有如下几种比较特殊的表空间:

(1)系统表空间

系统表空间(system tablespace)是每一个Oracle数据库都必须具有的。其功能是在系统表空间中存放诸如表空间名称、表空间所含数据文件等数据库管理所需的信息。 系统表空间的名称是不可更改的。系统表空间必须在任什么时候候均可以用,也是数据库运行的必要条件。所以,系统表空间是不能脱机的。系统表空间包括数据字典、存储过程、触发器和系统回滚段。为避免系统表空间产生存储碎片以及争用系统资源的问题,应建立一个独立的表空间用来单独存储用户数据。

(2)SYSAUX表空间

SYSAUX表空间是随着数据库的建立而建立的,它充当SYSTEM的辅助表空间,主要存储除数据字典之外的其余对象。SYSAUX也是许多Oracle 数据库的默认表空间,它减小了由数据库和DBA管理的表空间数量,下降了SYSTEM表空间的负荷。

(3)临时表空间

相对于其余表空间而言,临时表空间(temp tablespace)主要用于存储Oracle数据库运行期间所产生的临时数据。数据库能够创建多个临时表空间。当数据库关闭后,临时表空间中全部数据将所有被清除。除临时表空间外,其余表空间都属于永久性表空间。

(4)撤销表空间

用于保存Oracle数据库撤销信息,即保存用户回滚段的表空间称之为回滚表空间(或简称为RBS撤销表空间(undo tablespace))。在Oracle8i中是rollback tablespace,从Oracle9i开始改成undo tablespace。在Oracle 10g中初始建立的只有6个表空间sysaux、system、temp、undotbs一、example和users。其中temp是临时表空间,undotbs1是undo撤销表空间。

 

34,建立用户时,须要赋予新用户什么权限才能使它联上数据库。CONNECT

35,如何在tablespace里增长数据文件?ALTER TABLESPACE ADD DATAFILE SIZE

36,如何变更数据文件的大小?ALTER DATABASE DATAFILE RESIZE ;

37,哪一个VIEW用来检查数据文件的大小? DBA_DATA_FILES

38,哪一个VIEW用来判断tablespace的剩余空间?DBA_FREE_SPACE

 

39,如何判断谁往数据库里面插入了一条记录?

三种方法:事先打开审计功能或者在表上创建触发器,过后能够经过logmnr查看。

1)数据库审计功能:

先设置audit_trail参数,决定审计结果保存地点; 而后执行audit insert on schema.table_name whenever successful; 这样就好了,在有人作insert操做后,根据audit_trail参数到相应位置去看审计结果就好了。

2)触发器:

create or replace trigger tgname

after insert

on tbname –>判断此表是否被插入记录

for each row

begin

insert into ta(日期) values(sysdate) ;

commit;

end ;

建触发器其实也是审计,是基于值的审计,比数据库审计慢,不过审计的内容能够更详细。

3)logmnr查看日志

 

35,如何重构索引?

SQL>ALTER INDEX indexname REBUILD;

快速重建索引:

alter session set workarea_size_policy=manual;

oracle 10G以上默认auto,修改为manual才能设置排序区大小。

alter session set sort_area_size=1073741824;

alter session set sort_area_retained_size=1073741824;

设置排序区大小为1G

alter session set db_file_multiblock_read_count=128;

alter index IDX_POI_ID_NAME rebuild online parallel 4 nologging—4个并行操做。

须要注意的是在并行重构完成之后,必定要取消索引的并行度,不然,在OLTP环境中,可能会由于意外的使用并行而出现严重性能问题。alter index IDX_POI_ID_NAME noparallel;

 

36,oracle partitioning

Oracle 分区是 Oracle9i 企业版的一个选项,能够加强各类应用程序的可管理性、性能和可用性。分区容许将表、索引以及索引编排表细分为更小的段,从而能在更细的粒度级管理和访问这些数据库对象。Oracle 提供丰富的分区模式来知足每一种商务需求。并且,因为它在 SQL 语句中是彻底透明的,分区几乎可应用于任何应用程序。

分区的优势

分区能改善各类应用程序的可管理性、性能和可用性,具备很是多的优势。分区每每根据数量级提升某些查询或维护操做的性能。另外,分区能够极大地简化 常见的管理任务。 分区还能够使数据库设计人员和管理人员可以处理一些最前沿的应用程序而引起的最棘手的难题。分区在构建 TB 级的系统或对可用性要求极高的系统时很是关键。

分区的基本知识

分区容许将表、索引或索引编排表细分为更小的段。数据库对象的每一个段就叫一个区。每一个区有本身的名称,也能够具有本身的存储特征。从数据库管理员的 角度看,分区的对象有多个段,既能够一块儿管理也可单独管理。这就赋予管理人员至关大的灵活性来管理分区的对象。然而,从应用的角度看,分区的表与不分区的 表是一致的;在经过 SQL DML 命令访问分区表时不须要作任何的修改。

表经过使用‘分区键’分区;分区键是肯定某个行所在区的一组列。

Oracle9i 提供四种表的分区技术:

1)范围分区:每一个区由一系列分区键的值来指定(对于将日期列做为分区键的表,‘1 月-2001年’区包含分区键值为‘01-1 月-2001’至‘31-1 月-2001’的全部行)

2)列表分区:每一个区由一列分区键值指定(对于将区域列做为分区键值的表,‘北美州’区可能包含的值有‘加拿大’、‘美国’以及‘墨西哥’)

3)哈希分区:哈希算法应用于分区键值,来肯定某个行的区

4)范围-哈希组合分区:即范围和哈希分区技术的结合。表首先进行范围分区,而后每一个范围区再单独经过哈希分区技术进行分区。

索引编排表既可作范围分区也可作哈希分区。

Oracle9i 还提供三种类型的分区索引:

1)本地索引:本地索引是分区表中的一种索引,分区方法与基本分区表的彻底同样。本地索引的每一个区只对应于基表的一个区。

2)全局分区索引:全局分区索引是分区或非分区表中的索引,经过该表中的不一样分区键分区。全局分区索引只能采用范围分区法。例如,表可根据月份进行范围分区,这样就有 12 个区,而该表的索引使用不一样的分区键进行范围分区,就会有不一样数量的区。

3)全局非分区索引:全局非分区索引基本上与非分区表的索引一致。索引结构未被分区。

Oracle 提供一套强健的技术用于表、索引和索引编排表的分区,所以分区功能可最优地应用于任何商务环境中的任何应用程序。 Oracle 还另外提供了一组完整的 SQL 命令用于管理分区表。其中的命令包括添加新区、删除区、拆分分区以及合并分区。

经过限制要检查或操做的数据量和启用并行执行,Oracle 分区选项提供许多性能的优势。这些特性包括:

1)分区修剪 (Partitioning Pruning):分区修剪是最简单也是最有效的经过分区改善性能的方法。分区修剪一般根据几个数量级改善查询性能。例如,假定一个应用程序中有一个包含 订单历史记录的订单表,并且该表已经按周进行了分区。请求一周内定单的查询只会访问订单表的一个区。若是订单表有 2 年的历史数据,该查询将访问一个区而不是 104 个区。仅仅因为分区修剪功能的做用,该查询的执行速度实际上快了 100 倍。分区修剪与 Oracle 其它全部的性能特性一块儿发挥做用。Oracle 将分区修剪功能与任何的索引技术、链接技术或并行访问方法一块儿使用。

2)智能化分区链接 (Partition-wise Join):分区也可经过使用被称为智能化分区链接的技术改善多表链接的性能。智能化分区链接可用于将两个表链接在一块儿,并且这两个表都在链接键上分区。 智能化分区链接将大型的链接拆分为小的链接,在每一个区间执行,减小了整个链接的时间。这显著地提升了串行和并行执行的性能。

3)更新和删除的并行执行:分区可以并行执行 UPDATE、DELETE 和 MERGE 语句。当访问分区和非分区的数据库对象时,Oracle 会并行化 SELECT 语句和 INSERT 语句。不过,为了并行化 UPDATE、DELETE 和 MERGE 语句,目标表必须进行分区。并行执行这些 SQL 操做可极大地改善性能,尤为是对涉及大量数据的 UPDATE、DELETE 或 MERGE 操做。

 

37,刚编译了一个PL/SQL Package可是有错误报道,如何显示出错信息?

SHOW ERRORS

 

38,如何搜集表的各类状态数据?

ANALYZE:用于分析表或者索引结构的一致性,判断索引与表间是否匹配<cascade>,有没有坏块,数据是否是正确分布在正确 的分区中,索引压缩效率等。DBMS_UTILITY.ANALYZE_SCHEMA是等同于analyze的,只是DBMS_UTILITY是在 PLSQL中调用了analyze命令。另外ORACLE提供了dbms_stats,该包提供了分析优化相关的信息的更强的功能,可是他不能分析非优化 相关的信息。

analyze命令分两种,一种是分析优化相关的信息,语句为analyze table [index] compute[estimate] statistics [for 语句];若是要分析非优化相关的信息,语句如analyze index … validate structure;analyze table … validate structure [cascade]等。

 

39,oracle trace

SQL Trace主要是对数据库进行SQL监测,能够随时监测和调整做用于数据的应用程序。好比ERP系统它的应用界面不少,涉及的底层操做也不少,若是想知道 在某个界面的操做在底层数据库执行了哪些SQL语句,就须要开启Trace功能记录下这些SQL操做,方便开发人员了解上层应用程序对数据库作了哪些动 做。

alter session set sql_trace = true; /*开启*/

alter session set sql_trace = false; /*关闭*/

DBMS_SESSION.SET_SQL_TRACE也能够启动session级别的sql trace。

 

40,IMPORT和SQL*LOADER 这2个工具的不一样点?

这两个ORACLE工具都是用来将数据导入数据库的。区别是:IMPORT工具只能处理由另外一个ORACLE工具EXPORT生成的数据。而SQL*LOADER能够导入不一样的ASCII格式的数据源。

 

41,用于网络链接的2个文件?

TNSNAMES.ORA , SQLNET.ORA

 

42,有一个A 数据库,分别复制到B和C。 B 要求每次A数据更新B也同时更新,C 天天更新一次就行,如何制定复制策略!

a->b

1)、若是使用SQL Server复制功能,那么让a->b使用事务性复制方式(同步复制)。

2)、若是表很少,也能够本身写触发器,利用linkserver+distribute transaction。

a->c

1)、若是使用SQL Server复制功能,那么让a->b使用快照复制方式,在某一时间点进行一次性复制。

2)、也能够本身写bat,将a备份后,经过ftp传输备份介质,恢复c。(比较麻烦,不推荐)

 

43, 有一个数据库200G大小,天天增长50M 容许用户随时访问,制定备份策略(详细说明)。

这种状况能够采用增量备份方式。每周日作一次全备份,周一到周六做增量备份(因为数据量较少,能够考虑每30分钟增量备份一次)。这样能够尽可能减小性能消耗,并且若是transaction log丢失的状况下,能够保证最多丢失30分钟数据。

 

44,管理50台数据库,平常工做是检查数据库做业是否完成,你该如何完成这项检查工做?

在每台机器上创建linkserver,而后在DBA管理服务器上作个分布式视图,每次查询该视图,各个机器上的做业状况一目了然。分布式视图写法:

create view vw_job

as

select ‘机器一’ as MName,* from linkserver1..sysjobactivity

union all

select ‘机器二’ as MName,* from linkserver2..sysjobactivity

union all

select ‘机器三’ as MName,* from linkserver3..sysjobactivity

。。。

 

45,数据库三级模式:

数据库结构分为3级:面向用户或应用程序员的用户级、面向创建和维护数据库人员的概念级、面向系统程序员的物理级。用户级对应外模式,概念级对应模 式,物理级对应内模式,使不一样级别的用户对数据库造成不一样的视图。所谓视图,就是指观察、认识和理解数据的范围、角度和方法,是数据库在用户“眼中”的反 映,很显然,不一样层次(级别)用户所“看到’’的数据库是不相同的。

1)模式.

模式又称概念模式或逻辑模式,对应于概念级。它是由数据库设计者综合全部用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中所有数据的逻 辑结构和特征的整体描述,是全部用户的公共数据视图(全局视图)。它是由数据库管理系统提供的数据模式描述语言(Data Description Language,DDL)来描述、定义的,体现、反映了数据库系统的总体观。

2)外模式

外模式又称子模式,对应于用户级。它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。外模式是从模式导出的一个子 集,包含模式中容许特定用户使用的那部分数据。用户能够经过外模式描述语言来描述、定义对应于用户的数据记录(外模式),也能够利用数据操纵语言 (Data Manipulation Lang uage,DML)对这些数据记录进行。外模式反映了数据库的用户观。

3)内模式

内模式又称存储模式,对应于物理级,它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式 翱物理结构,对应着实际存储在外存储介质上的数据库。内模式由内模式描述语言来描述、定义,它是数据库的存储观。 在一个数据库系统中,只有惟一的数据库, 于是做为定义 、描述数据库存储结构的内模式和定义、描述数据库逻辑结构的模式,也是唯一的,但创建在数据库系统之上的应用则是很是普遍、多样的,因此对应的外模式不是 唯一的,也不多是唯一的。

三级模式间的映射

数据库的三级模式是数据库在三个级别 (层次)上的抽象,使用户可以逻辑地、抽象地处理数据而没必要关心数据在计算机中的物理表示和存储。实际上 ,对于一个数据库系统而言一有物理级数据库是客观存在的,它是进行数据库操做的基础,概念级数据库中不过是物理数据库的一种逻辑的、抽象的描述(即模 式),用户级数据库则是用户与数据库的接口,它是概念级数据库的一个子集(外模式)。  用户应用程序根据外模式进行数据操做,经过外模式一模式映射,定义和创建某个外模式与模式间的对应关系,将外模式与模式联系起来,当模式发生改变时,只 要改变其映射,就能够使外模式保持不变,对应的应用程序也可保持不变;另外一方面,经过模式一内模式映射,定义创建数据的逻辑结构(模式)与存储结构(内模 式)间的对应关系,当数据的存储结构发生变化时,只需改变模式一内模式映射,就能保持模式不变,所以应用程序也能够保持不变。

 

46, 关系数据库管理系统能实现的专门关系运算?

选择、链接和投影

 

47,oracle RBO, CBO

ORACLE 提供了CBO、RBO两种SQL优化器。RBO是Rule Based Optimizer。CBO是Cost Based Optimizer。CBO在ORACLE7 引入,但在ORACLE8i 中才成熟。ORACLE 已经明确声明在ORACLE9i以后的版本中(ORACLE 10G ),RBO将再也不支持。所以选择CBO 是必然的趋势。CBO和 RBO做为不一样的SQL优化器,对SQL语句的执行计划产生重大影响,若是要对现有的应用程序从RBO向CBO移植,则必须充分考虑这些影响,避免SQL 语句性能急剧降低;可是,对新的应用系统,则能够考虑直接使用CBO,在CBO模式下进行SQL语句编写、分析执行计划、性能测试等工做,这须要开发者对 CBO的特性比较熟悉。

在CBO下写SQL语句的注意事项:

1)RBO自ORACLE 6版以来被采用,有着一套严格的使用规则,只要你按照它去写SQL语句,不管数据表中的内容怎样,也不会影响到你的“执行计划”,也就是说对数据不“敏 感”;CBO计算各类可能“执行计划”的“代价”,即cost,从中选用cost最低的方案,做为实际运行方案。各“执行计划”的cost的计算根据,依 赖于数据表中数据的统计分布,ORACLE数据库自己对该统计分布并不清楚,必需要分析表和相关的索引(使用ANALYZE 命令),才能搜集到CBO所需的数据。

2)使用CBO 时,编写SQL语句时,没必要考虑”FROM” 子句后面的表或视图的顺序和”WHERE” 子句后面的条件顺序;ORACLE自7版以来采用的许多新技术都是基于CBO的,如星型链接排列查询,哈希链接查询,函数索引,和并行查询等。

3)通常而言,CBO所选择的“执行计划”都不会比RBO的“执行计划”差,并且相对而言,CBO对程序员的要求没有RBO那么苛刻,节省了程序员 为了从多个可能的“执行计划”中选择一个最优的方案而花费的调试时间,但在某些场合下也会存在问题。较典型的问题有:有时,代表明建有索引,但查询过程显 然没有用到相关的索引,致使查询过程耗时漫长,占用资源巨大,这时就须要仔细分析执行计划,找出缘由。例如,能够看链接顺序是否容许使用相关索引。假设表 emp的deptno列上有索引,表dept的列deptno上无索引,WHERE语句有emp.deptno=dept.deptno条件。在作NL连 接时,emp作为外表,先被访问,因为链接机制缘由,外表的数据访问方式是全表扫描,emp.deptno上的索引显然是用不上,最多在其上作索引全扫描 或索引快速全扫描。

4)若是一个语句使用 RBO的执行计划确实比CBO 好,则能够经过加 ” rule” 提示,强制使用RBO。

5)使用CBO 时,SQL语句 “FROM” 子句后面的表,必须所有使用ANALYZE 命令分析过,若是”FROM” 子句后面的是视图,则此视图的基础表,也必须所有使用ANALYZE 命令分析过;不然,ORACLE 会在执行此SQL语句以前,自动进行ANALYZE 命令分析,这会极大致使SQL语句执行极其缓慢。

6)使用CBO 时,SQL语句 “FROM” 子句后面的表的个数不宜太多,由于CBO在选择表链接顺序时,会对”FROM” 子句后面的表进行阶乘运算,选择最好的一个链接顺序。假如”FROM” 子句后有6个表,则其可选择的链接顺序就是6*5*4*3*2*1 = 720 种,CBO 选择其中一种,而若是”FROM” 子句后有12个表,则其可选择的链接顺序就是12*11*10*9*8*7*6*5*4*3*2*1= 479001600 种,能够想象从中选择一种,会消耗多少CPU 时间?若是实在是要访问不少表,则最好使用 ORDER 提示,强制使用”FROM” 子句表固定的访问顺序。

7)使用CBO 时,SQL语句中不能引用系统数据字典表或视图,由于系统数据字典表都未被分析过,可能致使极差的“执行计划”。可是不要擅自对数据字典表作分析,不然可能致使死锁,或系统性能严重降低。

8)使用CBO 时,要注意看采用了哪一种类型的表链接方式。ORACLE的共有Sort Merge Join(SMJ)、Hash Join(HJ)和Nested Loop Join(NL)。CBO 有时会偏重于SMJ 和 HJ,但在OLTP 系统中,NL 通常会更好,由于它高效的使用了索引。在两张表链接,且内表的目标列上建有索引时,只有Nested Loop才能有效地利用到该索引。SMJ即便相关列上建有索引,最多只能因索引的存在,避免数据排序过程。HJ因为须作HASH运算,索引的存在对数据查 询速度几乎没有影响。

9)使用CBO 时,必须保证为表和相关的索引搜集足够的统计数据。对数据常常有增、删、改的表最好按期对表和索引进行分析,可用SQL语句“analyze table xxx compute statistics for all indexes;”ORACLE掌握了充分反映实际的统计数据,才有可能作出正确的选择。

10)使用CBO 时,要注意被索引的字段的值的数据分布,会影响SQL语句的执行计划。例如:表emp,共有一百万行数据,但其中的emp.deptno列,数据只有4种 不一样的值,如十、20、30、40。虽然emp数据行有不少,ORACLE缺省认定表中列的值是在全部数据行均匀分布的,也就是说每种deptno值各 有25万数据行与之对应。假设SQL搜索条件DEPTNO=10,利用deptno列上的索引进行数据搜索效率,每每不比全表扫描的高,ORACLE理所 固然对索引“视而不见”,认为该索引的选择性不高。

优化模式包括Rule、Choose、First rows、All rows四种方式:

1)Rule:基于规则的方式。

2)Choose:默认的状况下Oracle用的即是这种方式。指的是当一个表或或索引有统计信息,则走CBO的方式,若是表或索引没统计信息,表又不是特别的小,并且相应的列有索引时,那么就走索引,走RBO的方式。

3)First Rows:它与Choose方式是相似的,所不一样的是当一个表有统计信息时,它将是以最快的方式返回查询的最早的几行,从整体上减小了响应时间。

4)All Rows:也就是咱们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的全部的行,从整体上提升查询的吞吐量。没有统计信息则走RBO的方式。

设定选用哪一种优化模式:

1)Instance级别咱们能够经过在initSID.ora文件中设定

OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS

若是没设定OPTIMIZER_MODE参数则默认用的是Choose方式。

2)Sessions级别经过ALTER SESSION SET OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS来设定。

3)语句级别用Hint(/*+ … */)来设定

为何表的某个字段明明有索引,但执行计划却不走索引?

1)优化模式是all_rows的方式

2)表做过analyze,有统计信息(最可能的就是统计信息有误)

3)表很小,上文提到过的,Oracle的优化器认为不值得走索引。

 

48,oracle访问数据库的存取方式:

1)全表扫描:(Full Table Scans, FTS)

为实现全表扫描,Oracle读取表中全部的行,并检查每一行是否知足语句的WHERE限制条件。一个多块读操做能够使一次I/O能读取多块数据块 (db_block_multiblock_read_count参数设定),而不是只读取一个数据块,这极大的减小了I/O总次数,提升了系统的吞吐 量,因此利用多块读的方法能够十分高效地实现全表扫描,并且只有在全表扫描的状况下才能使用多块读操做。在这种访问模式下,每一个数据块只被读一次。使用 FTS的前提条件:在较大的表上不建议使用全表扫描,除非取出数据的比较多,超过总量的5% — 10%,或你想使用并行查询功能时。

2)经过ROWID的表存取(Table Access by ROWID或rowid lookup)

行的ROWID指出了该行所在的数据文件、数据块以及行在该块中的位置,因此经过ROWID来存取数据能够快速定位到目标数据上,是Oracle存 取单行数据的最快方法。这种存取方法不会用到多块读操做,一次I/O只能读取一个数据块。咱们会常常在执行计划中看到该存取方法,如经过索引查询数据。

3)索引扫描(Index Scan或index lookup)

咱们先经过index查找到数据对应的rowid值(对于非惟一索引可能返回多个rowid值),而后根据rowid直接从表中获得具体的数据,这 种查找方式称为索引扫描或索引查找(index lookup)。一个rowid惟一的表示一行数据,该行对应的数据块是经过一次i/o获得的,在此状况下该次i/o只会读取一个数据库块。

在索引中,除了存储每一个索引的值外,索引还存储具备此值的行对应的ROWID值。索引扫描能够由2步组成:(1) 扫描索引获得对应的rowid值。 (2) 经过找到的rowid从表中读出具体的数据。每步都是单独的一次I/O,可是对于索引,因为常用,绝大多数都已经CACHE到内存中,因此第1步的 I/O常常是逻辑I/O,即数据能够从内存中获得。可是对于第2步来讲,若是表比较大,则其数据不可能全在内存中,因此其I/O颇有多是物理I/O,这 是一个机械操做,相对逻辑I/O来讲,是极其费时间的。因此若是多大表进行索引扫描,取出的数据若是大于总量的5% — 10%,使用索引扫描会效率降低不少。

根据索引的类型与where限制条件的不一样,有4种类型的索引扫描:

1)索引惟一扫描(index unique scan)

2)索引范围扫描(index range scan)

3)索引全扫描(index full scan)

4)索引快速扫描(index fast full scan)

 

49,查看Oracle sql语句执行计划:

SQL>EXPLAIN PLAN FOR select * from dual;

 

50,pctused与pctfree

pctused(percent used)与pctfree(percent free)是Oracle的两个与性能相关的块级存储参数。

pctused:已用百分比,一个块的使用水位的百分比,这个水位将使该块返回到可用列表中去等待更多的插入操做。 pctfree:空闲百分比,用来为一个块保留的空间百分比,以防止在从此的更新操做中增长一列或多列值的长度。 freelist:可用列表是表中的一组可插入数据的可用块。

行链接:指一行存储在多个块中的状况,这是由于该行的长度超过了一个块的可用空间大小,即行连接是跨越多块的行。 行迁移:指一个数据行不适合放入当前块而被从新定位到另外一个块(那里有充足的空间)中,但在原始块中保留一个指针的情形。原始块中的指针是必需的,由于索 引的ROWID项仍然指向原始位置。

计算公式:

PCTFREE=(Average Row Size-Initial Row Size)*100/Average Row Size

PCTUSED=(100-PCTFREE) -Average Row Size * 100/Availabe Data Space

 

51,oracle表空间管理

表空间(Tablespace)——为数据库提供使用空间的逻辑结构,其对应物理结构是数据文件,一个表空间能够包含多个数据文件。本地管理表空间 (Locally Managed Tablespace简称LMT)——8i之后出现的一种新的表空间的管理模式,经过本地位图来管理表空间的空间使用。 字典管理表空间(Dictionary-Managed Tablespace简称DMT)——8i之前包括之后都还能够使用的一种表空间管理模式,经过数据字典管理表空间的空间。

本地化管理:

就是指Oracle再也不利用数据字典表来记录Oracle表空间里面的区的使用情况,而是在每一个表空间的数据文件的头部加入了一个位图区,在其中记 录每一个区的使用情况。每当一个区被使用,或者被释放以供从新使用时,Oracle都会更新数据文件头部的这个记录,反映这个变化。

本地化管理的表空间的建立过程:

 

语法:CREATE TABLESPACE 表空间名字

DATAFILE ’数据文件详细信息’

[EXTENT MANAGEMENT { LOCAL

{AUTOALLOCATE | UNIFORM [SIZE INTETER [K|M] ] } } ]

关键字EXTENT MANAGEMENT LOCAL 指定这是一个本地化管理的表空间。对于系统表空间,只 能在建立数据库的时候指定EXTENT MANGEMENT LOCAL,由于它是数据库建立时创建的第一个表空间。 在8i中,字典管理仍是默认的管理方式,当选择了LOCAL关键字,即代表这是一个本地管理的表空间。固然还能够继续选择更细的管理方式:是 AUTOALLOCATE 仍是 UNIFORM.。若为AUTOALLOCATE,则代表让Oracle来决定区块的使用办法;若选择了UNIFORM,则还能够详细指定每一个区块的大 小,若不加指定,则为每一个区使用1M大小。

本地管理表空间与字典管理表空间相比大大提升了管理效率和数据库性能,其优势以下:

1)减小了递归空间管理

本地管理表空间是本身管理分配,而不是象字典管理表空间须要系统来管理空间分配,本地表空间是经过在表空间的每一个数据文件中维持一个位图来跟踪在此 文件中 块的剩余空间及使用状况。并及时作更新。这种更新只对表空间的额度状况作修改而不对其余数据字典表作任何update操做,因此不会产生任何回退信息,从 而大大减小了空间管理,提升了管理效率。同时因为本地管理表空间能够采用统一大小分配方式(UNIFORM),所以也大大减少了空间管理,提升了数据库性 能。

2)系统自动管理extents大小或采用统一extents大小

本地管理表空间有自动分配(AUTOALLOCATE)和统一大小分配(UNIFORM)两种空间分配方式,自动分配方式 (AUTOALLOCATE)是 由系统来自动决定extents大小,而统一大小分配(UNIFORM)则是由用户指定extents大小。这两种分配方式都提升了空间管理效率。

3)减小了数据字典之间的竞争

由于本地管理表空间经过维持每一个数据文件的一个位图来跟踪在此文件中块的空间状况并作更新,这种更新只修改表空间的额度状况,而不涉及到其余数据字典表,从而大大减小了数据字典表之间的竞争,提升了数据库性能。

4)不产生回退信息

由于本地管理表空间的空间管理除对表空间的额度状况作更新以外不修改其它任何数据字典表,所以不产生回退信息,从而大大提升了数据库的运行速度。

5)不需合并相邻的剩余空间

由于本地管理表空间的extents空间管理会自动跟踪相邻的剩余空间并由系统自动管理,于是不须要去合并相邻的剩余空间。同时,本地管理表空间的全部extents还能够具备相同的大小,从而也减小了空间碎片。

6)减小了空间碎片

7)对临时表空间提供了更好的管理

表空间管理方式转换:

字典管理表空间每当表或其余对象须要扩大的时候都检查其数据字典以确保有可用的空间分配给对象,而后给对象分配一个新区段并更新其可用空间信息。本 地管理表空间保存数据文件自己的空间管理信息,并且表空间自动跟踪每一个数据文件块的可用或已用状态。 在事务比较多的数据库中显然字典管理每次插入数据时 都会检查数据字典,这就使得数据库性能有所损耗。

1)命令方式转移。

首先你要新建一个oracle表空间,在oracle 10g之后默认都是采用本地管理表空间的。

对于表空间的转移使用命令: ALTER TABLE temp MOVE TABLESPACE new_temp;

对于索引你须要重建:  ALTER TABLE index REBUILD TABLESPACE new_index;

显然上面的方法并不适用于对system表进行转换,由于你不能创建2个同名的system表。

2)采用oracle提供的PL/SQL数据包中的DBMS_SPACE_ADMIN.

在转换system表前,你必须把全部的其余表空间转换为本地管理。

EXECUTE dbms_space_admin.tablespace_migrate_to_local(”tablespace”); ——转行表空间

而后一样的方法将system表空间也进行转换。

EXECUTE dbms_space_admin.tablespace_migrate_to_local(”system”);

使用这种方法很好,可是它创建的表空间没有automatic segment space managerment选项,全部字典管理表空间都是用默认手动段空间管理,并且在转换为本地管理的表空间是不能进行修改。还有一个缺点,就是表空间若是 存在空间碎片的话,此方法也不能解决碎片问题。

=======》oracle建议采用第一种方法。

 

52,Oracle ASSM

Oracle 自动段空间管理。从10g开始,oracle开始提供Shrink的命令,假如咱们的表空间中支持自动段空间管理 (ASSM),就能够使用这个特性缩小段,即下降HWM。

建立一个本地管理的表空间,采用段自动管理方式

create tablespace demo

datafile /ora01/oem/demo01.dbf

size 50m

EXTENT MANAGEMENT LOCAL     –必定是本地管理

SEGMENT SPACE MANAGEMENT AUTO. –ASSM管理的标志

 

53,若是一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的状况下,如何恢复?

手工拷贝回全部备份的数据文件

startup mount;

alter database recover automatic until time ’2004-08-04:10:30:00′;

alter database open resetlogs;

 

54,rman是什么,有何特色?

RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库, RMAN 能够用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也能够用来执行彻底或不彻底的数据库恢复。RMAN有三种不一样的用户接口:

COMMAND LINE方式、GUI 方式(集成在OEM 中的备份管理器)、API 方式(用于集成到第三方的备份软件中)。

具备以下特色:

1)功能相似物理备份,但比物理备份强大N倍;

2)能够压缩空块;

3)能够在块水平上实现增量;

4)能够把备份的输出打包成备份集,也能够按固定大小分割备份集;

5)备份与恢复的过程能够自动管理;

6)能够使用脚本(存在Recovery catalog 中)

7)能够作坏块监测

 

55,standby的特色

备用数据库(standby database):ORACLE推出的一种高可用性(HIGH AVAILABLE)数据库方案,在主节点与备用节点间经过日志同步来保证数据的同步,备用节点做为主节点的备份,能够实现快速切换与灾难性恢复,从 920开始,还开始支持物理与逻辑备用服务器。

Oracle 9i中的三种数据保护模式分别是:

1)、MAXIMIZE PROTECTION :最大数据保护与无数据分歧,LGWR将同时传送到备用节点,在主节点事务确认以前,备用节点也必须彻底收到日志数据。若是网络很差,引发LGWR不能传送数据,将引发严重的性能问题,致使主节点DOWN机。

2)、MAXIMIZE AVAILABILITY :无数据丢失模式,容许数据分歧,容许异步传送。正常状况下运行在最大保护模式,在主节点与备用节点的网络断开或链接不正常时,自动切换到最大性能模式, 主节点的操做仍是能够继续的。在网络很差的状况下有较大的性能影响。

3)、MAXIMIZE PERFORMANCE:这种模式应当能够说是从8i继承过来的备用服务器模式,异步传送,无数据同步检查,可能丢失数据,可是能得到主节点的最大性能。9i在配置DATA GUARD的时候默认就是MAXIMIZE PERFORMANCE。

 

56,SGA主要有那些部分,主要做用是什么

db_cache:

数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着很是关键的做用, 它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库经过使用LRU 算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问.

shared_pool:

共享池的大小对于Oracle 性能来讲都是很重要的。共享池中保存数据字典高速缓冲和彻底解析或编译的的PL/SQL 块和SQL 语句及控制结构

large_pool:

使用MTS配置时,由于要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存。   使用RMAN作备份的时候,要使用Large_pool这个内存结构来作磁盘I/O缓存器

java_pool:

为java procedure预备的内存区域,若是没有使用java proc,java_pool不是必须的

 

57,statspack有何认识

Oracle有提供一个用于诊断性能问题的工具包(statspack).固然,可能也有一些第三方的用于oracle性能诊断的工具,可是我想没 有其它工具比ORACLE自己提供的工具更全面,更准确了。STATSPACK须要安装。安装后咱们须要设置一下检查的时间间隔,实际上就是建立一个 oracle的JOB。Statspack或根据咱们设定的时间间隔来从oracle的动态性能视图中捕捉一些与性能相关的数据,而后根据必定的公式进行 计算,生成一个有关于oracle各项性能指标的报告。报告罗列了一些实际的活动情况(负载,内存命中率等等),最高等待事件,以及TOP SQL等内容,是咱们进行性能诊断的一个比较综合的一个工具。

 

58,若是系统如今须要在一个很大的表上建立一个索引,你会考虑哪些因素,如何作以尽可能减少对应用的影响。

在系统比较空闲时: 使用nologging选项(若是有dataguard则不能够使用nologging), 建索引时,Oracle会对数据按照索引进行排序,因此要增大的 sort_ared_size(workarea_size_policy=manual)或 pga_aggregate_target(workarea_size_policy=auto)

 

59,关于oracle自带的表

emp:

empno:员工编号;  ename:员工名字;  job:员工工种; mgr: 上司; hiredate:入职时间;sal:  基本工资;  comm: 补贴;      deptno:所属部门编号;

dept:

deptno:部门编号;  dname:部门名称; loc:地理位置;

salgrade:

grade: 工资等级;  losal:最低限额;  hisal:最高限额;

dual:

系统自带的一张空表; 可用于计算数据:select 2*3 from dual;

 

60, 回滚段的做用是什么

事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。

读一致性:当一个会话正在修改数据时,其余的会话将看不到该会话未提交的修改。当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的 修改(语句级读一致性)。当ORACLE执行Select语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)来保证任何前于当前SCN的未提交的改变不被该语句处理。能够想象:当一个长时间的查询正在执行时,若其余会话改变了该查询要查询 的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。

 

61 绑定变量是什么?绑定变量有什么优缺点?

绑定变量是相对文本变量来说的,所谓文本变量是指在SQL直接书写查询条件,这样的SQL在不一样条件下须要反复解析,绑 定变量是指使用变量来代替直接书写条件,查询bind value在运行时传递,而后绑定执行。优势是减小硬解析,下降CPU的争用,节省shared_pool ;缺点是不能使用histogram,sql优化比较困难。

 

62,不借助第三方工具,怎样查看sql的执行计划

1)使用Explain Plan,查询PLAN_TABLE;

SQL> EXPLAIN   PLAN

SET STATEMENT_ID=’QUERY1′

FOR

SELECT *

FROM a

WHERE aa=1;

SQL> SELECT    operation, options, object_name, object_type, ID, parent_id

FROM plan_table

WHERE STATEMENT_ID = ‘QUERY1′

ORDER BY ID;

2)SQLPLUS中的SET TRACE 便可看到Execution Plan Statistics

SET AUTOTRACE ON;

 

63,如何定位重要(消耗资源多)的SQL

使用CPU多的用户session

SELECT    a.SID, spid, status, SUBSTR (a.program, 1, 40) prog, a.terminal,a.SQL_TEXT,

osuser, VALUE / 60 / 100 VALUE

FROM v$session a, v$process b, v$sesstat c

WHERE c.statistic# = 12 AND c.SID = a.SID AND a.paddr = b.addr

ORDER BY VALUE DESC;

64,如何跟踪某个session的SQL

利用TRACE 跟踪

ALTER SESSION SET SQLTRACE ON;

COLUMN SQL format a200;

SELECT    machine, sql_text SQL

FROM v$sqltext a, v$session b

WHERE address = sql_address

AND machine = ‘&A’

ORDER BY hash_value, piece;

 

65,Oracle学习两大块:

一块是开发,一块是管理。开发主要是写写存储过程、触发器什么的,还有就是用Oracle的Develop工具作form。有点相似于程序员,须要 有较强的逻辑思惟和创造能力,是青春饭J;管理则须要对oracle数据库的原理有深入的认识,有全局操纵的能力和紧密的思惟,责任较大,由于一个小的失 误就会down掉整个数据库,相对前者来讲,后者更看重经验。

===>IF 走数据库路线:数据库管理的责任重大,不多公司愿意请一个刚刚接触oracle的人去管理数据库。对于刚刚毕业的年轻人来讲,能够先选择作开发,有必定经验后转型,去作数据库的管理

===>深刻学习的方向:

管理:能够考OCP(Oracle9i Certified Professional)证书,对oracle先有一个系统的学习,而后看Oracle Concepts、oracle online document,对oracle的原理会有更深刻的了解,同时能够开始进行一些专题的研究如:RMAN、RAS、STATSPACT、 DATAGUARD、TUNING、BACKUP&RECOVER等等。

开发:对于想作Oracle开发的,在了解完Oracle基本的体系结构以后,能够重点关注PL/SQL及Oracle的开发工具这一部分。 PL/SQL主要是包括怎么写SQL语句,怎么使用Oracle自己的函数,怎么写存储过程、存储函数、触发器等。 Oracle的开发工具主要就是Oracle本身的Developer Suite(Oracle Forms Developer and Reports Developer这些),学会如何熟练使用这些工具。

 

66,oracle中的动态性能表:

表名 说明
V$ACCESS 显示数据库中的对象信息
V$ARCHIVE 数据库系统中每一个索引的归档日志方面的信息
V$BACKUP 全部在线数据文件的状态
V$BGPROCESS 描述后台进程
V$CIRCUIT 有关虚拟电路信息
V$DATABASE 控制文件中的数据库信息
V$DATAFILE 控制文件中的数据文件信息
V$DBFILE 构成数据库全部数据文件
V$DB_OBJECT_CACHE 表示库高速缓存中被缓存的数据库对象
V$DISPATCHER 调度进程信息
V$ENABLEDPRIVS 那些特权接通
V$FILESTAT 文件读/写统计信息
V$FIXED_TABLE 显示数据库中全部固定表、视图和派生表
V$INSTANCE 当前实例状态
V$LATCH 每类闩锁的信息
V$LATCHHOLDER 当前闩锁占有者的信息
V$LATCHNAME 在V$LATCH表中表示的闩锁的译码闩锁名
V$LIBRARYCACHE 库高速缓冲存储管理统计
V$LICENSE 许可限制信息
V$LOADCSTAT SQL*Loader在直接装入执行过程当中的编译统计
V$LOCK 有关封锁和资源信息,不包含DDL封锁
V$LOG 控制文件中的日志文件信息
V$LOGFILE 有关日志文件信息
V$LOGHIST 控制文件中的日志历史信息
V$LOG­HISTORY 日志历史中全部日志的归档日志名
V$NLS_PARAMETERS NLS参数的当前值
V$OPEN_CURSOR 每个用户会话期当前已打开和分析的光标
V$PARAMETER 当前参数值的信息
V$PROCESS 当前活动进程的信息
V$QUEUE 多线索信息队列的信息
V$REVOVERY_LOG 须要完成介质恢复的归档日志
V$RECOVERY_FILE 须要介质恢复的文件状态
V$REQDIST 请求时间直方图,分为12个范围
V$RESOURCE 有关资源信息
V$ROLLNAME 全部在线回滚段的名字
V$ROLLSTAT 全部在线回滚段的统计信息
V$ROWCACHE 数据字典活动的统计信息(每个包含一个数据字典高速缓存的统计信息)
V$SESSION 每个当前会话期的会话信息
V$SESSION_WAIT 列出活动会话等待的资源或事件
V$SESSTAT 对于每个当前会话的当前统计值
V$SESS_IO 每个用户会话的I/O统计
V$SGA 系统全局区统计信息
V$SGASTAT 系统全局区的详细信息
V$SHARED_SERVER 共享服务器进程信息
V$SQLAREA 共享光标高速缓存区的统计信息,每个有一个共享光标的统计信息
V$SQLTEXT 属于SGA中的共享SQL光标的SQL语句文本
V$STATNAME 在V$SESSTAT表中表示的统计信息的译码统计名
V$SYSSTAT 表V$SESSETA中当前每一个统计的全面的系统值
V$THREAD 从控制文件中获得线索信息
V$TIMER 以百分之一秒为单位的当前时间
V$TRANSACTION 有关事务的信息
V$TYPE_SIZE 各类数据库成分的大小
V$VERSION ORACLE Server中核心库成员的版本号,每一个成员一行
V$WAITSTAT 块竞争统计,当时间统计可能时,才能更新该表

 

 

67,SQL 经常使用命令:

数据检索: Select

数据维护(DML): insert、update、delete

数据定义(DDL) :create、drop、alert、rename、truncate

事务处理控制:commit、rollback 、savepoint

数据控制(DCL) :Grant、revoke

 

68,SQL*Plus 的使用:

1)文件命令

a) SAVE filename 把当前SQL缓冲区的内容存储在文件filename 中

b) GET filename 把文件filename 中的内容写入当前SQL缓冲区

c) START filename 执行存储在filename中的内容

d) @ filename 执行存储在 filename 中的内容

e) EDIT filename 打开文本编辑器,把当前SQL 缓冲区的内容写入文件afiedt.buf

f) SPOOL filename 把查询的数据结果存储在filename 中

g) EXIT 退出SQL*Plus

2)文本编辑命令

a) A[PPEND] text

b) C[HANGE]/old/new

c) CL[EAR]buff[ER]

d) DEL

e) I[NPUT] text

f) L[IST] n

g) N text

 

69,oracle数据字典的四大视图类型:

- user 用户拥有的对象

- all 用户可访问对象

- DBA 全部数据对象

- v$ 服务器性能对象

 

70,oracle通用数据类型:

1)BINARY_INTEGER: 基本数值整型,-2147483647 —–2147483647

2)NUMBER[(precision,scale):] 基本浮点数值型

3)CHAR[(maximun_length)]: 固定长度的字符型,最大值为32760

4)LONG :可变常字符型,最大长度为32760

5)LONG RAW:二进制型,最大长度为32760

6)VARCHAR2(maximum_length): 可变长字符型,最大长度为32767

7)DATE :日期和时间类型

8)BOOLEAN: 逻辑型(TRUE、FALSE 或NULL)

 

71,数据库引擎

数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而知足企业内大多数须要处理大量数据的应用程序 的要求。使用数据库引擎建立用于联机事务处理或联机分析处理数据的关系数据库。这包括建立用于存储数据的表和用于查看、管理和保护数据安全的数据库对象 (如索引、视图和存储过程)。

 

78,Mysql引擎:

在缺省状况下,MySQL支持三个引擎:ISAM、MyISAM和HEAP。另外两种类型InnoDB和Berkley(BDB),也经常能够使用。

ISAM

ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数 据库被查询的次数要远大于更新的次数。所以,ISAM执行读取操做的速度很快,并且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支 持事务处理,也不可以容错:若是你的硬盘崩溃了,那么数据文件就没法恢复了。若是你正在把ISAM用在关键任务应用程序里,那就必须常常备份你全部的实时 数据,经过其复制特性,MySQL可以支持这样的备份应用程序。

MyISAM

MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM 里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操做。其代价是你须要常常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMChk工具和用来恢复浪费空间的 MyISAMPack工具。MyISAM强调了快速读取操做,这可能就是为何MySQL受到了Web开发如 此青睐的主要缘由:在Web开发中你所进行的大量数据操做都是读取操做。因此,大多数虚拟主机提供商和Internet平台提供商(Internet Presence Provider,IPP)只容许使用MyISAM格式。

HEAP

HEAP容许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和 MyISAM都快,可是它所管理的数据是不稳定的,并且若是在关机以前没有进行保存,那么全部的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费 大量的空间。HEAP表格在你须要使用SELECT表达式来选择和操控数据的时候很是有用。要记住,在用完表格以后就删除表格。让我再重复一遍:在你用完 表格以后,不要忘记删除表格。

InnoDB和Berkley DB

InnoDB和Berkley DB(BDB)数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MySQL++ API。在使用MySQL的时候,你所面对的每个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAM和 MyISAM引擎慢不少,可是InnoDB和BDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,若是你的设计须要这些特性 中的一者或者二者,那你就要被迫使用后两个引擎中的一个了。

数据库引擎设定与切换:

1)CREATE TABLE tblMyISAM (

id INT NOT NULL AUTO_INCREMENT,

PRIMARY KEY (id),

value_a TINYINT

)TYPE=MyISAM;

2)ALTER TABLE tblMyISAM CHANGE TYPE=InnoDB;

3)SHOW TABLE STATUS FROM tblInnoDB;

 

79,Mysql6的新特性:(与mysql5比较)

1)新Falcon事务存储引擎(“Falcon存储引擎” ) 。

2)支持更多的Unicode字符集: utf16 , utf32 ,和4字节utf8 。 这些字符集支持这些附加的Unicode字符集,也就是那些在基础多语言基础以外的字符 。

3)增长了 BACKUP DATABASE 和 RESTORE 语句来进行备份和还原操做. 见第6.3节, “使用MySQL备份” 。

4)改进INFORMATION_SCHEMA数据库,并增长了INFORMATION_SCHEMA.PARAMETERS 表,INFORMATION_SCHEMA.ROUTINES 增长了

相关文章
相关标签/搜索