问题:
1、解释冷备份和热备份的不同点及各自的优点?
2、解释归档和非归档模式之间的不同和它们各自的优缺点?
****************************************************************************************************************************************************************************************
解答:
1、解释冷备份和热备份的不同点及各自优点?
答:
1、不同点:
热备份:针对归档模式的数据库,在数据库处于工作状态时进行备份;
冷备份:适用于所有模式的数据库,在数据库关闭后进行备份。
2、各自优点:
热备份:当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点;
冷备份:它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,不必将归档日志写入硬盘,数据库性能会比归档模式稍好。
记忆方式:热备份>归档模式>工作时进行>恢复任意时间点
冷备份>所有模式>关闭时进行>少许提高性能
2、解释归档和非归档模式之间的不同和它们各自的优缺点?
答:归档模式是指可以备份所有的数据库transactions并恢复到任意一个时间点。
非归档模式则相反,不能恢复到任意一个时间点。
但是非归档模式可以带来数据库性能上的少许提高。
记忆方式:归档模式>热备份>恢复任意时间点>性能少许下降
非归档模式>冷备份>恢复完全备份>性能少许提高
不积跬步无以至千里
问题:
1、如何根据初始化文件pfile转换成spfile文件?
2、数据库正常启动所经历的状态有哪几种?
解答:
1、如何根据初始化文件pfile转换成spfile文件?
答:
使用命令:SQL>create spfile from pfile。
解析:
(1)、概述:
Oracle从9i开始,参数初始化文件新增为两种,即文本参数文件和服务器参数文件。它们在数据库实例启动时候加载,决定了数据库的物理结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重要文件。
(2)简述pfile和spfile
它们都是必须的参数文件。
pfile:初始化参数文件,为ASCII文本文件,可以直接编辑,对这类文件的修改是需要手工进行的,并且修改后,重启Oracle实例才会生效。
spfile:服务器参数文件,二进制文件,不可以直接编辑。
(3)、查看系统是以pfile还是spfile启动
命令:SQL>select isspecified,count(*) from v$spparameter group by isspecified;
如果isspecified里有true,表明用spfile进行了指定配置,如果全为false,则表明用pfile启动。
(4)、使用spfile的好处
spfile改正了pfile管理混乱的问题,在多结点的环境里,pfile会有多个image启动时需要跟踪最新的image,这是个烦琐的过程。用spfile以后,所有参数改变都写到spfile里面参数配置有个权威的来源。
(5)、查看spfile location
命令SQL> show parameter spfile
(6)、互相创建
spfile和pfile是可以相互创建的,命令如下:
SQL>create spfile from pfile;
SQL>create pfile from spfile.
当数据库第一次被创建的时候,系统会收集到创建者设置的各个参数,生成pfile。之后,在第一次启动数据库时,会依靠这个pfile创建spfile,此时将不再需要pfile文件。而当下次启动时会使用pfile文件。如果数据库不出现故障,pfile文件将一直使用。然而若spfile被损坏或需重新创建spfile文件,这时候就可以使用pfile文件来建立新的spfile文件。
2、数据库正常启动所经历的状态有哪几种?
答:
数据库实例启动:NOMOUNT状态;
数据库装载:MOUNTED状态;
数据库打开:OPEN状态。
解析:
(1)、举例简述:
对于数据库的启动介绍前先举一个简单例子,如果我们打算开一家公司,一般会先有初始化的规划,把初始化的规划思路整理成书面材料文件,然后招聘有经验的相关部门的管理人员组成一个团队,其次是招聘每个部门里的基层员工,这样一个简单的公司体系就形成了。
启动oracle数据库如同上面的例子一样,数据库启动时,先要找到初始化文件(spfile/pfile),这时数据库处在nomount状态,这相当于创办公司的初始阶段;其次根据初始文件找到控制文件,这时数据库处于mount状态,这相当于创业时最初组建的管理团队。在之后会根据控制文件找到数据文件、重做日志文件,从而处在open状态,这时用户可以访问数据库了。如同一个公司的体系初步建设起来了。
(2)、实验验证:
输入第1行命令:sqlplus/nolog;
说明:
启动SQLPLUS但不进行登录,只是进入sqlplus软件,相当于打开一个登录窗口,用户名、密码是接下来才输入的,这样输入能够让下面的输入不显示密码起到安全的作用。
输入第2行命令:conn / as sysdba;
说明:
oracle在登录时,有三种身份认证方式:操作系统身份认证、密码文件认证、数据库认证。而conn /as sysdba是属于操作系统认证。你当前电脑开机时登录的用户,也就是进入操作系统的用户,例如Win xp系统下是Administrator,它在你电脑的ORA_DBA组中。可以在“我的电脑”单击右键,找到“管理”,选择“本地用户和组”,发现有一个组叫“ORA_DBA”,双击它,看到成员列表中有“Administrator”。也就是在conn /as sysdba,oracle会进行操作系统验证,发现你当前登录的用户就属于Administrator组,因此才可以登录成功。你可以把ORA_DBA组中的“Administrator”用户删除,再conn /as sysdba,就发现进不去了。
输入第3行命令:SQL> shutdown; ------------shutdown
输入第4行命令:SQL> select status from v$instance;
说明:
查询当前实例的状态,v$instance是个视图。这个状态指明的是数据库在用startup启动以后的所处的状态。
输入第5行命令:SQL> startup nomount; ------------started
输入第6行命令:SQL> select status from v$instance;
输入第7行命令:SQL> alter database mount; ------------mounted
输入第8行命令:SQL> select status from v$instance;
输入第9行命令:SQL> alter database open; ------------open
输入第10行命令:SQL> select status from v$instance;
输入第11行命令:SQL> shutdown;
问题:
1、说出两种相关约束?
2、解释$ORACLE_HOME和$ORACLE_BASE的区别?
解答:
1、答:主键和外键。
2、答:$ORACLE_HOME:oracle的产品目录;
$ORACLE_BASE:oracle的根目录。
问题:
1、创建用户时,需要授予新用户什么权限方能使其连上数据库?
2、备份如何分类?
解答:
1、答:CONNECT权限。
2、答:
第一种:逻辑备份和物理备份。
逻辑备份可以使用EXP/IMP;
物理备份可以使用RMAN。
第二种:热备份和冷备份。
热备份为数据库正常访问的情况下备份数据库,RMAN备份也为热备份。
冷备份为脱机备份,关闭数据库然后备份数据库的所有文件。
问题:
1、用于网络连接的两个文件是什么?
2、数据库的重做日志(Redo Logs)的作用?
解答:
1、答:TNSNAMES.ORA和SQLNET.ORA;
2、答:Redo Logs是用于存放数据库数据改动状况的物理和逻辑结构,可以用以修复数据库。
1、临时表空间和永久表空间的区别是什么?
2、解释Function、Procedure、Package的区别?
问题:
1、答:
临时表空间(Temporary Tablespace):用于临时对象;
永久表空间(Permanent Tablespace):用于存储存在的对象,如表、回滚段等。
2、答:
Function、Procedure是PL/SQL代码的集合,一般为了完成一个任务;
Procedure不需要返回任何值而Function将返回一个值。
Package是为了完成一个商业功能的一组Function和Procedure的集合。
问题:
1、简述数据库的data block、extent、segement的区别?
2、简述为何要使用索引?
问题:
1、答:
data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent。一个数据库对象拥有的所有extents被称为该对象的segment。
2、答:
可以快速访问表中的data block,即能够加快访问数据的速度。
问题:
1、简述tablespace和datafile的关系?
2、什么视图用来判断表空间的剩余空间?
问题:
1、答:
一个tablespace可以有一个或多个datafile;
每个datafile只能在一个tablespace内;
table中的数据通过hash算法分布在tablespace中的各个datafile中;
tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。
2、答:
DBA_FREE_SPACE。
问题:
1、比较truncate和delete命令的区别?
2、如果必须利用备份恢复数据库,但此时没有控制文件,如何应对?
问题:
1、答:
两者都可以用来删除表中所有的记录。
truncate是DDL操作,它移动HWK,不需要rollback segment。
delete是DML操作,需要rollback segment且花费较长的时间。
2、答:
重建控制文件,用带backup control file子句的recover命令恢复数据库。
1、oracle数据库的约束条件有哪些?
2、表的主键和唯一约束很像,有哪些区别?
问题:
1、 答:
有5个约束条件:主键、外键、非空、唯一、条件。
解释:
非空:这个列的值不能为空(NOT NULL);
唯一:这个列的值在表中是唯一存在的,不能重复,但可以为空值(NULL);
条件:可以对列的值设定在某个条件范围之内,比如,人的年龄就不能为负数,可以设置这个列的条件为大于0而小于200;
主键:primary,主键是关系数据库表中的某一行或者某几列的集合。它能够唯一标识数据库表中的一行。主键不能包含空值(NULL);
外键:foreign,外键是关系数据库表中的一列或者某几列的组合。它的值或与另外一个表的某一列或者某几列相匹配,这一列是另一个表的主键。
2、 答:
表的主键是列的值为表中的唯一标识,不能为空值(NULL),而表的唯一约束是列的值在表中唯一存在,可以为空值(NULL)。1、日志的作用是什么?
2、RMAN是什么?
问题:
1、
答:
记录数据库事务,最大限度地保证数据的一致性与安全性。
重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件。
归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
2、
答:
RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复数据库,RMAN可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。
问题:
1、RMAN的用户接口有几种?
2、描述RMAN的特点?
问题:
1、答:
RMAN有三种不同的用户接口:COMMAND LINE方式、GUI方式、API方式。
解释:
GUI方式集成在OEM中的备份管理器;
API方式用于集成到第三方的备份软件中。
2、答:
RMAN的特点如下:
1 | 功能类似于物理备份,但比物理备份强大N倍。 |
2 | 可以压缩空快。 |
3 | 可以在块水平上实现增量。 |
4 | 可以把备份的输出打包成备份集,也可以按固定大小分割备份集。 |
5 | 备份与恢复的过程可以自动管理。 |
6 | 可以使用脚本(存在于Recovery Catalog中)。 |
7 | 可以做坏块监测。 |
1、下列不属于ORACLE的逻辑结构的是()
A、区
B、段
C、数据文件
D、表空间
答案:C
2、下面哪个用户不是ORACLE缺省安装后就存在的用户( )
A、SYSDBA
B、SYSTEM
C、SCOTT
D、SYS
答案:A
3、下面哪个操作会导致用户连接到ORACLE数据库,但不能创建表( )
A、授予了CONNECT的角色,但没有授予RESOURCE的角色
B、没有授予用户系统管理员的角色
C、数据库实例没有启动
D、数据库监听没有启动
答案:A
4、( )函数通常用来计算累计排名,移动平均数和报表聚合。
A、汇总
B、分析
C、分组
D、单行
答案:B
5、带有( )字句的SELECT语句可以在表的一行或多行放置排他锁。
A、FOR INSERT
B、FOR UPDATE
C、FOR DELETE
D、FOR REFRESH
答案:B
6、在Oracle中,你以SYSDBA登录,CUSTOMER表位于Mary用户方案中,下面哪条语句为数据库中的所有用户创建CUSTOMER表的同义词( )。
A、CREATE PUBLIC SYNONYM cust ON mary.customer;
B、CREATE PUBLIC SYNONYM cust FOR mary.customer;
C、CREATE SYNONYM cust ON mary.customer FOR PUBLIC;
D、不能创建CUSTOMER的公用同义词。
答案:B
7、 在Oracle中,当FETCH语句从游标获得数据时,下面叙述正确的是( )。
A、游标打开
B、游标关闭
C、当前记录的数据加载到变量中
D、创建变量保存当前记录的数据
答案:C
8、 在Oracle中,表VENDOR包含以下列:
VENDOR_ID NUMBER Primary Key
NAME VARCHAR2(30)
LOCATION_ID NUMBER
ORDER_DT DATE
ORDER_AMOUNT NUMBER(8,2)
下面对表VENDOR运用分组函数的子句合法的是( )。
A、FROM MAX(order_dt)
B、SELECT SUM(order_dt)
C、SELECT SUM(order_amount)
D、WHERE MAX(order_dt) = order_d
答案:C
9、 在Oracle中,表EMP包含以下列:
……
NAME VARCHAR2(20)
ADDR VARCHAR2(60)
……
要以NAME’s address is ADDR格式返回数据,以下SQL语句正确的是( )。 + 的两边做To_number()
A、SELECT NAME + ’’’s address is ‘ + ADDR FROM EMP;
B、SELECT NAME || ’’’s address is ‘ || ADDR FROM EMP;
C、SELECT NAME + ’/’s address is ‘ + ADDR FROM EMP;
D、SELECT NAME || ’/’s address is ‘ || ADDR FROM EMP;
答案:B
10、 在Oracle中,以下不属于集合操作符的是( )。
A、UNION
B、SUM
C、MINUS
D、INTERSECT
答案:B
11、 在Oracle中,表分区方式( )建议分区数是2的幂(2、4、8等),以获得最平均的数据发布。
A、范围分区
B、列表分区
C、散列分区
D、复合分区
答案:C
12、 在Oracle中,关于锁,下列描述不正确的是( )。
A、锁用于在用户之间控制对数据的并发访问
B、可以将锁归类为行级锁和表级锁
C、insert、update、delete语句自动获得行级锁
D、同一时间只能有一个用户锁定一个特定的表
答案:D
13、在Oracle中,序列venseq使用下面的语句创建:
CREATE SEQUENCE venseq INCREMENT BY 1 START WITH 10
MAXVALUE 100 MINVALUE 10 CYCLE CACHE 5;
下面对序列venseq修改的语句,错误的是( )。
A、ALTER SEQUENCE venseq START WITH 1;
B、ALTER SEQUENCE venseq MAXVALUE 90;
C、ALTER SEQUENCE venseq NOMINVALUE;
D、ALTER SEQUENCE venseq NOCACHE;
答案:A
14、在Oracle中,使用以下语句创建视图:
CREATE OR REPLACE VIEW pen_view
AS SELECT * FROM order_master
WHERE ostatus = ‘p’ WITH CHECK OPTION CONSTRAINT penv;
当用户试图执行以下语句: UPDATE pen_view SET ostatus = ‘d’ WHERE ostatus=’p’; 下列描述正确的是( )。
A、Oracle将ostatus修改为d,不提示任何错误
B、Oracle不执行更新操作,并返回错误信息
C、Oracle将ostatus修改为d,同时返回错误信息
D、Oracle不执行更新操作,也不提示任何错误
答案:B
15、在Oracle中,在以下情形建立位图索引可以获得较好的性能( )。
A、在列值唯一的列上建立
B、在列值相差很小的列上建立
C、在列值频繁重复的列上建立
D、在用于保存位图的列上建立
答案:C
16、在Oracle中,通过命令( )可以释放锁。
A、INSERT
B、DELETE
C、ROLLBACK
D、UNLOCK
答案:C
17、在Oracle中,下面关于簇的描述不正确的是( )。
A、簇是一组表,这些表拥有公共列,并且经常一起使用
B、与每个表及其索引单独存储相比,簇能够提高INSERT语句的性能
C、由于簇表中的所有行都使用相同的列作为公共主键,因此这些列仅为所有表存储一次,从而节省了存储空间
D、经常更新的列不应选作簇键
答案:B
18、在Oracle中,( )操作符允许引用现有的行对象。
A、CAST
B、REF
C、MULTISET
D、MAP
答案:B
19、在Oracle中,关于PL/SQL下列描述正确的是( )。
A、PL/SQL代表Power Language/SQL
B、PL/SQL不支持面向对象编程
C、PL/SQL块包括声明部分、可执行部分和异常处理部分
D、PL/SQL提供的四种内置数据类型是character,integer,float,boolean
答案:C
20、在Oracle中,阅读下列PL/SQL块:
DECLARE
v_lower NUMBER:=2;
v_upper NUMBER:=100;
v_count NUMBER:=1;
BEGIN
I = 2; I <= 2; i++
FOR i IN v_lower..v_lowerLOOP
INSERT INTO test(results)
VALUES (v_count);
v_count := v_count +1;
ENDLOOP;
END;
请问FOR LOOP循环体执行了( )次。
A、1
B、2
C、98
D、100
E、235:
答案:A
21、在Oracle中,关于子程序的描述不正确的是( )。
A、子程序是已命名的PL/SQL块,可带参数并可在需要时随时调用
B、子程序可以具有声明部分、可执行部分和异常处理部分
C、子程序参数的模式只有IN和OUT两种模式
D、子程序可分为过程和函数两种类型
答案:C
22、在Oracle中,关于触发器的描述正确的是( )。
A、触发器可以删除,但不能禁用
B、触发器只能用于表
C、触发器可以分为行级和语句级两种
D、触发器是一个对关联表发出insert、update、delete或select … for update语句时触发的存储过程
答案:D
23、在Oracle中,你需要创建索引提高薪水审查的性能,该审查要对员工薪水提高12个百分点后进行分析处理,下面哪个create index命令能解决此问题( )。
A、CREATE INDEX my_idx_1 ON employee(salary*1.12);
B、CREATE UNIQUE INDEX my_idx_1 ON employee(salary);
C、CREATE BITMAP INDEX my_idx_1 ON employee(salary);
D、CREATE INDEX my_idx_1 ON employee(salary) REVERSE;
答案:A
24、在Oracle中,执行下面的语句:
SELECT ceil(-97.342),
floor(-97.342), -123.01 -124
round(-97.342),
trunc(-97.342)
FROM dual;
哪个函数的返回值不等于-97( )。
A、ceil()
B、floor()
C、round(0)
D、trunc()
答案:B
25、在Oracle中,用以下SQL命令创建了一个序列:
CREATE SEQUENCE my_seq
START WITH 394
INCREMENT BY 12
NOMINVALUE
NOMAXVALUE
NOCYCLE
NOCACHE;
用户执行包含my_seq.NEXTVAL的SQL语句三次,然后执行包含 my_seq.CURRVAL的SQL语句四次,请问序列my_seq的当前值是( )。
A、406
B、418
C、430
D、442
E、242:
答案:B
26、在Oracle中,下列哪种标量类型不能保存到数据库表中( )。
A、CHAR
B、RAW
C、DATE
D、BOOLEAN
答案:B
27、在Oracle中,不属于游标属性的是( )。
A、%NOTFOUND
B、%FOUND
C、%ISCLOSE
D、%ISOPEN
答案:C
28、在Oracle中,用下列语句定义了一个过程:
CREATE OR REPLACE PROCEDURE test(a IN VARCHAR2,
b IN OUT NUMBER,
c OUT VARCHAR2) IS
BEGIN
……
END;
/
假定使用的变量都已定义,下面对过程test的调用语法正确的是( )。
A、test(‘String1’,50,v_str2)
B、test(v_str1,v_num1,’String2’)
C、test(‘String1’,v_num1,v_str2)
D、test(v_str1,20,v_str2)
答案:C
29、在Oracle中,关于程序包的描述不正确的是( )。
A、程序包是一种数据库对象,它是对相关PL/SQL类型、子程序、游标、异常、变量和常量的封装
B、程序包中私有对象是通过PRIVATE关键字来标识的 程序包体可以包括没有在程序包说明中列出的对象,这些是私有对象,程序包的用户不能使用
C、PL/SQL允许两个或多个打包的子程序具有同一名称,只要子程序接受的参数数据类型不同
D、程序包具有模块化、信息隐藏、新增功能及性能更佳等优点
答案:B
30、在Oracle中,用户( )拥有所有内置的程序包。
A、SYS
B、SYSTEM
C、PUBLIC
D、DEFAULT
答案:A
31、在Oracle中,关于触发器的描述正确的是( )。
A、触发器可以删除,但不能禁用
B、触发器只能用于表
C、触发器可以分为行级和语句级
D、触发器使一个对关联表发出select、insert、update或delete语句时触发的存储过程
答案:D
32、在Oracle中,事务中使用下列SQL语句不会引起锁定( )。
A、SELECT
B、INSERT
C、UPDATE
D、DELETE
答案:A
33、在Oracle中,当需要使用显式游标更新或删除游标中的行时,声明游标时指定的SELECT语句必须带有( )子句。
A、WHERE CURRENT OF
B、INTO
C、FOR UPDATE
D、ORDER BY
答案:C
34、在Windows操作系统中,Oracle的( )服务器监听并接受来自客户端应用程序的连接请求。
A、OracleHOME_NAMETNSListener
B、OracleServiceSID
C、OracleHOME_NAMEAgent
D、OracleHOME_NAMEHTTPServer
答案:A
35、在Oracle中,有一个名为seq的序列对象,以下语句能返回序列值但不会引起序列值增加的是( )。
A、select seq.ROWNUM from dual;
B、select seq.ROWIDfrom dual;
C、select seq.CURRVALfrom dual;
D、select seq.NEXTVALfrom dual;
答案:C
36、ORACLE中,执行语句:SELECT address1||’,'||address2||’,'||address2 ”Address” FROM employ;将会返回( )列。
A、0
B、1
C、2
D、3
答案:B
37、在Oracle中,INSTEAD OF触发器主要用于( )。
A、表
B、表和视图
C、基于单个表的视图
D、基于多个表的视图
答案:D
38、Oracle数据库中,下面( )可以作为有效的列名。
A、Column
B、123_NUM
C、NUM_#123
D、#NUM123
答案:C
39、在Oracle中,以下工具可以逻辑备份数据库对象或整个数据库( )。
A、SQL*Plus
B、导出实用程序
C、导入实用程序
D、SQL*Loader
答案:B
40、Oracle数据库中,通过( )访问能够以最快的方式访问表中的一行。
A、主键
B、Rowid
C、唯一索引
D、整表扫描
答案:B
41、在Oracle中,使用下列的语句产生序列: CREATE SEQUENCE id; Oracle服务器会预开辟内存并维持的序列值有( )个。
A、0
B、10
C、20
D、100
答案:C
42、Oracle数据库中,以下( )命令可以删除整个表中的数据,并且无法回滚。
A、drop
B、delete
C、truncate
D、cascade
答案:C
43、Oralce数据库中,以下( )函数可以针对任意数据类型进行操作。
A、TO_CHAR
B、LOWER
C、MAX
D、CEIL
答案:A
44、在Oracle中,语句( )将ORDER_DATE日期值’2000年3月18日’显示为‘2000年1月1日’。
A、SELECT ROUND(order_date,’day’)FROM inventory
B、SELECT ROUND(order_date,’YEAR’)FROM inventory
C、SELECT ROUND(order_date,’month’)FROM inventory
D、SELECT ROUND(to_char(order_date,’yyyy’))FROM inventory
答案:B
45、在Oracle中,以下是STUDENTS表的结构: SID NUMBER NOT NULL,Primary Key SNAME VARCHAR2(30) COURSE_ID VARCHAR2(10) NOT NULL MARKS NUMBER"sql hljs">SID NUMBER NOT NULL,Primary Key SNAME VARCHAR2(30) COURSE_ID VARCHAR2(10) NOT NULL MARKS NUMBER 你需要查询参加了课程ID为C10的考试,并且分数排在前10名的学生,以下( )语句能够实现此功能。
A、SELECT SID,marks,ROWNUM “Rank”
FORM students
WHERE ROWNUM<=10 AND course_id=’C10′
ORDER BY marks DESC;
B、SELECT SID,marks,ROWNUM”Rank”
FORM students
WHERE ROWNUM<=10 AND course_id=’C10′
ORDER BY marks;
C、SELECT SID,marks,ROWNUM”Rank”
FORM (SELECT SID ,marks
FORM students
WHERE ROWNUM<=10 AND course_id=’C10′
ORDER BY marks DESC;
D、SELECT SID,marks,ROWNUM”Rank”
FORM (SELECT SID ,marks
FORM students
WHERE course_id=’C10′ ORDER BY marks DESC)
WHERE ROWNUM<=10;
答案:D
46、在Oracle中,用于PL/SQL程序输出调试信息的内置程序包是
A、DBMS_STANDARD
B、DBMS_ALERT
C、DBMS_LOB
D、DBMS_OUTPUT
答案:D
47、在Oracle中,用下列语句定义了一个过程:
CREATE PROCEDURE proc(value1 IN VARCHAR2,value2 OUT NUMBER,value3 IN OUT VARCHAR2)
IS
BEGIN
……
END;
假定使用的变量都已定义,下面对过程proc的调用语法正确的是( )。
A、proc(‘tt’,10,v3)
B、proc(‘tt’,v2,v3)
C、proc(v1,v2,v3)
D、proc(‘tt’,10,’dd’)
答案:B
48、在Oracle中,使用以下语句创建视图:
CREATE OR REPLACE VIEW MyView
AS SELECT * FROM orders
Where status=’p';
假定orders表中包含10条status=’p'的记录,当用户试图执行以下语句: UPDATE MyView SET status=’o’ WHERE status=’p'; 下列描述正确的是()。
A、Oracle不执行更新操作,并返回错误信息
B、Oracle成功执行更新操作,再次查看视图时返回0行记录
C、Oracle成功执行更新操作,再次查看视图时返回10行记录
D、Oracle执行更新操作,但提示错误信息
答案:C
49、在Oracle中,下列( )语句不能用于控制游标。
A、Open
B、Create
C、Fetch
D、Close
答案:B
50、在Oracle中,在执行SQL语句时,你不小心使用Update命令将所有的ID值设置成了11111,那么使用( )命令可以取消这一操作。
A、EXIT
B、COMMIT
C、ROLLBACK
D、UNDO
答案:C
51、在Oracle中,数据库中的触发器是一个对关联表发出insert、update或( )语句时触发的存储过程。
A、delete
B、drop
C、create
D、truncate
答案:A
52、在Oracle 中,使用了如下的语句创建用户TOM,则对于该用户而言,以下说法错误的是( )。CREATE USER TOM IDENTIFIED BY TOMSYS
A、该用户的口令为TOMSYS
B、TOM默认为表空间为SYSTEM
C、TOM 的临时表空间为TEMP
D、使ORANT UPDATE 命令可以修改TOM的口令
答案:D
53、在Oracle中,下述( )命令会使挂起的事务完成。。
A、COMMIT
B、DELETE
C、UPDATE
D、SELECT
E、INSERT
答案:A
54、游标变量的类型是( )
A、隐式游标
B、显示游标
C、REF游标
D、循环游标
答案:B
55、在非归档方式下操作的数据库禁用了( )。
A、归档日志。
B、联机日志。
C、日志写入程序。
D、日志文件。
答案:A
56、由于软硬件问题导致的读写数据库文件失败,属于( )故障。
A、实例
B、语句
C、用户进程
D、介质
答案:D
57、( )参数用于确定是否要导入整个导出文件
A、constranints
B、tables
C、full
D、file
答案:C
58、在oracle程序中处理语句时发生的逻辑错误导致( )故障
A、实例
B、介质
C、语句
D、用户进程
答案:C
59、( )方式的导出会从指定的表中导出所有的数据。
A、分区
B、表
C、全部数据库
D、表空间
答案:B
60、使用( )命令可查看在创建触发器时发生的编译错误
A、View errors
B、Show errors
C、Display errors
D、Check errors
答案:B
61、( )包用于显示pl/sql块和存储过程中的调试信息
A、Dbms_output。
B、Dbms_standadr。
C、Dbms_Input。
D、Dbms_session。
答案:A
62、( )触发器允许触发操作的语句访问行的列值
A、行级 :old :new
B、语句级
C、模式
D、数据库级
答案:A
63、要审计用户执行的create,drop,和alter等ddl语句,应创建( )触发器
A、行级
B、语句级
C、Instead of
D、模式
E、数据库
答案:E
64、Oracle内置程序包由( )用户所有
A、sys
B、system
C、scott
D、Pub lic
答案:A
65、( )程序包用于读写操作系统文本文件
A、Dbms_output
B、Dbms_lob (图片,电影)
C、Dbms_random
D、Utl_file
答案:D
66、子程序的( )模式参数可以在调用子程序时指定一个常量
A、in
B、out
C、In out
D、inout
答案:A
67、下面关于主事务处理和自主事务处理的说法错误的是( )
A、自主事务处理结果的变化不倚赖于主事务处理的状态
B、自主事务处理提交或回退时,不影响主事务处理的结果
C、自主事务处理提交,对主事务处理是不可见的
D、自主事务处理还可以启动其他自主事务处理
答案:D
68、 在Oracle中,下面关于函数描述正确的是( )。
A、SYSDATE函数返回Oracle服务器的日期和时间
B、ROUND数字函数按四舍五入原则返回指定十进制数最靠近的整数
C、ADD_MONTHS日期函数返回指定两个月份天数的和
D、SUBSTR函数从字符串指定的位置返回指定长度的子串
答案:AD
69、在Oracle中,当从SQL表达式调用函数时,下列描述不正确的是( )。
A、从SELECT语句调用的函数均不能修改数据库表
B、函数可以带有IN、OUT等模式的参数
C、函数的返回值必须是数据库类型,不得使用PL/SQL类型
D、形式参数必须使用数据库类型,不得使用PL/SQL类型
答案:AC
70、在Oracle中,在SQL提示符下调用PL/SQL过程的方法是()。
A、使用CALL语句
B、使用EXECUTE语句
C、使用RUN语句
D、直接使用过程名
答案:ABC
71、在Oracle中有表”cd”,它包含属性”cdcode”,”category”和”cdname”,要查询category取值为”CLASSIC”或”ROCK”的行,应采用语句( )。
A、SELECT * FROM cd WHERE category IN (‘CLASEIC’,'ROCK’);
B、SELECT * FROM cd WHERE category BETWEEN ‘CLASSIC’ AND ‘ROCK’;
C、SELECT * FROM cd WHERE category=’CLASSIC’ AND category=’ROCK’;
D、SELECT * FROM cd WHERE category=’CLASSIC’ OR category=’ROCK’;
答案:AD
72、在Oracle中,通过命令( )可以释放锁。(选择两项)
A、INSERT
B、DELETE
C、ROLLBACK
D、COMMIT
答案:CD
73、执行特定任务的子程序是( )
A、函数
B、过程。
C、程序包
D、游标。
答案:AB
答案:
select * from emp;
使用*的缺点有:查询出了不必要的列;效率上不如直接指定列名。
2. 查询职位(JOB)为'PRESIDENT'的员工的工资
答案:
select * from emp where job = 'PRESIDENT';
3. 查询佣金(COMM)为0或为NULL的员工信息
答案:
select * from emp where comm = 0 or comm is null;
4. 查询入职日期在1981-5-1 到1981-12-31之间的所有员工信息
答案:
select * from emp where hiredate
between to_date('1981-5-1','yyyy-mm-dd') and to_date('1981-12-31','yyyy-mm-dd');
5. 查询所有名字长度为4 的员工的员工编号,姓名
答案:
select * from emp where length(ename) = 4;
6. 显示10 号部门的所有经理('MANAGER')和20号部门的所有职员('CLERK')的详细信息
答案:
select * from emp where deptno = 10 and job = 'MANAGER' or deptno = 20 and job='CLERK';
7. 显示姓名中没有'L'字的员工的详细信息或含有'SM'字的员工信息
答案:
select * from emp where ename not like '%L%' or ename like '%SM%';
8. 显示各个部门经理('MANAGER')的工资
答案:
select sal from emp where job = 'MANAGER';
9. 显示佣金(COMM)收入比工资(SAL)高的员工的详细信息
答案:
select * from emp where comm > sal;
10. 把hiredate列看做是员工的生日,求本月过生日的员工
答案:
select * from emp where to_char(hiredate, 'mm') = to_char(sysdate , 'mm');
11. 把hiredate列看做是员工的生日,求下月过生日的员工
答案:
select * from emp where to_char(hiredate, 'mm') = to_char(add_months(sysdate,1) ,'mm');
12. 求1982年入职的员工
答案:
select * from emp where to_char(hiredate,'yyyy') = '1982';
13. 求1981年下半年入职的员工
答案:
select * from emp where hiredate
between to_date('1981-7-1','yyyy-mm-dd') and to_date('1982-1-1','yyyy-mm-dd') - 1;
14. 求1981年各个月入职的的员工个数
答案:
select count(*), to_char(trunc(hiredate,'month'),'yyyy-mm')
from emp where to_char(hiredate,'yyyy')='1981'
group by trunc(hiredate,'month')
order by trunc(hiredate,'month');
15. 查询各个部门的平均工资
答案:
select deptno,avg(sal) from emp group by deptno;
16. 显示各种职位的最低工资
答案:
select job,min(sal) from emp group by job;
17. 按照入职日期由新到旧排列员工信息
答案:
select * from emp order by hiredate desc;
18. 查询员工的基本信息,附加其上级的姓名
答案:
select e.*, e2.ename from emp e, emp e2 where e.mgr = e2.empno;
19. 显示工资比'ALLEN'高的所有员工的姓名和工资
答案:
select * from emp where sal > (select sal from emp where ename='ALLEN');
20. 显示与'SCOTT'从事相同工作的员工的详细信息
答案:
select * from emp where job = (select * from emp where ename='SCOTT');
21. 显示销售部('SALES')员工的姓名
答案:
select ename from emp e, dept d where e.deptno = d.deptno and d.dname='SALES';
22. 显示与30号部门'MARTIN'员工工资相同的员工的姓名和工资
答案:
select ename, sal from emp
where sal = (select sal from emp where deptno=30 and ename='MARTIN');
23. 查询所有工资高于平均工资(平均工资包括所有员工)的销售人员('SALESMAN')
答案:
select * from emp where job='SALESMAN' and sal > (select avg(sal) from emp);
24. 显示所有职员的姓名及其所在部门的名称和工资
答案:
select ename, job, dname from emp e, dept d where e.deptno = d.deptno;
25. 查询在研发部('RESEARCH')工作员工的编号,姓名,工作部门,工作所在地
答案:
select empno,ename,dname,loc from emp e, dept d
where e.deptno = d.deptno and danme='RESEARCH';
26. 查询各个部门的名称和员工人数
答案:
select * from (select count(*) c, deptno from emp group by deptno) e
inner join dept d on e.deptno = d.deptno;
27. 查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职位
答案:
select job, count(*) from emp where sal > (select avg(sal) from emp) group by job;
28. 查询工资相同的员工的工资和姓名
答案:
select * from emp e where (select count(*) from emp where sal = e.sal group by sal)> 1;
29. 查询工资最高的3名员工信息
答案:
select * from (select * from emp order by sal desc) where rownum <= 3;
30. 按工资进行排名,排名从1开始,工资相同排名相同(如果两人并列第1则没有第2名,从第三名继续排)
答案:
select e.*, (select count(*) from emp where sal > e.sal)+1 rank from emp e order byrank;
31. 求入职日期相同的(年月日相同)的员工
答案:
select * from emp e where (select count(*) from emp where e.hiredate=hiredate)>1;
32. 查询每个部门的最高工资
答案:
select deptno, max(sal) maxsal from emp group by deptno order by deptno;
33. 查询每个部门,每种职位的最高工资
答案:
select deptno, job, max(sal) from emp group by deptno, job order by deptno, job;
34. 查询每个员工的信息及工资级别
答案:
select e.*, sg.grade from emp e, salgrade sg where sal between losal and hisal;
35. 查询工资最高的第6-10名员工
答案:
select * from (
select e.*,rownum rn from
(select * from emp order by sal desc) e
where rownum <=10)
where rn > 5;
36. 查询各部门工资最高的员工信息
答案:
select * from emp e where e.sal = (select max(sal) from emp where (deptno =e.deptno));
37. 查询每个部门工资最高的前2名员工
答案:
select * from emp e where
(select count(*) from emp where sal > e.sal and e.deptno = deptno) < 2
order by deptno, sal desc;
38. 查询出有3个以上下属的员工信息
答案:
select * from emp e where
(select count(*) from emp where e.empno = mgr) > 2;
39. 查询所有大于本部门平均工资的员工信息
答案:
select * from emp e where sal >
(select avg(sal) from emp where (deptno = e.deptno))
order by deptno;
40. 查询平均工资最高的部门信息
答案:
select d.*, avgsal from dept d, (select avg(sal) avgsal, deptno from emp group bydeptno) se
where avgsal = (select max(avg(sal)) from emp group by deptno) and d.deptno =se.deptno;
41. 查询大于各部门总工资的平均值的部门信息
答案:
select d.*,sumsal from dept d, (select sum(sal) sumsal, deptno from emp group bydeptno) se
where sumsal >(select avg(sum(sal)) from emp group by deptno) and se.deptno =d.deptno;
42. 查询大于各部门总工资的平均值的部门下的员工信息
答案:
select e.*,sumsal from emp e, (select sum(sal) sumsal, deptno from emp group bydeptno) se
where sumsal >(select avg(sum(sal)) from emp group by deptno) and se.deptno =e.deptno;
43. 查询没有员工的部门信息
答案:
select d.* from dept d left join emp e on (e.deptno = d.deptno) where empno is null;
44. 查询当前月有多少天
答案:
select trunc(add_months(sysdate,1),'month') - trunc(sysdate,'month') from dual;
45. 列出最低薪金大于1500的各种工作及此从事此工作的全部雇员人数
答案:
SELECT job,COUNT(empno)
FROM emp
GROUP BY job HAVING MIN(sal)>1500 ;
46. 列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级
答案:
SELECT e.empno,e.ename,d.dname,m.ename,s.grade
FROM emp e,dept d,emp m,salgrade s
WHERE sal>(SELECT AVG(sal) FROM emp) AND e.mgr=m.empno AND d.deptno=e.deptno(+)AND e.sal BETWEEN s.losal AND s.hisal ;
47. 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称
答案:
SELECT e.ename,e.sal,d.dname FROM emp e,dept d
WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30) AND e.deptno=d.deptno;
48. 列出所有部门的详细信息和部门人数
答案:
SELECT d.dname,d.loc,dt.count
FROM dept d,(SELECT deptno,COUNT(*) count FROM emp GROUP BY deptno) dt
WHERE d.deptno=dt.deptno ;
49. 显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列
答案:
SELECT job,SUM(sal) sum
FROM emp
WHERE job<>'SALESMAN'
GROUP BY job HAVING sum>5000
ORDER BY sum ;
50. 客户表a(id name address) 登陆流水表b(id time) 购物流水表c(id time productid productnum)
1.求每个客户的最新登陆时间time,姓名name,客户id?
答案:
select a.id,a.name,d.time as time
from a left join (select id,max(time) as time from b group by id) d
on a.id =d.id ;
2.查最新登陆并且已经购买商品的客户id,name,登陆的时间time(一条sql语句)
答案:
select a.id,a.name,d.time as time
from a,(select id,max(time) as time from b group by id) d
where a.id =d.id
and exists (select * from c where id = a.id);
About Me
...............................................................................................................................
● 本文整理自网络
● 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新
● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/
● 本文博客园地址:http://www.cnblogs.com/lhrbest
● 本文pdf版及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/
● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/
● QQ群:230161599 微信群:私聊
● 联系我请加QQ好友(646634621),注明添加缘由
● 于 2017-07-01 09:00 ~ 2017-07-31 22:00 在魔都完成
● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
...............................................................................................................................
拿起手机使用微信客户端扫描下边的左边图片来关注小麦苗的微信公众号:xiaomaimiaolhr,扫描右边的二维码加入小麦苗的QQ群,学习最实用的数据库技术。