oracle面试题

来源:互联网 发布:matlab定义未知数组 编辑:程序博客网 时间:2024/06/05 20:25
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.schema含义

schema是数据库对象的集合,包括表,视图,序列,存储过程,逻辑结构,索引,集群和数据库链接等等逻辑结构。一个user拥有一个schema,user和他的schema的名字相同,CREATE USER命令创建一个user,同时也为这个user创建一个schema,CREATE SCHEMA命令并不像命令说的那样创建一个SCHEMA, 他只是给你创建table的权限和在同一个事务中在你创建的schema中查看和进行赋与权限的权限。在任何情况下你都可以把用户和schema当作同一个东西。

11.影响oracle查询性能的因素都有哪些? 
a. 硬件配置:处理器速度,内存大小,磁盘读写速度,网络传输速度等等,这些都影响oracle的整体性能和查询性能 
b. 是否建立了索引,索引是否合理 
c. 表碎片和索引碎片,生产库由于长时间运营,碎片可能导致查询使用错误的执行计划,导致查询速度变慢 
d. 表或者索引的initial 参数配置不同,导致数据扩展区大小不一,也可能 导致查询速度降低。 
e. SQL执行效率低下,导致查询速度很慢 
f. 数据库负载过大



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

32. Oracle安裝完成后的初始口令?  
   internal/oracle 
   sys/change_on_install 
    system/manager 
    scott/tiger 
    sysman/oem_temp   

33. ORACLE9IAS WEB CACHE的初始默认用户和密码?   
   administrator/administrator  

34. oracle 8.0.5怎么创建数据库?   
   用orainst。如果有motif界面,可以用orainst /m  

35. oracle 8.1.7怎么创建数据库? 
   dbassist  
36. oracle 9i 怎么创建数据库?  
   dbca   

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

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

38. 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>   

39. SVRMGR什么意思?  

  svrmgrl,Server Manager. 

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

  sqlplus /nolog 
  变为归档日志型的  

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

  SELECT machine , terminal FROM V$SESSION;   

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

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

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

  desc user_source 
  user_triggers    

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

  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  

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

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

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

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

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

  select name from v$database; 

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

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

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

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

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

  su -root 

  date -u 08010000 

51.如何高效率的查找一个月以内的数据? 
进行时间比较要尽量避免用sysdate. 比如:如果使用select * from eventtable where eventdate>sysdate-30进行查找,当数据量小的时候看不出来,数据量大一些就会发现执行很慢,但日期型字段上也是有索引的,为什么会慢呢?原来是Oracle在进行查找的时候不断地去取sysdate这个不断变化的值,而不是我们想象中的一次产生一个条件语句然后进行查找。为了加快速度,我们可以先把当天的日期取出来,然后转成字符串后再用如下语句查,select * from eventtable where eventdate > to_date(’2001-12-1′,’yyyy-mm-dd’)。速度相差几十倍。 

52.简要介绍一下Oracle快照(snapshot) 
照是指表的或者表的行或者列的子集的副本, 快照在分布式的系统环境下很有用。 可以通过create snapshot语法来创建一个snapshot, 可以在创建快照的时候指定刷新频率 
什么是Oracle的同义词(synonym)? 如何创建synonym? 
同义词是相当于别名,是为了简化一些表名或者数据对象。 当我们以一个用户登陆而要去访问另一个用户创建的数据对象时,我们需要使用用户名.对象名的方法来使用,这样造成对象名难记,麻烦,使用同义词可以解决这个问题。 

假定我们现在以system的身份的登陆进去,我们需要访问scott用户下面的一个表emp; 

常规的写法是:select * from scott.emp; 

现在我们可以先建立一个同义词: 
create synonym my_syn for scott.emp; 

然后我们这样来访问这个表了: 
select * from my_syn; 

53.什么是表空间(tablespace)和系统表空间(System tablespace)? 
表空间(tablespace)是数据库的一个逻辑的存储单元,用来将相关的数据结构到组织到一起。 

系统表空间是在数据库建立的时候自动创建的,它包含了整个数据库的数据字典 

54.什么是数据库的约束? 
数据库约束是防止非法记录的规则, 约束保存在数据字典(data dictionary)中, 约束可以被定义在列级或者表级。 

Oracle中包括以下集中约束: 

a. Not Null – 明确一列数据不能包含null值 

b. Unique – 强制所有数据行不能有重复值 

c. Primary Key – 每一行数据的唯一标示 

d. Foreign Key – 强制一列数据与引用表的外键约束关系 

55. Check – 检查,明确规定一个必须为true的condition 
什么是数据库锁?Oracle中都有哪些类型的锁? 
锁是用来在多个用户同时访问同一个表的时候保护数据的。 它是Oracle的一种并发控制技术。锁使数据库最大并发的情况下保证数据的完整性。 Oracle会在需要的时候自动的提供锁的功能。 

56.锁的种类: 

共享锁: 这个锁是数据在被viewed的时候放置的。 

排他锁: 这种锁在Insert, Update, Delete命令执行的时候放置的,每一条记录同一时间只能有一个排他锁

1 0