当前位置: 首页 > news >正文

Oracle学习(一):Oracle数据库基础

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一.数据库基础概念

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,数据库仅仅是指文件集合,这些文件用来存储和管理相关数据,包括数据文件、控制文件以及日志文件等等。

数据库管理系统的主要功能:

(1)数据库定义功能:DDL

(2)数据存取功能:DML

(3)数据库运行管理:DBMS运行时的核心部分,包括并发控制、存取控
制(安全性检查)、完整性约束条件的检查和执行、数据库内部的维护等

(4)数据库的建立和维护功能

8.数据库系统:

指在计算机系统中引入数据库后的系统,是一个实际可运行
的,按照一定的数据模型存储,维护并向应用系统提供数据或信
息支持的系统 ,它由以下部分组成 :

a.数据库    b.数据库管理系统(DBMS)

c.应用系统开发工具    d.数据库管理员    e.用户

二.Oracle数据库简介

Oracle数据库软件是Oracle公司开发的关系型数据库产品,支
持各种操作系统平台,包括Windows、Linux和Unix等,目前
Oracle在关系型数据库产品领域内处于领先地位(企业级数据库)。

1.Oracle体系结构

 

image

(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,归档进程,当启用归档方式后自动归档重做日志文件.

(7)数据库核心文件:

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;

image

b.使用show命令:SQL> show parameter db_name;

image

c.查看参数文件:查看init.ora文件 db_name (我本机的路径:F:\app\Administrator\admin\orcl\pfile)

image

(2)数据库实例名:用于和操作系统进行联系的标识(数据库和操作系统之间的交互使用的是数据库实例名),数据库名和实例名可以相同也可以不同。在一般情况下,数据库名和实例名是一对一的关系,但如果在Oracle并行服务器架构(Oracle实时应用集群)中,数据库名和实例名是一对多的关系。查看实例名的方式:

a.使用SQL语句:SQL> select instance_name from v$instance;

image

b.使用show命令:SQL> show parameter instance_name;

image

c.查看参数文件:查看init.ora文件

(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';

image

b.使用show命令:SQL> show parameter domain;

image

c.查看参数文件:查看init.ora文件

image

(5)数据库服务名:为了方便Oracle并行环境中的设置,引入Service_name参数,对应一个数据库,而不是一个实例。默认的值为:Db_name.Db_domain,等于上面的全局数据库名。查看数据库服务名的方式:

a.使用SQL语句:SQL> select value from v$parameter where name='service_names';

image

b.使用show命令:SQL> show parameter service_names;

image

c.查看参数文件:查看init.ora文件

(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的网络连接结构

image

一般需要安装oracle客户端:

image

在tnsnames.ora中配置Oracle数据库服务器的信息:

image

补充:【Oracle 网络客户端配置】

客户端连接Oracle服务器,先配置Oracle客户端网络,再使用客
户端配置的网络名连接Oracle服务器。
• Oracle客户端的配置文件包括sqlnet.ora和tnsnames.ora,在
$ORACLE_HOME\network\admin目录中。
(1)Sqlnet.ora文件内包含客户端连接服务器所采用的途径和方法
配置信息.
(2)tnsnames.ora文件内则包含采用最常见的连接方法(本地命
名策略)时的客户端的网络配置详细信息.

 

转载于:https://my.oschina.net/javamaster/blog/797121

相关文章:

  • js 单例
  • Nginx 指定不产生日志类型(不记录图片日志)
  • php对二维数组求差集
  • uplodidy代码
  • jQery简单Tab选项卡效果
  • 用linux mail命令发送邮件时指定发送人
  • SMTP补充
  • js中网页的一些宽度和高度问题
  • ASP.net 使用ConfigurationManager获取连接字符串
  • react native TypeError network request failed
  • 自定义插件学习-弹框2
  • mybatis指定jdbctype
  • Java端实现RedisPUB/SUB(订阅发布)
  • 开源镜像源(转自[tanghuimin0713的博客])
  • testng入门教程2用TestNG编写测试及执行测试
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Android Studio:GIT提交项目到远程仓库
  • Angular6错误 Service: No provider for Renderer2
  • Fabric架构演变之路
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Java小白进阶笔记(3)-初级面向对象
  • Kibana配置logstash,报表一体化
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Rancher-k8s加速安装文档
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • springMvc学习笔记(2)
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • Webpack 4 学习01(基础配置)
  • 构建工具 - 收藏集 - 掘金
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于web的全景—— Pannellum小试
  • 一份游戏开发学习路线
  • 用mpvue开发微信小程序
  • Python 之网络式编程
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​2021半年盘点,不想你错过的重磅新书
  • ​人工智能书单(数学基础篇)
  • # C++之functional库用法整理
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (4) PIVOT 和 UPIVOT 的使用
  • (rabbitmq的高级特性)消息可靠性
  • (力扣)循环队列的实现与详解(C语言)
  • (力扣题库)跳跃游戏II(c++)
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (原創) 未来三学期想要修的课 (日記)
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .net对接阿里云CSB服务
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [2544]最短路 (两种算法)(HDU)
  • [BJDCTF 2020]easy_md5
  • [BT]BUUCTF刷题第8天(3.26)