1、 ORACLE和MySQL的区别
oracle是大型数据库,Mysql是中小型数据库,mysql是开源的,Oracle支持大并发,大访问量
MYSQL的主键一般使用自动增长,oracle主键自增长需要使用序列
MYSQL的单引号双引号都表示字符串
ORACLE的单引号表示字符串,双引号是区分大小写的字符串
MYSQL用LIMIT分页orcale用rownum分页
空字符串的处理使用is null is not null
长字符串处理mysql是varchar,orcale的长字符串是 varchar2,varchar2的长度是4000
2、存储过程和函数的区别【重点】
函数是一个特殊的存储过程,都是预编译的(一次编译多次执行)
不同点
一、标识符不同,函数的标识符为function,过程的标识符为:procedure
二、函数中有返回值,且必须返回,而过程没有返回值,但是可以通过out返回
三、函数可以在任何地方调用,存储过程只能在plsql中使用。
相同点
两者都可以有一个参数或多个参数
3、Oracle导入和导出方式
使用oracle工具 exp/imp导入/导出,导入/导出的是二进制的数据,可以防止乱码
4、Oracle中有哪几种文件?
数据文件(一般后缀为.dbf或者.ora)存储表数据
日志文件(后缀名.log) 保证事务的原子性,
控制文件(后缀名为.ctl)
一般在安装目录下的\oradata\orcl
5、优化Oracle数据库,有几种方式(重点)
优化数据库在于IO读写磁盘速度慢,尽量降低IO操作次数,把数据放入内存中。
可分为物理优化和逻辑优化
物理优化:
优化oracle的运行环境, 优化网络带宽,优化硬件(更换更高级的硬盘)。
修改oracle的最大连接数、禁止回收站的功能,建立合适的索引。
将索引数据和表数据分开在不同的表空间上,降低IO冲突。
建立表分区,将数据分别存储在不同的分区上,以空间换取时间,降低IO。
逻辑优化:
按照规定编写sql语句,sql语句要使用占位符语句,效率高。
在使用select子句查询时避免使用*号。
一些耗时的操作可以在用户较少的情况下操作,避开系统使用的高峰期,提高数据库性能。
使用Exits (艾克塞死)代替In 、 Not Exits 替代Not In
使用缓存
6、Oracle是怎样分页的?
Oracle中使用rownum来进行分页, 这个是效率最好的分页方法
7、Oralce怎样存储文件,能够存储哪些文件?
Oracle 能存储 clob、nclob、 blob、 bfile
Clob 可变长度的字符型数据,也就是其他数据库中提到的文本型数据类型
Nclob 可变字符类型的数据,不过其存储的是Unicode字符集的字符数据
Blob 可变长度的二进制数据
Bfile 数据库外面存储的可变二进制数据
8、Oralce解释冷备份和热备份的不同点以及各自的优点?
冷备份发生在数据库已经正常关闭的情况下,将文件拷贝到另外位置
热备份是在数据库运行的情况下,使用oracle工具 exp/imp导入/导出的方式备份
冷备的优缺点:
1).是非常快速的备份方法(只需拷贝文件)
2).容易归档(简单拷贝即可)
3).容易恢复到某个时间点上(只需将文件再拷贝回去)
冷备份不足:
1).单独使用时,只能提供到“某一时间点上”的恢复。
2).在冷备份过程中,数据库必须是关闭状态。
3).若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。
4).不能按表或按用户恢复。
备份方式:(备份所有的数据文件 控制文件 重做日期文件和密码文件 )
热备的优缺点
1).可在表空间或数据文件备份,备份时间短。
2).备份时数据库仍可使用。
3).可达到秒级恢复(恢复到某一时间点上)。
4).可对几乎所有数据库实体作恢复。
5).恢复是快速的,在大多数情况下在数据库仍工作时恢复。
热备份的不足是:
1).不能出错,否则后果严重。
2).若热备份不成功,所得结果不可用于时间点的恢复。
3).因难于维护,所以要特别仔细小心,不允许“以失败而告终”。
备份的方式: exp imp expdp impdp
9、比较truncate和delete命令
Truncate 和delete都可以将数据实体删掉,truncate 的操作并不记录到日志,所以操作速度较快,但同时这个数据不能恢复
Delete操作不腾出表空间的空间
Truncate 不能对视图等进行删除
Truncate是数据定义语言(DDL),而delete是数据操纵语言(DML)
10、解释什么是死锁,如何解决Oracle中的死锁?
加了锁而没有解锁,可能是使用锁没有提交或回滚事务,如果是表级锁则不能操作表,客户端处于等待状态,如果是行级锁则不能操作锁定行。
解决:
一、 查找出被锁的表
select b.owner,b.object_name,a.session_id,a.locked_mode
from v$locked_object a,dba_objects b
where b.object_id = a.object_id;
select b.username,b.sid,b.serial#,logon_time
from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time;
二、 杀进程中的会话
alter system kill session "sid,serial#";
强制杀进程:
SQL语句执行很慢的情况,强制关闭(v$sql+v$session=sid,serial#);
出现死锁(v$clocked_object+v$session=sid,serial#);
重新启动数据库。
11、简述oracle中 dml、ddl、dcl的使用
Dml 数据操纵语言,如select、update、delete,insert
Ddl 数据定义语言,如createtable 、drop table 等等
Dcl 数据控制语言, 如 commit、 rollback、
TCL 事物控制语言,grant、 invoke等
12、说说oracle中的经常使用到得函数
Length: 长度、
lower: 小写、
upper: 大写,
to_date: 转化日期,
to_char: 转化字符
Ltrim: 去左边空格、
rtrim:去右边空格,
substr:取字串,
add_month: 增加或者减掉月份、
to_number: 转变为数字
1.单行函数:
a) 字符串:lower(char),upper(char),length(char),initcap(x)
b) 数字:round(number,n)
c) 日期时间:sysdate 返回数据库所在操作系统的当前日期时间。
systimestamp 返回数据库所在操作系统的当前时间戳。
last_day(d) 返回指定日期当月的最后一天的日期时间
trunc(d[,unit]) 截断日期时间,unit: 'year', 'month', 'day'
d) dual表是Oracle提供给任何用户的一个表,常用在没有目标表的SELECT语句中。
e) 转换函数:
to_char(datatime[,format]), format: yyyy,mm,dd,hh24,mi,ss
to_char(number[,format]), format: l, 9, ','
to_char(char[,format])
to_date(char[,format]), 字符串-->日期时间
to_timestamp(char[,format]), 字符串-->日期时间戳
to_number(expr[,format])
f)其它函数:
nvl(expr1,expr2) 如果expr1为空,返回expr2的值,否则返回expr1。
nvl2(expr1,expr2, expr3) 如果expr1不为空,返回expr2,否则返回expr3。
decode(expr, search1,result1,search2,result2,...)
case expr when search1 then result1
when search2 then result2
...
else resultn
end
2. 聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果。比如 SUM(x)返回结果集中 x 列的总合。
13、rowid, rownum的定义
rowid和rownum都是虚列
rowid是物理地址,用于定位oracle中具体数据的物理存储位置
rownum则是sql的输出结果排序
14、 使用oracle 伪列删除表中重复记录:
Delete table t where t.rowid!=(select max(t1.rowid) from table1 t1 where t1.name=t.name)
15.、如何设计数据库
使用POWERDISINE工具的使用,一般满足第三范式就可以了
1 列是不可再分
2 一张表只能做一件事情
3 列不允许间接依赖
16、 数据的隔离级别是什么分别解决什么问题
数据库事务的隔离级别有4个,
由低到高依次为Read uncommitted、读未提交
Read committed、读已提交
Repeatable read、可重复读
Serializable, 串行化
这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。
17、什么是ER图 画个例子描述ER
就是表与表之间的概念模型图,是用来体现实体与实体关系的图。一般有三种关系: 多对一,一对多,一对一。 讲解使用powerdesigner设计概念模型图
18、 什么是视图 普通视图和物化视图的区别
视图:是虚表,是数据库中查询的SQL语句,内容由查询定义。
物化视图:是包括一个查询结果的数据库对象,它是远程数据的的本地副本。
物化视图是自动刷新或者手动刷新的,视图不用刷新
物化视图也可以直接update,但是不影响基表,对视图的更新反映到基表上
物化视图主要用于远程数据访问,物化视图中的数据需要占用磁盘空间,视图中不保存 数据
Oracle数据库存在(对象权限,角色权限,系统权限)
19、索引的优缺点
优点:快速查询
缺点:数据量大 需要加大索引的维护量
20、 说一下 什么是笛卡尔积,内连接,左外连接,右外连接,全连接 并且举例
笛卡尔积:简单的说就是两个集合相乘的结果。这里用于多表查询中。
内连接:inner join,将满足条件的数据保留。
左外连接:left join,右外连接:right join,都是以主表为主,能关联的显示,不能关联的也会保留主表数据。
21、 描述你写过最大的存储过程
这个不怎么写,存储过程的执行会占用数据库的计算能力,数据库压力很大,虽然存储过程是预编译的,执行速度比一般sql执行速度更快 ,但是不同数据库之间迁移的话很麻烦,需要大量的修改,代码量大,维护起来比较难,所以都不太适应去使用。