一.数据库基础概念
1.数据库:
长期存储在计算机内(保障安全),有组织的管理,具有较小的冗余(有效管理,数据独立),可共享的,多个用户可以对包含的数据进行共享(并发控制,权限控制等).
2.数据模型:
数据库系统中用来提供信息表示和操作手段的一种形式架构,分为三个层次:
(1)概念数据模型(概念模型):对现实世界进行建模,与具体的DBMS(数据库管理系统)无关,是现实世界到信息世界的第一层抽象,常见的有E-R模型、面向对象模型等.
补充:【E-R模型】:
E-R模型的构成成分是实体集、属性和联系集
其表示方法如下:
(1) 实体集用矩形框表示,矩形框内写上实体名。
(2) 实体的属性用椭圆框表示,框内写上属性名,并用无向边与其实体集相连。
(3) 实体间的联系用菱形框表示,联系以适当的含义命名,名字写在菱形框中,用无向连线将参加联系的实体矩形框分别与菱形框相连,并在连线上标明联系的类型,即1—1、1—N或M—N。
(2)逻辑数据模型(数据模型):用户实际从数据库中看到的模型,是具体的DBMS支持的数据模型,主要用于DBMS来实现,用于机器世界,需要严格的形式化定义.常见的有层次模型、网状模型、关系模型.
补充:【关系模型】:比较主流的数据模型
a.关系:一张二维表
b.元组:一行记录(record)
c.属性:一列
d.主码:某个属性组,可以唯一标识一个元组(一条记录)
e.域:属性的取值范围
f.分量:元组中的一个属性值(有种线性代数里面向量x,y,z分量的味道)
g.关系名:对关系的描述,比如:选课关系
(3)物理数据模型(物理模型):
面向计算机物理表示,描述了数据在存储层面的结构表示,除了与具体的DBMS有关,还与操作系统和硬件有关(大部分物理数据模型的实现工作由不同的DBMS自动完成,设计者只设计索引、聚集等特殊的结构).
3.数据模型三要素:
(1)数据结构:静态特性的描述
(2)数据操作:动态特性的描述
(3)约束条件:完整性规则的描述
4.现实世界建模中的概念:
(1)实体:entity,客观存在的并且可相互区分的事物。可以是人、物,可以是实际的对象,也可以是抽象的概念,也可以是事物与事物之间的联系。举例:一个学生,一门课程,学生的一次选课.
(2)属性:attribute,实体对外表现的某一特性。举例:一个学生的姓名、年龄、学习成绩.
(3)码:key,唯一标识实体的属性。举例:一个人的身份证号码,一位童鞋的学号,米国人的社会安全号码.
(4)域:属性的取值范围,比如成绩取值范围(0-100).
5.联系:
世间万物都有联系,对应于信息世界中的联系,一般有以下两类联系:
(1)实体内部的联系
(2)实体之间的类型:三种,不用记忆,大脑里面想想就出来了
a.一对一:对于实体集A中的每一个实体,实体集B中至多有一个实
体与之联系,反之依然。例如:1个部门1个经理。
b.一对多:对于实体集A中的每一个实体,实体集B中有几个实体
与之联系,反对,对于B中的每一个实体,A中至多有一个实体
与之联系。例如:1个部门若干职工。
c.多对多:若对于实体集A中的每一个实体,实体集B中有多个实
体与之联系,反之,对于实体集B中的每一个实体,实体集A中
也有多个实体与之联系,责成实体集A与实体集B具有多对多联
系。例如:1个项目有多个职工参加,一个职工可以参加多个
项目。
6.关系数据库:
一些相关的表和其他数据库对象的集合。可以这么理解,关系就是数据库里面的一张表。
(1)表:由行和列组成
a.列包含一组命名的属性(也称字段)
b.行包含一组记录,每行包含一条记录(元组)
c.行和列的交集称为数据项,指出了某列对应的属性在某行
上的值,也称为字段值
d.列需定义数据类型,比如整数或者字符型的数据
常见的关系数据库有:Oracle、sql Server、MysqL、DB2、Sybase
7.数据库管理系统:
一种管理数据库的软件。建立在操作系统的基础上,对数据库进行统一的管理
和控制。用户使用的各种数据库命令已经应用程序的执行,都要通过数据
库管理系统。数据库管理系统还承担着数据库的维护工作。
对于具体的数据库,比如Oracle,数据库仅仅是指文件集合,这些文件用来存储和管理相关数据,包括数据文件、控制文件以及日志文件等等。
(2)数据存取功能:DML
(3)数据库运行管理:DBMS运行时的核心部分,包括并发控制、存取控
制(安全性检查)、完整性约束条件的检查和执行、数据库内部的维护等
等
8.数据库系统:
指在计算机系统中引入数据库后的系统,是一个实际可运行
的,按照一定的数据模型存储,维护并向应用系统提供数据或信
息支持的系统 ,它由以下部分组成 :
二.Oracle数据库简介
Oracle数据库软件是Oracle公司开发的关系型数据库产品,支
持各种操作系统平台,包括Windows、Linux和Unix等,目前
Oracle在关系型数据库产品领域内处于领先地位(企业级数据库)。
1.Oracle体系结构
(1)User Process:用户进程,在用户连接数据库时产生.
(2)Server Process:服务器进程,当连接到Oracle实例,并且与用户建立会话的时候产生.
(3)Program Global Area:PGA,程序全局区,当服务器进程产生时分配.
(4)Instance:实例,是一种访问Oracle数据库的方式,存取和控制数据库的软件机制,是用来访问数据库文件集的内存结构SGA(System Global Area,系统全局区)及后台进程的集合,简单来说,就是内存+进程。一个实例只能用于访问一个数据库。
补充:【数据库与实例的区别】:
(1)数据库是一个静态的概念,仅仅是指存储和管理数据的文件,要
对这些数据进行操作是数据库实例的事情.
(2)实例是一个动态的概念,实例包括一系列后台进程和内存结构
(SGA),来操作数据库中的数据.
(5)System Global Area:SGA,系统全局区,在实例启动的时候分配,是Oracle实例的基础组件,包括下面几个部分:
1).共享池:用于存储最近执行的sql语句和最近使用的数据定义,由两个性能相关的部分组成:
a.库缓存:存储最近使用的sql和PL/sql语句的信息,大小由Shared Pool的大小决定,缓存的是sql和PL/sql编译后的代码,执行方案,源代码.
b.数据字典缓存:存储在数据库中最近使用的定义.
2)数据缓冲区:存储从数据文件中获得的数据块的镜像(为了提高性能).
3)重做(Re Do)日志缓冲区:记录所有数据库的块改变(主要的目的用于数据恢复).
4)大池:系统全局区(SGA)中可选的一个部分,目的是减轻在共享池中的负担,用于共享服务器的会话内存UGA(User Global Area,用户全局区)、I/O Server进程、备份恢复操作加快速度。
5)Java池:Java命令的分析.
(6)后台进程:Oracle实例启动的时候产生后台进程,维持物理和内存之间的关联,
必须的后台进程如下:
1)PMON:Process Monitor,进程监视器进程,用来清理失败的进程.
2)SMON:System Monitor,系统监视器进程,负责做实例恢复,删除临时段.
3)DBWR:Database Writer,数据库写读进程,负责把数据块从内存中写回到数据文件中.
4)LGWR:Log Writer,日志写进程,负责把重做日志从重做日志缓冲区写到重做日志文件.
5)CKPT:Check Point,检查点进程,用来减少执行实例恢复所需要的时间.
可选的后台进程有:
1)ARCN:Archiver,归档进程,当启用归档方式后自动归档重做日志文件.
a.数据文件(Data Files):存放的是用户的数据和系统的数据,一个Oracle数据库一般会包含多个数据文件,数据文件的逻辑组织形式为表空间(TableSpace),一个表空间内可以含有多个数据文件,数据库内可以有多个表空间.
b.重做日志文件(Redo Log Files):日志文件是二进制文件,记录了系统改变的日志,主要用于数据库的恢复,重做日志由此而得名.
c.控制文件(Control Files):记录数据库的一些核心配置数据.
(8)参数文件(Parameter File):参数文件是在实例启动的时候,配置实例运行相关的一些参数(比如内存分配的大小,实例运行出错的日志存放位置等).
2.Oracle数据库常用概念
(1)数据库名:数据库的ID Card,用于标识一个数据库,在参数文件中用DB_NAME表示.
查看数据名的方式:
a.使用sql语句:sql> select name from v$database;
b.使用show命令:sql> show parameter db_name;
c.查看参数文件:查看init.ora文件 db_name (我本机的路径:F:\app\Administrator\admin\orcl\pfile)
(2)数据库实例名:用于和操作系统进行联系的标识(数据库和操作系统之间的交互使用的是数据库实例名),数据库名和实例名可以相同也可以不同。在一般情况下,数据库名和实例名是一对一的关系,但如果在Oracle并行服务器架构(Oracle实时应用集群)中,数据库名和实例名是一对多的关系。查看实例名的方式:
a.使用sql语句:sql> select instance_name from v$instance;
b.使用show命令:sql> show parameter instance_name;
(3)系统标识符:SID,也用来表示Oracle实例,区别是:instance_name是数据库实例,SID是操作系统环境变量。也就是说,从操作系统角度访问实例名,必须通过SID,而且ORACLE_SID必须与instance_name的值一致.
(4)数据库域名和全局数据库名:在分布式数据库的环境下,避免因为数据库名字相同而造成的混乱,引入了Db_domain参数,在这种情况下,一个数据库由数据库名(Db_name)和数据库域名(Db_domain)两个参数共同决定的,有点类型网络的域名。Db_name和Db_domain两个参数用“.”连接起来,表示一个数据库,并将改数据库的名称称为Global_name(全局数据库名)。查看数据库域名的方式:
a.使用sql语句:sql> select value from v$parameter where name='db_domain';
b.使用show命令:sql> show parameter domain;
(5)数据库服务名:为了方便Oracle并行环境中的设置,引入Service_name参数,对应一个数据库,而不是一个实例。默认的值为:Db_name.Db_domain,等于上面的全局数据库名。查看数据库服务名的方式:
a.使用sql语句:sql> select value from v$parameter where name='service_names';
b.使用show命令:sql> show parameter service_names;
(6)网络服务名:提供给网络访问远端服务器上的数据库时,用于描述数据库访问地址的字符串,通常的结构是“主机名(IP):端口号:服务名”,eg:127.0.0.1:1521:ocl。
(7)服务命名:网络服务名的别名,网络服务名书写过于复杂,因此使用服务命名代替,服务命名被用于通过网络连接数据库,通常的使用格式是:用户名/口令@服务名。
(8)监听器:在服务端运行的一个进程,用于监听客户端到数据库的连接请求,在通过网络访问数据库时必须启动。
(9)表空间(TableSpace):Oracle内部的一套数据存储组织形式。从物理上获得空间后,Oracke自己来管理这部分空间的使用。这些可用的空间组织成逻辑存储的主要单位称之为表空间。
3.数据库对象
(1)表:用来存放用户数据的对象,由行和列组成,列就是字段,行就是表中的记录.
(2)约束:保证数据完整性的规则,设置在单个字段或者多个字段组合上,写入这些字段的数据必须符合约束的限制.
(3)视图:一个虚拟的表,是一个命名的查询,用于改变基表数据的显示,简化查询。服务方式与表相同,同样可使用查询语句.
(4)索引:构建于表的单字段或者组合字段上,用于加快对表中数据的查询.
(5)序列:产生顺序的不重复数字串,被作为主键约束值的参照.
(6)同义词:数据库对象的别名.
(7)存储过程:用于完成某种特定的功能的PL/sql程序,存储在数据库中.
(8)函数:用于进行复杂计算的PL/sql函数,返回一个计算结果,存储在数据库中.
(9)触发器:由事件触发而执行的PL/sql程序,有点类似于Java里面的监听器,用于在特定的时机(delete、update、insert等)执行特定的任务,存储在数据库中.
(10)包:一组相关的函数和存储过程的命名集合,存储在数据库中.
4.数据库安全
(1)用户:用于组织和管理数据库对象,退出一个应用程序的数据库对象被存放在一个数据库用户下。使用数据库用户连接数据库后,可以对这些数据对象执行操作.
(2)方案:数据库对象的命名集合,一个方案唯一对应一个数据库用户,方案的命名与用户命名完全相同,访问数据库对象时,采取“方案名.对象名”的方式来访问.
(3)权限:权限决定了数据库用户在数据库中能够做什么,如果用户没有权限,那么对数据库不能执行任何操作(包括查询)。权限由高权限用户授予(Grant).
(4)角色:一组命名的权限,用于简化对权限的管理操作,可以一次将多个权限(一个角色的权限)授予一个或多个用户.
(5)配额:当用户创建存储对象(比如表、索引)时,需要一定的数据库存储空间来存放这些对象,配额就是分配给用户的可以使用存储空间的限制.
5.数据库启动过程
三个阶段:nomount,mout,open
(1)数据库启动===>>> nomout状态:startup nomout
主要负责读参数文件,分配内存,启动后台进程,初始化部分动态性能视图.
(2)数据库启动===>>> mout状态:alter database mout
读参数文件中描述的控制文件,校验控制文件的正确性,将控制文件的内容读入到内存,mout是挂载,一旦mount之后,就是将一个没有意义的实例和一个数据库发生了联系。
(3)打开数据库:alter database open
读控制文件的数据文件,校验数据文件的一致性,如果不一致,使用日志文件将数据库文件恢复到一致的状态.
6.Oracle的网络连接结构
一般需要安装oracle客户端:
在tnsnames.ora中配置Oracle数据库服务器的信息:
补充:【Oracle 网络客户端配置】
客户端连接Oracle服务器,先配置Oracle客户端网络,再使用客户端配置的网络名连接Oracle服务器。• Oracle客户端的配置文件包括sqlnet.ora和tnsnames.ora,在$ORACLE_HOME\network\admin目录中。(1)sqlnet.ora文件内包含客户端连接服务器所采用的途径和方法配置信息.(2)tnsnames.ora文件内则包含采用最常见的连接方法(本地命名策略)时的客户端的网络配置详细信息.