数据库经典试题.docx
- 文档编号:17319230
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:21
- 大小:32.04KB
数据库经典试题.docx
《数据库经典试题.docx》由会员分享,可在线阅读,更多相关《数据库经典试题.docx(21页珍藏版)》请在冰点文库上搜索。
数据库经典试题
数据库基础(面试常见题)
一、数据库基础
1.数据抽象:
物理抽象、概念抽象、视图级抽象,内模式、模式、外模式
2.SQL语言包括数据定义、数据操纵(DataManipulation),数据控制(DataControl)
数据定义:
CreateTable,AlterTable,DropTable,Craete/DropIndex等
数据操纵:
Select,insert,update,delete,
数据控制:
grant,revoke
3.SQL常用命令:
CREATETABLEStudent(
IDNUMBERPRIMARYKEY,
NAMEVARCHAR2(50)NOTNULL);//建表
CREATEVIEWview_nameAS
Select*FROMTable_name;//建视图
CreateUNIQUEINDEXindex_nameONTableName(col_name);//建索引
INSERTINTOtablename{column1,column2,…}values(exp1,exp2,…);//插入
INSERTINTOViewname{column1,column2,…}values(exp1,exp2,…);//插入视图实际影响表
UPDATEtablenameSETname=’zang3’condition;//更新数据
DELETEFROMTablenameWHEREcondition;//删除
GRANT(Select,delete,…)ON(对象)TOUSER_NAME[WITHGRANTOPTION];//授权
REVOKE(权限表)ON(对象)FROMUSER_NAME[WITHREVOKEOPTION]//撤权
列出工作人员及其领导的名字:
SelectE.NAME,S.NAMEFROMEMPLOYEEES
WHEREE.SUPERName=S.Name
5.完整性约束:
实体完整性、参照完整性、用户定义完整性
9.事务:
是一系列的数据库操作,是数据库应用的基本逻辑单位。
事务性质:
原子性、
原子性。
即不可分割性,事务要么全部被执行,要么就全部不被执行。
一致性或可串性。
事务的执行使得数据库从一种正确状态转换成另一种正确状态
隔离性。
在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,
持久性。
事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。
10.锁:
共享锁、互斥锁
两段锁协议:
阶段1:
加锁阶段阶段2:
解锁阶段
11.死锁及处理:
事务循环等待数据锁,则会死锁。
死锁处理:
预防死锁协议,死锁恢复机制
12.存储过程:
存储过程就是编译好了的一些sql语句。
1.存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。
2.可保证数据的安全性和完整性。
通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。
通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。
3.可以降低网络的通信量。
存储过程主要是在服务器上运行,减少对客户机的压力。
4:
存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。
可以向程序返回错误原因
5:
存储过程可以包含程序流、逻辑以及对数据库的查询。
同时可以实体封装和隐藏了数据逻辑。
13.触发器:
当满足触发器条件,则系统自动执行触发器的触发体。
触发时间:
有before,after.触发事件:
有insert,update,delete三种。
触发类型:
有行触发、语句触发
14.内联接,外联接区别?
内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。
在外连接中,某些不满足条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。
分左连接、右连接、全连接三种
1.触发器的作用?
答:
触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。
它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。
可以联级运算。
如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。
2。
什么是存储过程?
用什么来调用?
答:
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。
如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。
可以用一个命令对象来调用存储过程。
3。
索引的作用?
和它的优点缺点是什么?
答:
索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。
它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。
索引可以是唯一的,创建索引允许指定单个列或者是多个列。
缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。
3。
什么是内存泄漏?
答:
一般我们所说的内存泄漏指的是堆内存的泄漏。
堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。
当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。
4。
维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?
为什么?
答:
我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。
其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。
最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。
5。
什么是事务?
什么是锁?
答:
事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上个节点。
为了确保要么执行,要么不执行,就可以使用事务。
要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。
锁:
在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。
6。
什么叫视图?
游标是什么?
答:
视图是一种虚拟的表,具有和物理表相同的功能。
可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。
对视图的修改不影响基本表。
它使得我们获取数据更容易,相比多表查询。
游标:
是对查询出来的结果集作为一个单元来有效的处理。
游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。
可以对结果集当前行做修改。
一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
你能向我简要叙述一下SQLServer2000中使用的一些数据库对象吗?
你希望听到的答案包括这样一些对象:
表格、视图、用户定义的函数,以及存储过程;触发器
什么是索引?
SQLServer2000里有什么类型的索引?
简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。
在SQLServer里,它们有两种形式:
聚集索引和非聚集索引。
聚集索引在索引的叶级保存数据。
这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。
由于存在这种排序,所以每个表格只会有一个聚集索引。
非聚集索引在索引的叶级有一个行标识符。
这个行标识符是一个指向磁盘上数据的指针。
它允许每个表格有多个非聚集索引。
什么是主键?
什么是外键?
主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。
外键是一个用来建立两个表格之间关系的约束。
这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。
那么这些相连的字段就是外键。
什么是触发器?
SQLServer2000有什么不同类型的触发器?
触发器是一种专用类型的存储过程,它被捆绑到SQLServer2000的表格或者视图上。
在SQLServer2000里,有INSTEAD-OF和AFTER两种触发器。
INSTEAD-OF触发器是替代数据操控语言(DataManipulationLanguage,DML)语句对表格执行语句的存储过程。
例如,如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。
AFTER触发器要在DML语句在数据库里使用之后才执行。
这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。
您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?
这个与关系相关的问题有两个可能的答案。
第一个答案(而且是您希望听到的答案)是使用外键限制。
外键限制用来维护引用的完整性。
它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。
这个字段就是候选键(通常是另外一个表格的主键)。
另外一种答案是触发器。
触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。
由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。
对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?
你正在寻找进行与数据操控有关的应聘人员。
对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。
你可以用什么来确保表格里的字段只接受特定范围里的值?
这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。
您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。
触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。
因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。
如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。
返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。
返回参数总是INT数据类型。
OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。
(可以用作输出参数的数据类型是有一些限制的。
)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。
什么是相关子查询?
如何使用这些查询?
相关子查询是一种包含子查询的特殊类型的查询。
查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。
1Pctusedandpctfree表示什么含义有什么作用
pctused与pctfree控制数据块是否出现在freelist中, pctfree控制数据块中保留用于update的空间,当数据块中的freespace小于pctfree设置的空间时,该数据块从freelist中去掉,当块由于dml操作freespace大于pct_used设置的空间时,该数据库块将被添加在freelist链表中。
2简单描述tablespace/segment/extent/block之间的关系
tablespace:
一个数据库划分为一个或多个逻辑单位,该逻辑单位成为表空间;每一个表空间可能包含一个或多个Segment;
Segments:
Segment指在tablespace中为特定逻辑存储结构分配的空间。
每一个段是由一个或多个extent组成。
包括数据段、索引段、回滚段和临时段。
Extents:
一个extent由一系列连续的Oracleblocks组成.ORACLE为通过extent来给segment分配空间。
DataBlocks:
Oracle数据库最小的I/O存储单位,一个datablock对应一个或多个分配给datafile的操作系统块。
table创建时,默认创建了一个datasegment,每个datasegment含有minextents指定的extents数,每个extent据据表空间的存储参数分配一定数量的blocks
3描述tablespace和datafile之间的关系
一个表空间可包含一个或多个数据文件。
表空间利用增加或扩展数据文件扩大表空间,表空间的大小为组成该表空间的数据文件大小的和。
一个datafile只能属于一个表空间;
5回滚段的作用是什么
回滚段用于保存数据修改前的映象,这些信息用于生成读一致性数据库信息、在数据库恢复和Rollback时使用。
一个事务只能使用一个回滚段。
事务回滚:
当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。
事务恢复:
当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。
读一致性:
当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。
当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)
当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEMCHANGENUMBER-SCN)来保证任何前于当前SCN的未提交的改变不被该语句处理。
可以想象:
当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图
6日志的作用是什么
日志文件(LogFile)记录所有对数据库数据的修改,主要是保护数据库以防止故障,以及恢复数据时使用。
其特点如下:
a)每一个数据库至少包含两个日志文件组。
每个日志文件组至少包含两个日志文件成员。
b)日志文件组以循环方式进行写操作。
c)每一个日志文件成员对应一个物理文件。
记录数据库事务,最大限度地保证数据的一致性与安全性
重做日志文件:
含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件
归档日志文件:
是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
7SGA主要有那些部分,主要作用是什么
系统全局区(SGA):
是ORACLE为实例分配的一组共享缓冲存储区,用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。
SGA主要包括:
a)共享池(sharedpool):
用来存储最近执行的SQL语句和最近使用的数据字典的数据。
b)数据缓冲区(databasebuffercache):
用来存储最近从数据文件中读写过的数据。
c)重作日志缓冲区(redologbuffer):
用来记录服务或后台进程对数据库的操作。
另外在SGA中还有两个可选的内存结构:
d)javapool:
用来存储Java代码。
e)Largepool:
用来存储不与SQL直接相关的大型内存结构。
备份、恢复使用。
GA:
db_cache/shared_pool/large_pool/java_pool
db_cache:
数据库缓存(BlockBuffer)对于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:
为javaprocedure预备的内存区域,如果没有使用javaproc,java_pool不是必须的
8Oracle系统进程主要有哪些,作用是什么
数据写进程(DBWR):
负责将更改的数据从数据库缓冲区高速缓存写入数据文件
日志写进程(LGWR):
将重做日志缓冲区中的更改写入在线重做日志文件
系统监控 (SMON):
检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复
进程监控 (PMON):
负责在一个Oracle进程失败时清理资源
检查点进程(CKPT):
负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。
归档进程 (ARCH):
在每次日志切换时把已满的日志组进行备份或归档
恢复进程 (RECO):
保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;
作业调度器(CJQ):
负责将调度与执行系统中已定义好的job,完成一些预定义的工作.
1备份如何分类
逻辑备份:
exp/imp指定表的逻辑备份
物理备份:
热备份:
altertablespacebegin/endbackup;
冷备份:
脱机备份(databaseshutdown)
RMAN备份
fullbackup/incrementalbackup(累积/差异)
物理备份
物理备份是最主要的备份方式。
用于保证数据库在最小的数据库丢失或没有数据丢失的情况下得到恢复。
冷物理
冷物理备份提供了最简单和最直接的方法保护数据库因物理损坏丢失。
建议在以下几种情况中使用。
对一个已经存在大最数据量的数据库,在晚间数据库可以关闭,此时应用冷物理备份。
对需对数据库服务器进行升级,(如更换硬盘),此时需要备份数据库信息,并在新的硬盘中恢复这些数据信息,建议采用冷物理备份。
热物理
主要是指备份过程在数据库打开并且用户可以使用的情况下进行。
需要执行热物理备份的情况有:
由于数据库性质要求不间断工作,因而此时只能采用热物理备份。
由于备份的要求的时间过长,而数据库只能短时间关闭时。
逻辑备份(EXP/IMP)
逻辑备份用于实现数据库对象的恢复。
但不是基于时间点可完全恢复的备份策略。
只能作为联机备份和脱机备份的一种补充。
完全逻辑备份
完全逻辑备份是将整个数据库导出到一个数据库的格式文件中,该文件可以在不同的数据库版本、操作系统和硬件平台之间进行移植。
指定表的逻辑备份
通过备份工具,可以将指定的数据库表备份出来,这可以避免完全逻辑备份所带来的时间和财力上的浪费。
2归档是什么含义
关于归档日志:
Oracle要将填满的在线日志文件组归档时,则要建立归档日志(archivedredolog)。
其对数据库备份和恢复有下列用处:
数据库后备以及在线和归档日志文件,在操作系统和磁盘故障中可保证全部提交的事物可被恢复。
在数据库打开和正常系统使用下,如果归档日志是永久保存,在线后备可以进行和使用。
数据库可运行在两种不同方式下:
NOARCHIVELOG方式或ARCHIVELOG方式
数据库在NOARCHIVELOG方式下使用时,不能进行在线日志的归档,
数据库在ARCHIVELOG方式下运行,可实施在线日志的归档
归档是归档当前的联机redo日志文件。
SVRMGR>altersystemarchivelogcurrent;
数据库只有运行在ARCHIVELOG模式下,并且能够进行自动归档,才可以进行联机备份。
有了联机备份才有可能进行完全恢复。
3如果一个表在2004-08-0410:
30:
00被drop,在有完善的归档和备份的情况下,如何恢复
9i新增的FLASHBACK应该可以;
Logminer应该可以找出DML。
有完善的归档和备份,先归档当前数据,然后可以先恢复到删除的时间点之前,把DROP的表导出来,然后再恢复到最后归档时间;
手工拷贝回所有备份的数据文件
Sql〉startupmount;
sql〉alterdatabaserecoverautomaticuntiltime'2004-08-04:
10:
30:
00';
sql〉alterdatabaseopenresetlogs;
4rman是什么,有何特点
RMAN(RecoveryManager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库,RMAN可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。
RMAN有三种不同的用户接口:
COMMANDLINE方式、GUI方式(集成在OEM中的备份管理器)、API方式(用于集成到第三方的备份软件中)。
具有如下特点:
1)功能类似物理备份,但比物理备份强大N倍;
2)可以压缩空块;
3)可以在块水平上实现增量;
4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;
5)备份与恢复的过程可以自动管理;
6)可以使用脚本(存在Recoverycatalog中)
7)可以做坏块监测
6对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略
数据库比较大逻辑备份没什么必要,每天归档5G,每周三/周六自动归档10G,每月RMAN归档全库。
应该有standby。
rman/每月一号level0每周末/周三level1其它每天level2
4. 如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用影响
可以先表分析一下,然后测试创建索引前后对应用的性能影响;
需要考虑的是该索引列不经常更新,不是有很多重复值的情况时,在大表中使用索引特别有效.创建的索引可以跟数据表分不同表空间存储。
在系统比较空闲时nologging选项(如果有dataguard则不可以使用nologging)
大的sort_ared_size或pga_aggregate_target较大
1.解释冷备份和热备份的不同点以及各自的优点
解答:
热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。
而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。
热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。
冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。
(因为不必将archivelog写入硬盘)
2.你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
解答:
重建控制文件,用带backupcontrolfile子句的recover命令恢复数据库。
3.如何转换init.ora到spfile?
解答:
使用createspfilefrompfile命令.
4.解释datablock,extent和segment的区别(这里建议用英文术语)
解答:
datablock是数据库中最小的逻辑存储单元。
当数据库的对象需要更多的物理存储空间时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 经典 试题