数据库管理员试题.docx
《数据库管理员试题.docx》由会员分享,可在线阅读,更多相关《数据库管理员试题.docx(25页珍藏版)》请在冰豆网上搜索。
数据库管理员试题
Oracle数据库管理员笔试题(基本知识)姓名:
以下是所有题目假设的环境:
OS:
RedHatLinuxAS4DataBase:
Oracle9.2.0.1如果你答案描述的环境与此环境有差别,请声明,同样有效。
任何题目都不限于形式,只要说出要点即可。
答案写在答题纸上,不要写在题目上
1.请你描述一下Oracle架构,包括SGA,相关进程,表空间,数据文件,PGA,参数文件,控制文件…等。
2.请你写出SGA中各部分或者总体对应参数文件中的什么变量?
PGA是什么作用,哪个参数控制它?
3.请你说出Oracle数据库启动(当你startup;时)时按照先后顺序都访问了那些文件。
Oracle中数据库实例和数据库是独立实体,可以独立存在。
因此启动过程分成多个阶段:
首先在内存中构建实例,然后通过安装数据库启用到数据库的连接,最后打开数据库来使用它。
Oracle数据库有四种状态:
Shutdown:
所有数据库文件都关闭,不存在实例
Nomount:
实例在内存中创建(sga已经被创建,根据参数文件指定启动某些后台进程),但没有连接到任何数据库。
Moun:
实例定位并读取数据库控制文件。
Open:
所有的数据库文件都被定位和打开,终端用户可以使用数据库。
数据库的启动可分为三步:
①、nomount:
在这一阶段,只需要读取initsid.ora文件,启动数据库实例,创建后台进程。
在initsid.ora文件中,可以定位spfileorac.ora文件,这是参数文件,通过它可以初始化sga和启动后台进程。
并可以定位控制文件的位置。
在此阶段,可以执行的操作有:
重建控制文件,重建数据库。
②、mount:
在nomount阶段,可以通过读取控制文件来转换到mount阶段。
在数据库加载阶段(mount),所有的数据文件和联机日志文件的名称及位置都从控制文件中读取,但是并没有真正查找到这些文件,在此阶段可以执行的操作有:
数据库日志归档、数据库介质恢复、使数据文件联机或脱机、重定位数据文件和联机日志。
③、Open:
通过查找定位并打开数据文件和联机日志文件来切换到open阶段。
此时数据库可用,可以建立会话。
4.请你说出几种startup命令的选项和他们的意义。
5.如果想关闭数据库,有什么选项,各是什么意义?
6.我想知道数据库是否运行在归档模式,使用什么命令或者查什么视图?
怎样把数据库从非归档切换成归档模式?
写出命令或者步骤。
SQL>conn/assysdba
已连接。
SQL>archiveloglist;
数据库日志模式 存档模式
自动存档 启用
存档终点 D:
\oracle\ora92\RDBMS
最早的概要日志序列 0
下一个存档日志序列 10
当前日志序列 10
SQL>connbill/bill
已连接。
SQL>archiveloglist;
ORA-01031:
权限不足
SQL>
要使用sys用户
select*fromv$instance可以查看
7.如果开发组给你了一组创建表的脚本,他希望你把这些数据部署到已经建立好的一个空数据库中,写出你的规划步骤或者命令。
8.写出你知道的exp和imp命令的参数和它们的作用,尽量多写。
exp
将数据库内的各对象以二进制方式下载成dmp文件,方便数据迁移。
buffer:
下载数据缓冲区,以字节为单位,缺省依赖操作系统
consistent:
下载期间所涉及的数据保持readonly,缺省为n
direct:
使用直通方式,缺省为n
feeback:
显示处理记录条数,缺省为0,即不显示
file:
输出文件,缺省为expdat.dmp
filesize:
输出文件大小,缺省为操作系统最大值
indexes:
是否下载索引,缺省为n,这是指索引的定义而非数据,exp不下载索引数据
log:
log文件,缺省为无,在标准输出显示
owner:
指明下载的用户名
query:
选择记录的一个子集
rows:
是否下载表记录
tables:
输出的表名列表
导出整个实例
expdbuser/oraclefile=oradb.dmplog=oradb.logfull=yconsistent=ydirect=y
user应具有dba权限
导出某个用户所有对象
expdbuser/oraclefile=dbuser.dmplog=dbuser.logowner=dbuserbuffer=feedback=10000
导出一张或几张表
expdbuser/oraclefile=dbuser.dmplog=dbuser.logtables=table1,table2buffer=feedback=10000
导出某张表的部分数据
expdbuser/oraclefile=dbuser.dmplog=dbuser.logtables=table1buffer=feedback=10000query=\”wherecol1=\’…\’andcol2\<…\”
不可用于嵌套表
以多个固定大小文件方式导出某张表
expdbuser/oraclefile=1.dmp,2.dmp,3.dmp,…filesize=1000mtables=empbuffer=feedback=10000
这种做法通常用在:
表数据量较大,单个dump文件可能会超出文件系统的限制
直通路径方式
direct=y,取代buffer选项,query选项不可用
有利于提高下载速度
consistent选项
自export启动后,consistent=y冻结来自其它会话的对export操作的数据对象的更新,这样可以保证dump结果的一致性。
但这个过程不能太长,以免回滚段和联机日志消耗完
imp
将exp下载的dmp文件上载到数据库内。
buffer:
上载数据缓冲区,以字节为单位,缺省依赖操作系统
commit:
上载数据缓冲区中的记录上载后是否执行提交
feeback:
显示处理记录条数,缺省为0,即不显示
file:
输入文件,缺省为expdat.dmp
filesize:
输入文件大小,缺省为操作系统最大值
fromuser:
指明来源用户方
ignore:
是否忽略对象创建错误,缺省为n,在上载前对象已被建立往往是一个正常现象,所以此选项建议设为y
indexes:
是否上载索引,缺省为n,这是指索引的定义而非数据,如果上载时索引已建立,此选项即使为n也无效,imp自动更新索引数据
log:
log文件,缺省为无,在标准输出显示
rows:
是否上载表记录
tables:
输入的表名列表
touser:
指明目的用户方
导入整个实例
impdbuser/oraclefile=oradb.dmplog=oradb.logfull=ybuffer=commit=yignore=yfeedback=10000
导入某个用户所有对象
impdbuser/oraclefile=dbuser.dmplog=dbuser.logfromuser=dbusertouser=dbuser2buffer=commit=yignore=yfeedback=10000
导入一张或几张表
impdbuser2/oraclefile=user.dmplog=user.logtables=table1,table2fromuser=dbusertouser=dbuser2buffer=commit=yignore=yfeedback=10000
以多个固定大小文件方式导入某张表
impdbuser/oraclefile=\(1.dmp,2.dmp,3.dmp,…\)filesize=1000mtables=empfromuser=dbusertouser=dbuser2buffer=commit=yignore=yfeedback=10000
9.我想知道目前数据库的会话情况,还想知道数据库里有哪些表空间和数据文件,以及有哪些用户被创建在数据库中,还想知道这个用户已经创建了哪些对象。
应该查询哪些视图?
下面的SQL语句列出当前数据库建立的会话情况:
selectsid,serial#,username,program,machine,status
fromv$session;
输出的结果:
SIDSERIAL#USERNAMEPROGRAMMACHINESTATUS
-------------------------------------------------------
11ORACLE.EXEWORK3ACTIVE
21ORACLE.EXEWORK3ACTIVE
31ORACLE.EXEWORK3ACTIVE
41ORACLE.EXEWORK3ACTIVE
53ORACLE.EXEWORK3ACTIVE
61ORACLE.EXEWORK3ACTIVE
71ORACLE.EXEWORK3ACTIVE
827SYSSQLPLUS.EXEWORKGROUP\WORK3ACTIVE
115DBSNMPdbsnmp.exeWORKGROUP\WORK3INACTIVE
其中SID会话(session)的ID号;
SERIAL#会话的序列号,和SID一起用来唯一标识一个会话;
USERNAME建立该会话的用户名;
PROGRAM这个会话是用什么工具连接到数据库的;
STATUS当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作;
假如DBA要手工断开某个会话,则执行:
altersystemkillsession'SID,SERIAL#';
注意:
在上面的示例中,SID为1到7(USERNAME列为空)的会话,它是Oracle数据库的后台进程,请大家不要对这些会话进行任何操作。
一、查看Oracle数据库中表空间信息的方法
1、查看Oracle数据库中表空间信息的工具方法:
使用oracleenterprisemanagerconsole工具,这是oracle的客户端工具,当安装oracle服务器或客户端时会自动安装此工具,在windows操作系统上完成oracle安装后,通过下面的方法登录该工具:
开始菜单——程序——Oracle-OraHome92——EnterpriseManagerConsole(单击)——oracleenterprisemanagerconsole登录——选择‘独立启动’单选框——‘确定’——‘oracleenterprisemanagerconsole,独立’——选择要登录的‘实例名’——弹出‘数据库连接信息’——输入’用户名/口令’(一般使用sys用户),’连接身份’选择选择SYSDBA——‘确定’,这时已经成功登录该工具,选择‘存储’——表空间,会看到如下的界面,该界面显示了表空间名称,表空间类型,区管理类型,以”兆”为单位的表空间大小,已使用的表空间大小及表空间利用率。
图1表空间大小及使用率
2、查看Oracle数据库中表空间信息的命令方法:
通过查询数据库系统中的数据字典表(datadictionarytables)获取表空间的相关信息,首先使用客户端工具连接到数据库,这些工具可以是SQLPLUS字符工具、TOAD、PL/SQL等,连接到数据库后执行如下的查询语句:
select
a.a1表空间名称,
c.c2类型,
c.c3区管理,
b.b2/1024/1024表空间大小M,
(b.b2-a.a2)/1024/1024已使用M,
substr((b.b2-a.a2)/b.b2*100,1,5)利用率
from
(select tablespace_namea1,sum(nvl(bytes,0))a2fromdba_free_spacegroupbytablespace_name)a,
(selecttablespace_nameb1,sum(bytes)b2fromdba_data_filesgroupbytablespace_name)b,
(selecttablespace_namec1,contentsc2,extent_managementc3 fromdba_tablespaces)c
wherea.a1=b.b1andc.c1=b.b1;
该语句通过查询dba_free_space,dba_data_files,dba_tablespaces这三个数据字典表,得到了表空间名称,表空间类型,区管理类型,以”兆”为单位的表空间大小,已使用的表空间大小及表空间利用率。
dba_free_space表描述了表空间的空闲大小,dba_data_files表描述了数据库中的数据文件,dba_tablespaces表描述了数据库中的表空间。
上面语句中from子句后有三个select语句,每个select语句相当于一个视图,视图的名称分别为a、b、c,通过它们之间的关联关系,我们得到了表空间的相关信息。
语句执行结果如下:
上面描述中分别介绍了查看Oracle数据库中表空间信息的工具方法和命令方法。
二、查询Oracle数据库中数据文件信息的方法
1、查看Oracle数据库中数据文件信息的工具方法:
使用上面介绍过的方法登录oracleenterprisemanagerconsole工具,选择‘存储’——数据文件,会看到如下的界面,该界面显示了数据文件名称,表空间名称,以”兆”为单位的数据文件大小,已使用的数据文件大小及数据文件利用率。
2、查看Oracle数据库中数据文件信息的命令方法:
通过查询数据库系统中的数据字典表(datadictionarytables)获取数据文件的相关信息,首先使用客户端工具连接到数据库,这些工具可以是SQLPLUS字符工具、TOAD、PL/SQL等,连接到数据库后执行如下的查询语句
select
b.file_name物理文件名,
b.tablespace_name表空间,
b.bytes/1024/1024大小M,
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024 已使用M,
substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) 利用率
fromdba_free_spacea,dba_data_filesb
wherea.file_id=b.file_id
groupbyb.tablespace_name,b.file_name,b.bytes
orderbyb.tablespace_name
语句执行结果如下:
上明描述中分别介绍了查看Oracle数据库中数据文件信息的工具方法和命令方法。
三、查看临时表空间和数据库文件的方法
在oracle数据库中,临时表空间主要用于用户在使用orderby、groupby语句进行排序和汇总时所需的临时工作空间。
要查询数据库中临时表空间的名称,大小及数据文件,可以查询数据字典dba_tablespaces及dba_data_files。
命令如下:
select
a.talbespace_name表空间名称,
b.bytes 大小bytes,
b.file_name 数据文件名
fromdba_tablespacesa,dba_data_filesb
Wherea.talbespace_name=b.talbespace_nameanda.contents=’TEMPORARY’;
查询结果如下:
从oracle9i开始,可以创建Temporarytablespace类表空间,即“临时“表空间,这类表空间使用临时文件。
临时文件的信息被存储在数据字典V$tempfile中。
命令如下:
Selectfile#,status,namefromV$tempfile;
查询数据字典V$tempfile结果如下:
在上面介绍的方法中,建议掌握命令方法,因为你的环境可能没有图形工具,而SQLPLUS一般情况下都是可以使用的,有了命令脚本,很容易得到表空间和数据文件的相关信息。
另外,数据库管理员应该多整理命令脚本,在需要时直接执行脚本以提高工作效率。
在数据库管理员的日常工作中,应该经常查询表空间的利用率,按照数据库系统的具体情况估算表空间的增长量,当表空间的利用率超过90%时,要及时采取措施,如清理历史表、历史数据以释放空间,向表空间中添加新的数据文件,扩展现有数据文件大小等方法来降低表空间的利用率,避免表空间利用率接近100%时,将产生空间不够的错误。
10.如果我想在一个表T的字段CONTENT上建立全文索引,应该怎么做,写出sql?
开发组想查出T.CONTENT包含“互联网”这个词的记录,怎样写sql?
11.ORACLE都有什么索引?
分别适用于什么情况?
12.Oracle的分区表有什么类型?
分别适用于什么情况?
分区表是将大表的数据分成称为分区的许多小的子集,9i提供四种分区方法:
范围分区,列表分区,哈希分区和混合分区;
•范围分区是根椐分区键的不同取值范围来划分子集的,关键字RANGE,VALUESLESSTHAN;
•列表分区是根椐分区键的一些离散的取值来划分子集的,关键字LIST,VALUES;
•哈希分区是应用哈希算法将分区键对应到某个子集中去,关键字HASH,PARTITIONS;
•混合分区只能有两层,第一层是范围分区,第二层可以是列表分区或者哈希分区;
•范围分区和列表分区中,如果插入记录的分区键没有对应的容纳分区,会产生ORA-14400;
•update操作如果会使记录从一个分区迁移到另一个分区,且分区表的ROWMOVEMENT属性是DISABLE,会产ORA-14402;
•分区表上的索引有两大类:
普通的二叉树索引,分区索引,下面讲到的都是分区索引:
•按索引分区和表分区间的对应关系可以分为局部索引和全局索引;
Ø局部索引的索引分区和表分区间是一一对应的,全局索引则相反;
Ø局部索引的分区方法可以用上面提到四种的任何一种,全局索引的分区方法只有范围分区(而且最高的分区必须用MAXVALUE来定义);
ØORACLE自动维护局部索引的分区,当表分区被合并,分裂或删除时,关联的索引分区也会被合并,分裂或删除;对分区表执行管理操作时会使其上的全局索引失效;
Ø建在分区表的位图索引必须是局部分区索引;
ØORACLE推荐尽可能地使用局部索引;
•按索引栏位和分区键间的关系分为前缀索引和非前缀索引;
Ø前缀索引最前面的栏位是分区键栏位,非前缀索引相反;
•在这两种分类方法的四种组合中,只有三种有效(局部前缀索引,局部非前缀索引,全局前缀索引),不存在全局非前缀索引;
•分区表给CBO带来很多选项,如分区排除,并行分区连接等。
下面皆以学生表(tab_students)为例说明。
下面是一些关键字说明
INITIAL:
specifiesthesizeinbytesoftheobject'sfirstextent.Oracleallocatesspaceforthisextentwhenyoucreatetheobject.YoucanalsouseKorMtospecifythissizeinkilobytesormegabytes.Thedefaultvalueisthesizeof5datablocks.Theminimumvalueisthesizeof2datablocks.Themaximumvaluevariesdependingonyouroperatingsystem.Oracleroundsvaluesuptothenextmultipleofthedatablocksize.
NEXT:
specifiesthesizeinbytesofthenextextenttobeallocatedtotheobject.YoucanalsouseKorMtospecifythesizeinkilobytesormegabytes.Thedefaultvalueisthesizeof5datablocks.Theminimumvalueisthesizeof1datablock.Themaximumvaluevariesdependingonyouroperatingsystem.Oracleroundsvaluesuptothenextmultipleofthedatablocksize.
MINEXTENTS:
specifiesthetotalnumberofextentsallocatedwhenthesegmentiscreated.Thisparameterallowsyoutoallocatealargeamountofspacewhenyoucreateanobject,evenifthespaceavailableisnotcontiguous.Thedefaultandminimumvalueis1,meaningthatOracleonlyallocatestheinitialextent,exceptforrollbacksegmentsforwhichthedefaultandminimumvalueis2.Themaximumvaluevariesdependingonyouroperatingsystem.
IftheMINEXTENTSvalueisgreaterthan1,thenOraclecalculatesthesizeofsubsequentextentsbasedonthevaluesoftheINITIAL,NEXT,andPCTINCREASEparameters.
MAXEXTENTS:
specifiesthetotalnumberofextents,includingthefirst,thatOraclecanallocatefort