一. 如何学习Oracle
1. 数据库管理员
管理Oracle(启动停止、数据库故障恢复)
提升Oracle性能(分配内存)
优化数据存储结构
……
2. 数据库程序员
编写业务SQL
数据库脚本编程(函数、存储过程、触发器)
3. Java程序员
首先应该了解Oracle数据库基本的体系结构,
然后重点掌握PL/SQL及Oracle的开发工具
二. Oracle 数据库简介
1. 对象关系型的数据库管理系统 (ORDBMS)
2. 在管理信息系统、企业数据处理、因特网及电子商务等领域使用非常广泛
3. 在数据安全性与数据完整性控制方面性能优越
4. 跨操作系统、跨硬件平台的数据互操作能力
5. Oracle数据库的主要特点:
a. 支持多用户、大事务量的事务处理
b. 数据安全性和完整性控制
c. 支持分布式数据处理
d. 可移植性
三. Oracle 体系结构
1. 数据库的体系结构是指数据库的组成、工作过程与原理,以及数据在数据库中的组织与管理机制
2. Oracle服务器提供开放、全面和综合的信息管理,它由Oracle数据库和Oracle实例组成
管理数据库的后台进程和内存结构的集合称为
Oracle 实例
四. Oracle 实例
1. Oracle 实例是后台进程和内存结构的集合
2. 在一般的情况下,每个Oracle数据库都必须对应一个Oracle
实例,但是在特殊情况下,一个服务器中一个数据库可以对应多个实例。所以在建立数据库之前,必须先指定Oracle实例的系统标识符(System
Identifier),即Oracle SID。这个Oracle SID就是Oracle实例的名称。因为Oracle
SID可以用来区分不同的Oracle数据库,所以SID名称必须是唯一的。
五. Oracle 实例内存结构
Oracle 的内存结构包含以下两个内存区:系统全局区 (SGA)、程序全局区 (PGA)
注意:当服务器进程启动时分配程序全局区
1. SGA(系统全局区)分为以下几个区:日志缓冲区、共享池、数据缓冲区
SGA保存了数据库环境和字典信息,由多个数据库进程共享
a. 日志缓冲区 :
日志记录数据库的所有修改信息
减少了保存日志时对磁盘的操作,提高了数据库性能。
b. 数据缓冲区 :
用于存储从磁盘数据文件中读入的数据,所有用户共享。
数据缓冲区的大小对数据库的读取速度有直接的影响。
已读取常见表格的数据,减少了对磁盘的操作,提高了数据库性能。
c. 共享池 :
共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域,共享池的大小直接影响数据库的性能。
保存了对SQL分析结果,减少了分析相同SQL的时间,提高SQL执行效率。
2. 程序全局区(PGA)包含单个服务器进程所需的数据和控制信息
a. PGA是在用户进程连接到数据库并创建一个会话时自动分配的,保存每个与Oracle 数据库连接的用户进程所需的信息
b. PGA为非共享区,只能单个进程使用,当一个用户会话结束,PGA释放
六. 后台进程
Oracle各种进程中,最重要的就是后台进程:
1. PMON 进程监控进程:
清理出现故障的进程。
释放所有当前挂起的锁定。
释放故障进程使用的资源。
2. SMON 系统监控进程
在实例失败之后,重新打开数据库时自动恢复实例。
整理数据文件的自由空间,将相邻区域结合起来。
释放不再使用的临时段。
3. DBWR 数据写入进程 :
管理数据缓冲区,将最近使用过的块保留在内存中。
将修改后的缓冲区数据写入数据文件中。
4. LGWR 日志写入进程 :
负责将日志缓冲区中的日志数据写入日志文件。
系统有多个日志文件,该进程以循环的方式将数据写入文件。
七. Oracle 数据库
1. Oracle 数据库由操作系统文件组成,这些文件为数据库信息提供实际物理存储区
2. Oracle 数据库包括逻辑结构和物理结构
A. 物理架构
a. 数据文件:
用于存储数据库数据,如表、索引数据等。
b. 日志文件:
记录对数据库的所有修改信息,用于故障恢复。
c. 控制文件:
记录数据库物理结构的二进制文件。
B. 逻辑架构:指Oracle的逻辑上是用什么“单位”进行存储
a. 数据块:
数据块是Oracle服务器所能分配、读取或写入的最小存储单元。
Oracle服务器以数据块为单位管理数据文件的存储空间。
b. 区:
区为段分配空间,它由连续的数据块组成。
当段中的所有空间已完全使用时,系统自动为该段分配一个新区。
区不能跨数据文件存在,只能存在于一个数据文件中。
c. 段:
段是构成表空间的逻辑存储结构,段由一组区组成。
按照段所存储数据的特征,将段分为四种类型,即数据段、索引段、回退段和临时段。
d. 表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。
每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。
表空间的大小等于构成该表空间的所有数据文件大小之和。
CREATE TABLESPACE tablespacename
DATAFILE ‘filename’ [SIZE
integer [K|M]]
[AUTOEXTEND [OFF|ON]];
e. 模式:
英文Schema,模式是对用户所创建的数据库对象的总称。
模式对象包括表、视图、索引、同义词、序列、过程和程序包等。
与用户的关系:模式名称就是控制该模式的用户名称。
八. 实例与数据库关系
1. 两者关系
一个实例只能管理一个数据库
一个数据库可能由多个实例同时管理
2. 单实例与多实例
一个数据库只有一个实例管理,叫单实例数据库。
一个数据库同时由多个实例管理,叫多实例数据库。
九. PL/SQL程序简介
1. PL/SQL程序组成
组成PL/SQL程序的最基本的单元是PL/SQL块。
2. PL/SQL块的分类
A. 匿名块:直接执行的块
B. 命名块:通过名称调用的块
a. 子程序(包括存储过程和函数):类似JAVA的方法和函数
b. 触发器:类似JAVA的事件处理代码,当某件事情发生时自动执行
c. 包:类似JAVA的package,主要的作用组织代码和避免命名冲突。
十. PL/SQL运行机制
1. 了解PL/SQL
PL/SQL是对标准SQL的扩充。
PL/SQL执行需要PL/SQL引擎执行,PL/SQL引擎可能一般安装在服务端,但也有可能安装在客户端。
2. 运行机制
A. 服务器端的PL/SQL引擎(如Oracle服务器)执行过程
a. 标准SQL交给SQL引擎处理
b. 非标准部分交给PL/SQL引擎处理
B. 客户端的PL/SQL引擎(如Oracle Forms)执行过程
a. 标准SQL交给服务器的SQL引擎处理
b. 非标准部分交给PL/SQL引擎在客户端处理,如果没有SQL,则所有PL/SQL 都是在客户端处理的。
十一. PL/SQL块的编译过程
1. 为什么要编译
PL/SQL块必须编译为机器码才能够执行
2. PL/SQL块
a. 匿名块:执行前编译
b. 命名块: 在创建时或修改进即时编译
3. 编译过程
A. PL/SQL引擎
B. 语法检查:检查PL/SQL代码的语法或编译错误。
a.
绑定:如果语法检查通过,编译器则为Oracle存储数据的程序变量分配一个存储地址,这个过程称为绑定。绑定允许Oracle在程序运行时引用存储地址。
b. 检查对表、列等对象的引用
C. 产生伪代码,并且设置合法状态
注意,即使状态设置为合法,如果在执行对应的表不存在,则执行仍会失败,并且状态自动设置为不可用。
十二. 使用PL/SQL的好处
1. 为什么要使用PL/SQL
a. 减少网络流量,提高应用程序性能
b. 提供模块化程序开发能力,简化了开发和维护
c. 具有良好的兼容性,不同的开发工具可以使用相同的PL/SQL脚本
d. 允许定义标识符,增加了程序可读性
e. 提供了程序控制结构,增强的业务处理能力
f. 提供了异常处理,让PL/SQL程序更健壮
十三. 数据字典
a. 数据字典保存数据对象和段的信息,它是一个存放在SYSTEM表空间的只读对象,不允许任何人对其进行修改。
b. 数据库对象包括:用户、角色、表空间、表、视图、簇、类型、同义词、序列、索引、数据库链接、存储过程、函数、包、触发器等。
c.
Oracle将这些数据库对象组合到一个称为Schema(翻译为模式)的集合中。一个Schema只能够被一个数据用户所拥有,并且Schema的名称与这个用户的名称相同。
十四. 表
在Oracle中表的概念以及创建、删除、修改表的语法与其它数据库基本相同。
Oracle表常见的数据类型:如表
数据类型
| SQLServer
| Oracle
|
整数
|
int,smallint,bigint
| number(m)
|
小数
| decimal
| number(m,n)
|
定长字符串
| char
| char
|
变长字符串
| varchar
| varchar2
|
日期
|
smalldatetime,datetime
| date
|
十五. 同义词
1. 为什么用同义词
当数据库对象如表修改名称以后,通过使用同义词可以避免重新修改SQL语句,从而减少系统维护工作量。
2. 创建同义词
a. 公有同义词:
CREATE PUBLIC SYNONYM 同义词名称 FOR 数据库对象名;
b. 私有同义词:
CREATE 同义词名称 FOR 数据库对象名;
3. 删除同义词
语法:drop SYNONYM 同义词;
十六.
视图(VIEW)是从一个或多个表中通过查询语句生成的一种虚表。数据库中只存储视图的定义(存在数据字典中)
1. 创建视图
语法:create or replace view 视图名 as 查询;
2. 使用视图
示例:select * from 视图名 where 条件;
3. 删除视图
语法:drop view 视图名;
十七. 序列:是Oracle数据库的一种对象,可以给应用程序提供基本连续增加并保持唯一的数值。
1. 为什么要用序列
主要用于实现数据库表的主键列的自动增长。
2. 创建序列
语法:create sequence 序列名
3. 使用序列
语法:序列名.nextval
语法:序列名.currVal
4. 删除序列
语法:drop sequence 序列名
案例
添加学生,学号使用自动编号。