ORACLE面试测试题目

1. 解释FUNCTION,PROCEDURE和PACKAGE区别
答:function 和procedure是PL/SQL代码的集合,通常为了完成一个任务。procedure 不需要返回任何值而function将返回一个值在另一方面,Package是为了完成一个商业功能的一组function和procedure的集合。

2. 取某个序列的当前值的PL/SQL语句怎么写?
答:SELECT 序列名.CURRVAL FROM DUAL;

3. 说明ORACLE数据库实例与ORACLE用户的关系?
答:实例可以包含多个用户,一个用户只能在一个实例下

4. 创建数据库时,自动建立的tablespace名称?
答:SYSTEM tablespace

5. 创建用户时,需要赋予新用户什么权限才能使它连上数据库?
答:CONNECT

6. IMPORT和SQL*LOADER这2个工具的不同点?
答:这两个ORACLE工具都是用来将数据导入数据库的。
区别是:IMPORT工具只能处理由另一个ORACLE工具EXPORT生成的数据。而SQL*LOADER可以导入不同的ASCII格式的数据源。

7.解释冷备份和热备份的不同点以及各自的优点?
答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘)

8.比较truncate和delete命令?
答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL(data defining language数据定义语言),它移动HWK,不需要rollback segment(处理事务回滚操作)而Delete是DML(data manufacturing language数据操作语言)操作,需要rollback segment(处理事务回滚操作)且花费较长时间。

9.给出数据的相关约束类型?
答:主键约束,外键约束,非空约束,唯一约束,检查约束。

10.说明索引的类型与作用?
答:索引类型上分为聚集索引,非聚集索引其作用是加快查询速度。

11.解释归档和非归档模式之间的不同和它们各自的优缺点
答:归档模式是指你可以备份所有的数据库 transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。但是非归档模式可以带来数据库性能上的少许提高。

12.解释$ORACLE_HOME和$ORACLE_BASE的区别?
答:ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录。

13.获取某个字符字段的最后3个字符的函数是什么?
答:select substr (字段,(length(字段)-3)) from 表

14.取当前系统时间点日期(不包括年月)的SQL写法是怎样的?
答:Select substr (to_char(sysdate,’YYYYMMDDh24hh:MM:SS’),5) from dual;

15.返回大于等于N的最小整数值?
答:select ceil(N) from dual;

16.将根据字符查询转换后结果,规则为:’A’转换为’男’,’B’转换为’女’,其他字符转换为’未知’,请用一个SQL语句写出。
答:select decode(字符,’A’,’男’,’B’,’女’,’未知’) from dual;

17.如何搜索出前N条记录?
答:select * from 表 where Rownum <= N;

18.如何搜索出第N~M条记录?
答:select * from 表 where Rownum <= M
Minus
select * from 表 where Rownum <= N;

19.有一个数据表(TEST),字段如下:
ID number
PARENT_ID number
NAME Varchar(20)
请使用PL/SQL来按父子层次关系查询出该表的所有数据
答:Select * from test a, test b Where a.parent_id = b.id;

20.怎样用SQL语句实现查找一列中的第N大值?
答:select * from (select * from 表 order by 列名 Desc) where Rownum <= N
Minus
select * from (select * from 表 order by 列名 Desc) where Rownum <= N-1;

分区表有什么作用?
答:可以将表中不同的字段或不同的记录存入不同的表空间,并且这些表空间可在不同的物理磁盘,
一般用于将比较大的字段如图片或文件类字段存入比较大的磁盘中.

请解释一下oracle表空间
答: 表空间是一个逻辑概念,但属于表空间的数据文件是存在于磁盘上的物理文件用户的数据存在于表中而表就存在于表空间中,一个表空间可以有多个属于自己的数据文件,但一个数据文件只能属于一个表空间

Oracle中表空间和数据文件有什么关系
答: 一个表空间可以有多个属于自己的数据文件,但一个数据文件只能属于一个表空间

请简单描述一下Oracle的体系结构
答: 主要有两大部分
1. 数据库实例,包括:系统全局区(SGA),和后台进程(数据写入进程,重做日志进程,检查点进程,用户监控进程等),实例在启动时首先到初始化参数文件中找到控制文件,再从控制文件中找到日志文件和数据文件
2. 数据库文件,包括:数据文件(.dbf)日志文件(.log)控制文件(.ctl)
其中数据文件又分 系统数据文件 用户数据文件 临时数据文件和回滚数据文件
日志文件可以有多组,一组写满换另一组,在切换时有检查点进程保证数据的完成性
控制文件是二进制文件,最大可以为64M

 

  1. 创建表空间neuspace,数据文件命名为neudata.dbf,存放在d:\data目录下,文件大小为200MB,设为自动增长,增量5MB,文件最大为500MB。(8分)

答:create tablespace neuspace datafile ‘d:\data\neudata.dbf’ size 200m auto extend on next 5m maxsize 500m;

2. 假设表空间neuspace已用尽500MB空间,现要求增加一个数据文件,存放在e:\appdata目录下,文件名为appneudata,大小为500MB,不自动增长。(5分)

答:alter tablespace neuspace add datafile ‘e:\appdata\appneudata.dbf’ size 500m;

3. 以系统管理员身份登录,创建账号tom,设置tom的默认表空间为neuspace。为tom分配connect和resource系统角色,获取基本的系统权限。然后为tom分配对用户scott的表emp的select权限和对SALARY, MGR属性的update权限。(8分)

答:create user tom identified by jack default tablespace neuspace;

Grant connect, resource to tom;

Grant select, update(salary, mgr) on scott.emp to tom;

4. 按如下要求创建表class和student。(15分)

属性

类型(长度)

默认值

约束

含义

CLASSNO 数值 (2) 主键 班级编号
CNAME 变长字符 (10) 非空 班级名称

属性

类型(长度)

默认值

约束

含义

STUNO 数值 (8) 主键 学号
SNAME 变长字符 (12) 非空 姓名
SEX 字符 (2) 性别
BIRTHDAY 日期 生日
EMAIL 变长字符 (20) 唯一 电子邮件
SCORE 数值 (5, 2) 检查 成绩
CLASSNO 数值 (2) 外键,关联到表CLASS的CLASSNO主键 班级编号

答:create table class

(classno number(2) constraint class_classno_pk primary key,

cname varchar2(10) not null);

create table student

(stuno number(8) constraint student_stuno_pk primary key,

sname varchar2(12) not null,

sex char(2) default ‘男’,

birthday date,

email varchar2(20) constraint student_email_uk unique,

score number(5,2) constraint student_score_ck check(score>=0 and score<=100),

classno number(2) constraint student_classno_fk references class(classno)

);

5. 在表student的SNAME属性上创建索引student_sname_idx(5分)

答:create index student_sname_idx on student(sname);

6. 创建序列stuseq,要求初值为20050001,增量为1,最大值为20059999。(6分)

答:create sequence stuseq increment by 1 start with 20050001 maxvalue 20059999 nocache nocycle;

7. 向表student中插入如下2行。(5分)

STUNO SNAME SEX BIRTHDAY EMAIL SCORE CLASSNO
从stuseq取值 tom 1979-2-3 14:30:25 tom@163.net 89.50 1
从stuseq取值 jerry 默认值 2

答:insert into student values(stuseq.nextval, ’tom’, ’男’, to_date(‘1979-2-3

14:30:25’, ’yyyy-mm-dd fmhh24:mi:ss’), ’tom@163.net’, 89.50, 1);

insert into student (stuno, sname, classno) values(stuseq.nextval, ’jerry’, 2);

8. 修改表student的数据,将所有一班的学生成绩加10分。(4分)

答:update student set score=score+10 where classno=1;

9. 删除表student的数据,将所有3班出生日期小于1981年5月12日的记录删除。(4分)

答:delete from student where classno=3 and birthday > ’12-5月-81’;

10. 完成以下SQL语句。(40分)

(1) 按班级升序排序,成绩降序排序,查询student表的所有记录。

答:select * from student order by classno, score desc;

(2) 查询student表中所有二班的成绩大于85.50分且出生日期大于1982-10-31日的男生的记录。

答:select * from student where classno=2 and score>85.50 and birthday < ’31-10月-82’ and sex=’男’;

(3) 查询student表中所有三班成绩为空的学生记录。

答:select * from student where classno=3 and score is null;

(4) 表student与class联合查询,要求查询所有学生的学号,姓名,成绩,班级名称。(使用oracle与SQL 99两种格式)

答:select s.stuno, s.sname, s.score, c.cname from student s, class c where s.classno=c.classno;

(5) 按班级编号分组统计每个班的人数,最高分,最低分,平均分,并按平均分降序排序。

答:select classno, count(*), max(score), min(score), avg(score) from student group by classno order by avg(score) desc;

(6) 查询一班学生记录中所有成绩高于本班学生平均分的记录。

答:select * from student where classno=1 and score > (select avg(score) from student where classno=1);

(7) 统计二班学生中所有成绩大于所有班级平均分的人数。

答:select count(*) from student where classno=2 and score > all (select avg(socre) from student group by classno);

(8) 查询平均分最高的班级编号与分数。

答:select classno, avg(score) from student group by classno having avg(score) = (select max(avg(score)) from student group by classno);

(9) 查询所有学生记录中成绩前十名的学生的学号、姓名、成绩、班级编号。

答:select stuno, sname, score, classno from (select * from student order by score desc) where rownum<=10;

(10) 创建视图stuvu,要求视图中包含student表中所有一班学生的stuno, sname, score, classno四个属性,并具有with check option限制。

答:create view stuvu

as

select stuno, sname,score,classno from student where classno=1 with check option;

 

14. 如何查看系统被锁的事务时间?
  select * from v$locked_object ;

  15. 如何以archivelog的方式运行oracle。
  init.ora
  log_archive_start = true
  RESTART DATABASE
  16. 怎么获取有哪些用户在使用数据库
  select username from v$session;

  17. 数据表中的字段最大数是多少?

  表或视图中的最大列数为 1000  

  18. 怎样查得数据库的SID ?

  select name from v$database;

  也可以直接查看 init.ora文件

  19. 如何在Oracle服务器上通过SQLPLUS查看本机IP地址 ?

  select sys_context(‘userenv’,'ip_address’) from dual;

  如果是登陆本机数据库,只能返回127.0.0.1,呵呵  

  20. unix 下怎么调整数据库的时间?

  su -root

  date -u 08010000

 

1. Oracle安裝完成后的初始口令? 

   internal/oracle
   sys/change_on_install
    system/manager
    scott/tiger
    sysman/oem_temp  

  2. ORACLE9IAS WEB CACHE的初始默认用户和密码?  

   administrator/administrator 

  3. oracle 8.0.5怎么创建数据库?  

   用orainst。如果有motif界面,可以用orainst /m 

  4. oracle 8.1.7怎么创建数据库?

   dbassist 

  5. oracle 9i 怎么创建数据库? 

   dbca  

  6. oracle中的裸设备指的是什么?  

   裸设备就是绕过文件系统直接访问的储存空间 

  7. oracle如何区分 64-bit/32bit 版本??? 

  $ sqlplus ‘/ AS SYSDBA’
  SQL*Plus: Release 9.0.1.0.0 – Production on Mon Jul 14 17:01:09 2003
  (c) Copyright 2001 Oracle Corporation. All rights reserved.
  Connected to:
  Oracle9i Enterprise Edition Release 9.0.1.0.0 – Production
  With the Partitioning option
  JServer Release 9.0.1.0.0 – Production
  SQL> select * from v$version;
  BANNER
  Oracle9i Enterprise Edition Release 9.0.1.0.0 – Production
  PL/SQL Release 9.0.1.0.0 – Production
  CORE 9.0.1.0.0 Production
  TNS for Solaris: Version 9.0.1.0.0 – Production
  NLSRTL Version 9.0.1.0.0 – Production
  SQL>  

  8. SVRMGR什么意思? 

  svrmgrl,Server Manager.

  9i下没有,已经改为用SQLPLUS了

  sqlplus /nolog
  变为归档日志型的 

  9. 请问如何分辨某个用户是从哪台机器登陆ORACLE的?

  SELECT machine , terminal FROM V$SESSION;  

  10. 用什么语句查询字段呢? 

  desc table_name 可以查询表的结构
  select field_name,… from … 可以查询字段的值
  select * from all_tables where table_name like ‘%’
  select * from all_tab_columns where table_name=’??’  

  11. 怎样得到触发器、过程、函数的创建脚本? 

  desc user_source
  user_triggers   

  12. 怎样计算一个表占用的空间的大小? 

  select owner,table_name,
  NUM_ROWS,
  BLOCKS*AAA/1024/1024 “Size M”,
  EMPTY_BLOCKS,
  LAST_ANALYZED
  from dba_tables
  where table_name=’XXX’;
  Here: AAA is the value of db_block_size ;
  XXX is the table name you want to check 

原文地址:https://www.cnblogs.com/liuzhuqing/p/7480723.html