oracle系列(二)oracle体系结构和用户管理

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

博主QQ819594300

博客地址:http://zpf666.blog.51cto.com/

有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!

在使用oracle之前,我们一定要对oracle的体系结构有深入的理解,与之前我们学习过的sqlserver体系结构是不一样的,所以对于我们来说是一个全新的内容。

一、oralce体系结构

1、概述

Oracle的体系结构是数据库的组成,工作过程,以及数据库中数据的组织与管理机制,要了解oracle数据库的体系结构,就必须要理解oracle的主要组件和重要的概念。Oracle体系结构包含一系列组件,包括实例、用户进程、服务进程、数据文件及其他文件,如参数文件、口令文件和归档日志文件等。如下图所示:

wKioL1keRReRXIFxAAJc6DAlz2Q844.jpg

实例和数据库是oracle数据库体系结构的核心组成部分,也是最重要的两个概念,dba的主要工作就是维护实例和数据库。

1)实例

实例是后台进程和内存的集合,必须启动实例才能访问数据库中的数据。

wKiom1keRRjSy-9_AADbBECpfsA047.jpg

Oracle启动时,将分配一个系统全局区(SGA),并启动一系列oracle后台进程

   一个实例只能打开并使用一个数据库

   Oracle分为单进程实例和多进程实例,现在普遍都是多进程实例,多进程就是多用户,不同用户使用不同进程来执行oracle的不同部分。

2)数据库

数据库是一个数据的集合,该集合被视为一个逻辑单元

Oracle数据库由操作系统文件组成,这些文件为数据库信息提供实际物理存储区

Oracle数据库包括逻辑结构和物理结构

物理结构:是指存储数据库信息的一组操作系统文件,每个数据库有一个逻辑结构和一个物理结构。物理结构是指构成数据库的一组操作系统文件,主要由3种类型文件组成:数据文件,控制文件和重做日志文件

逻辑结构:是指数据库数据的逻辑存储结构,包括:表空间,数据段,表,视图等。

二、oracle存储结构

Oracle的存储结构分为物理结构和逻辑结构,这两种存储结构既相互独立又相互联系。

wKioL1keRRjAHDL4AAEP7b8JKTk694.jpg

1、oracle物理结构

物理结构就是oracle数据库创建后使用的操作系统物理文件,分为以下两种:

1主要文件

   数据文件:数据文件是物理存储数据库的文件,数据文件的特点:每个数据文件只与一个数据库相联系,一个表空间可以包含一个或多个数据文件,一个数据文件只能属于一个表空间。数据文件包含数据库的用户或应用程序数据,以及元数据和数据字典。

 

   重做日志文件:它记录了对数据的所有更改信息,并提供一种数据恢复机制,如果数据库服务器发生崩溃,但未丢失任何数据文件,那么实例便可使用这些文件中的信息恢复数据库。

 

   控制文件:当数据库读取时,要根据控制文件的信息查找数据文件。控制文件存储了数据文件和重做日志文件的名称和位置。一个数据库至少有两份控制文件oracle11g默认包括3个控制文件,各个控制文件内容相同,可以避免因为一个控制文件的损坏导致无法启动数据库。控制文件记录了以下关键信息:数据文件的位置和大小、重做日志文件的位置及大小、数据库名称及创建时间、日志序列号。控制文件对数据库至关重要。没有这些文件,就无法打开数据文件以访问数据库中的数据。

2其他文件

   参数文件:用于定义实例启动时的配置

   口令文件:允许sysdba、sysoper 和sysasm 远程连接到实例并执行管理任务

   归档日志文件:使用这些文件和数据库备份,可以恢复丢失的数据文件。也就是说,归档日志能够恢复还原的数据文件。

 

2、oracle逻辑结构

Oracle的逻辑组件包括表空间、段、区、块和模式等。

1)表空间

   表空间是数据库中最大的逻辑单位,SYSTEM 和SYSAUX 表空间是在创建数据库时创建的必须存在的表空间,还会有TEMP,USERS等。

   每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。

   表空间的大小等于构成该表空间的所有数据文件大小之和

   表空间和数据文件是相对应的,如果没有数据文件,表空间不可能独立存在,如果只有表空间没有数据文件也是不行的,就好比如果电脑没有硬盘,你不能再逻辑上看到C盘D盘,在这里硬盘就相当于是数据文件,而C盘就相当于是表空间。我们可以把多个数据文件组成一个表空间,然后在表空间里面存储数据,表空间和数据文件是对应的,一个表空间可以是由一个或多个数据文件组成的,但是一个数据文件只能在一个表空间当中

表空间的作用

   对于不同的用户分配不同的表空间,对不同的模式对象分配不同的表空间,方便对用户操作和模式对象的管理。

   可以将不同数据文件创建到不同的磁盘中,有利于管理磁盘空间提高i/o性能,备份和恢复数据等。

 

   SYSTEM表空间:用于存放oracle系统内部表和数据字典的数据,如表明、列名、用户名等。

   SYSAUX表空间:作为SYSTEM的辅助表空间用于存放各种数据库工具(如企业管理器、StasPack、logMiner等)用到的数据用于存放各种模式的对象数据,如智能代理用户DBSNMP、数据挖掘用户ODM等。

   USERS表空间:作为用户使用的表空间,可以在这个表空间上创建各种对象,如创建表,索引等。

   TEMP表空间:存放临时数据的特殊表空间,例如:当需要进行排序时,系统就将排序的数据临时存放在该表空间,排序处理完成后,即可释放排序数据所占用的空间,称之为临时表空间。


以上表空间我们不用创建,系统安装好之后自动创建好了,我们也可以根据需要自己创建。

案例一:创建一个自动增长的表空间 benet

创建表空间的语法是:

CREATETABLESPACE tablespacename

DATAFILE‘filename’ [SIZE integer [K|M]]

[AUTOEXTEND[OFF|ON]];

如果不能创建,说明数据库没有启动,执行STARTUP命令之后再创建。

wKiom1keRRrwsetfAAQ-JmwwVE4890.jpg

如果空间不够用了,可以调整表空间大小

方法一:更改数据文件大小,并指明数据文件的存放路径,使用RESIZE关键字执行调整后的表空间大小。

wKiom1keRRvwcwaXAAKG3ttmhjs024.jpg

方法二:向表空间内添加新的数据文件,当数据文件满了之后自动存储到新的数据文件。

wKioL1keRRzRbVi8AALOCDN2LW8347.jpg

案例二:改变表空间的读写状态,ONLY表示只读,WRITE表示可读写。

wKiom1keRR2jFvdBAAF5i0tB_CI646.jpg

案例三、想查看系统中有多少个数据文件

wKioL1keRR3Q9WWaAAGs-ONPV2Y406.jpg

wKiom1keRR6QbbBnAAJy0nucrwM369.jpg

案例四、如何查看表空间

wKioL1keRR_zqxwBAAFH91lAFpo902.jpg

案例五、查看表空间和数据文件之间的对应关系

wKiom1keRR_z9qo3AAC-GQeHZkg717.jpg

wKioL1keRSDyfhqOAAH1AinCBP8593.jpg

删除表空间

wKioL1keRSCCDXzqAAIRgo_6NSs148.jpg

2)段

   段存在于表空间中,是一种指定类型的逻辑存储结构。

   段由一组区组成

   段分为4类:数据段、索引段、回退段、临时段。

 

3)区

   区是磁盘空间分配的最小单位。磁盘按区划分,每次至少分配一个区

   区是由连续的数据块组成

   段主要有一个或多个区构成,当创建段时,至少包含一个区。

   区不能跨数据文件存在,只能存在于一个数据文件中。

 

4)数据块

   是数据中最小的数据组织单位与管理单位

   Oracle数据中的数据存储于数据块中

   数据块是oracle服务器所能读取或写入的最小存储单元

   数据块的取值范围是2K-64KB,默认值与oracle版本有关

 

5)模式

   模式是数据库对象的集合。包括:表、视图、索引、同义词、序列、过程和程序包等。

   当创建一个用户时,oracle会自动创建一个与用户名相同的模式,因此,模式又称为用户模式。

   用户登录后,默认访问的是与自己的名称相同的模式中的数量库对象

案例六:在benet表空间创建了一个名为bdqn的表,这张表空间所占用的空间,我们称之为段,查看数据段的命令

先创建一个benet表空间和一个bdqn表

wKiom1keRSGiYFEwAAHVX_GMMmo158.jpg

wKioL1keRSLRw2CzAAC-aWzeA2E215.jpg

wKiom1keRSLDV0U-AACHklTXOKo115.jpg

显示有5925个段

wKiom1keRSLgWu0CAAAyKEAKSNE529.jpg

案例七:查看EXAMPLE表空间的区和段的分布情况

wKioL1keRSPDcUSMAAHTfL1o4hs767.jpg

案例八:查看块

wKiom1keRSPCViRkAAGYwD-kmpk504.jpg

案例九、查看操作系统最小存储单元

wKioL1keRSTQMonxAAKbRDL52Vk015.jpg

wKioL1keRSSyR125AAGFgiXP49w225.jpg

三、oracle的内存结构

内存是影响数据库性能的第一要素,oracle内存存储的主要内容如下

   程序代码

   关于已经连接的会话信息,包括当前所有活动会话和非活动会话

   程序运行时必须的相关信息,如查询计划

   Oracle进程之间通信和共享的信息,如锁

按照内存的使用方法不同,oracle数据库的内存又可分为系统全局区(SGA)、程序全局区(PGA)、用户全局区(UGA)

wKiom1keRSWzYV5OAAGxKeLo2tk687.jpg

1、系统全局区 ( SGA )

数据库信息存储于系统全局区,由多个数据库进程共享,当数据库实例启动时SGA的内存被自动分配,SGA是数据库中占用服务器内存最大的一个区域,也是影响数据库性能的一个重要指标,

SGA按作用不同,分为以下几个部分

wKioL1keRSXRKYS8AAD25GccKXM448.jpg

wKiom1keRSeQ4uUPAAP3z8PQhnY350.jpg

2、PGA

PGA不是实例的一部分,包含单个服务器进程或者单个后台进程所需的数据和控制信息。

PGA是在用户进程连接到数据库并创建一个会话时自动分配

该区域内保留每个与oracle数据库连接的用户进程所需的内存

当一个用户会话结束,PAG就会释放

3、UGA

用户全局区(UGA)为用户进程存储会话状态

UGA可以作为SGA或者PGA的一部分。具体位置取决于如何连接Oracle

如果通过一个共享服务器连接,UGA包含在SAG中

如果通过一个专有服务器连接,UGA就包含在专有服务器的PGA中

 


案例一:验证内存结构工作的原理(select语句是如何被执行的?)

当用户执行语句select  *  from scott.emp的时候,工作原理分为四步,如下:

第一步:先做编译,编译包含了语法的检查和语义的检查。

第二步:如果编译没有问题会进入shared pool(共享池 )中,而sharedpool 是由library cache和datadictionary cache(数据字典缓存)组成。Sql语句第一时间会进入library cache中,即library cache中会存放被编译过的正确的sql语句,仅仅是sql语句而已。librarycache中没有缓存的sql语句需要进行硬解析(即需要耗费设备的I/0资源从硬盘读取)。假设library cache中有这个sql语句,就不需要做硬解析,接着会查 data dictionary cache。data dictionary cache中缓存了权限和对象数据及属性,所有datadictionary cache检查用户是否对scott.emp表是否具有访问权限,如果有权限继续往下执行,如果没有权限,直接给用户返回一个结果。如果一条语句从来都没有被执行过,这条语句首先被缓存在share pool中的library cache中,下一次被执行的时候直接从share pool中取sql语句。存放sql语句也需要占用空间,share pool的空间也是有限的,为了防止share pool空间不够用,采用先进先出的规则即后执行的sql语句会覆盖先执行的sql语句来释放空间,当然share pool的空间越大越好。

第三步:data buffer cache现在hr用户可以访问scott.emp表了,data buffer cache的作用就是从磁盘或存储中将数据块调入内存,缓存在buffer cache中。总结:buffer cache缓存数据本身,library cache缓存sql语句本身。

第四步:redo log buffer<重做日志缓冲区>当用户执行

insert,update,delete,create,alter等操作后,数据发生了变化,这些变化了的数据写入数据缓冲区(buffer cache)之前,先写入重做日志缓冲区,同时变化之前的数据也放入重做日志缓存中,这样做,是为了保证在数据恢复时oracle就知道哪些事务需要提交,哪些事务需要撤回。


可以通过企业管理器来查看share pool的相关信息

如果控制台打不开,可以执行命令打开:

wKiom1keRSfijiXxAADavW8JuO4493.jpg

wKioL1keRSeQHbxvAAG8jbxoxaE438.jpg

wKioL1keRSiCs_GyAAErY88QdNc607.jpg

wKiom1keRSjSjqR1AAEISBQVbLc500.jpg

wKiom1keRSnyJUi8AAD1Ui9NRh8377.jpg

wKioL1keRSnwRd6zAAF-g8osJ2A851.jpg

wKioL1keRSrAPk7_AAHwnRBbBFE012.jpg

测试语句执行时间:

wKiom1keRSqQkV59AACNQY2ukUc387.jpg

wKiom1keRUnADC-DAAA8VfCJDDk557.jpg

SQL> /再次执行上一条命令:

wKioL1keRUqSJ7hwAAATI4tiCGw020.jpg

wKioL1keRUrhaJsiAAA7orTugi8504.jpg

通过上面的测试发现,缓存提高了查询的速度。

四、oracle进程结构

wKiom1keRUuAz0rYAALpj_gH9Mk724.jpg

Oracle有5个后台进程是必须启动的,否则数据库实例无法启动成功,分别是:进程监控(PMON)进程、系统监控(SMON)进程、数据写入(DBWR)进程、日志写入(LGWR)进程、检查点(CKPT)进程。

wKioL1keRUuzMVKJAAE9UKinBps559.jpg

wKiom1keRUyjh05DAANe4uvi8J4970.jpg

CKPT进程:确保数据缓冲区中所有修改过的数据块都被写入数据库文件的机制。保证数据库日志文件和数据文件的同步。

 

相关命令:

1、查看用户进程和数据库进程

wKioL1keRU3wQVMuAAFOgu0u2j8370.jpg

 2、查看守护进程

wKiom1keRU2glMe_AABj5j46VCA751.jpg

3、查看日志进程LGWR

wKioL1keRU7jsiv6AABl6ziopww421.jpg

五、oracle用户管理

当创建一个新数据库时,oracle将常见一些默认的数据库用户,如SYS,SYSTEM和SCOTT等用户。SYS和SYSTEM用户都是oracle管理用户,而SCOTT用户是oracle数据库的一个示范用户,SCOTT数据库里面包含一些测试展示用的示例表(用于学习交流)

1、默认数据库用户

1)SYS

SYS用户是oracle中的一个超级用户,数据库中所有数据字典和视图都存在SYS模式中,数据字典存储了用来管理数据库对象的所有信息,是oracle数据库中非常重要的系统信息。SYS用户主要用来维护系统信息和管理实例SYS用户只能以SYSOPER或SYSDBA角色登录系统

 

2)SYSTEM

SYSTEM用户是oracle中默认的数据库管理员,它拥有DBA权限。该用户模式中存储了oracle管理工具使用的内部表和视图。通常通过SYSTEM用户管理数据库的用户、权限和存储等。不建议在SYSTEM模式中创建用户表SYSTEM不能以SYSOPER和SYSDBA角色登录系统,只能以默认方式登录

 

3)SCOTT

SCOTT用户是oracle数据库的一个示范用户,一般在数据库安装时创建。SCOTT用户模式包含4个示例表其中一个是EMP表,使用USERS表空间存储模式对象

通常出于安全考虑,对于不同用途的表需要不同的访问权限,此时,就需要创建不同的用户,oracle中的create user命令用于创建用户,每个用户都有一个默认表空间和一个临时表空间。如果没有指定,oracle就将USERS设为默认表空间,将TEMP设为临时表空间。

4)Sysdba和sysoper两个系统权限区别 

sysdba和sysoper属于system privilege,也称为administrative privilege,拥有例如数据库开启关闭之类一些系统管理级别的权限。sysdba和sysoper具体的权限如下: 

【SYSOPER】权限,即数据库操作员权限,权限包括:

   打开数据库服务器

   关闭数据库服务器

   备份数据库

   恢复数据库

   日志归档

   会话限制

【SYSDBA】权限,即数据库管理员权限,权限包括:

   打开数据库服务器

   关闭数据库服务器

   备份数据库 恢复数据库

   日志归档

   会话限制

   管理功能

   创建数据库 

 

sysdba】拥有最高的系统权限,登陆后是sys。

【sysoper】主要用来启动、关闭数据库,sysoper登陆后用户是public。

 

2、创建自定义用户

步骤:

1)  选择用户名和密码

2)  识别用户需用于存储对象的表空间

3)  决定每个表空间的限额

4)  分配缺省表空间和临时表空间

5)  创建用户

6)  向用户授予权限和角色

语法:

CREATEUSER user

       IDENTIFIED BY password

       [DEFAULT TABLESPACE tablespace]

       [TEMPORARY  TABLESPACE tablespace]

       [QUOTA {integer [K|M] | UNLIMITED}ONtablespace

       [QUOTA {integer [K|M] | UNLIMITED}ONtablespace ] ...]

       [PASSWORD EXPIRE ]

案例1:创建用户zpf

wKiom1keRU-xruVwAARpy4RkcTE362.jpg

3、修改zpf用户的密码为123456789

wKioL1keRVDSKoK7AADdlE3EyJM291.jpg

4、删除用户zpf

wKiom1keRVHjb_4xAAIJ4bxrfks330.jpg

5、查询oracle的所有用户

wKioL1keRVLRWZwGAAQnZ0fxf2c436.jpg

wKiom1keRVOw4QZVAALK0b8A3Yk571.jpg

6、解锁用户

1)先查看hr用户的状态是锁定的

wKioL1keRVSRHI3sAADUB5oKvi8732.jpg

wKiom1keRVSxleNgAACM-40uB0s181.jpg

六、oracle数据库权限管理

   权限指的是执行特定命令或访问数据库对象的权利

   权限有两种类型,系统权限和对象权限

   系统权限允许用户执行某些数据库操作,如创建表就是一个系统权限

   对象权限允许用户对数据库对象(如表、视图、序列等)执行特定操作

   角色是一组相关权限的组合,可以将权限授予角色,再把角色授予用户,以简化权限管理。

1、使用系统权限

系统权限是指在数据库中执行某种系统级别的操作,或者针对某一类对象执行某种操作的权利,例如:在数据库中创建表空间的权利,或者创建表的权利,都属于系统权限,具体如下图:

wKioL1keRVWAyOCyAAKBBfONKPA109.jpg

常用的系统权限如下:

create session:连接到数据库

create table:创建表

create  view:创建视图

create sequence:创建序列

2、对象权限

对象权限是指针对某个特定模式对象执行操作的权利,只能针对模式对象来设置管理对象权限,包括:表、视图、序列、存储过程等。

wKiom1keRVWivV5AAAFNlnbs1fU569.jpg

3、授权

Oracle数据库用户有两种途径获得权限

1)直接向用户授予权限

2)将权限授予给角色,再将角色授予给一个或者多个用户

使用角色能更高效,方便地对权限进行管理,所以数据库管理员通常使用角色向用户授予权限,而不是直接向用户授予权限

Oracle中常用系统预定义角色有以下种类:

1)CONNECT:拥有连接数据库权限

2)RESOURCE:拥有创建表、触发器、过程等权限

3)DBA:数据库管理员,拥有管理数据库最高权限

新用户必须授予一定的权限才能进行相关数据库操作,授权通过grant语句,取消授权通过revoke语句

 

授权的语法:

1)授予CONNET角色给zpf

wKioL1keRVaRODBNAACSaCs2z4s013.jpg

2)同时授予CONNET,RESOURCE这2个角色给zpf

wKiom1keRVbjOiqRAACuBXWofSk959.jpg

3)允许用户zpf查询 SCOTT.emp表的记录

wKiom1keRVaQawfjAACx0CFt1H4601.jpg

4)允许用户zpf更新 SCOTT.emp表中的记录

wKioL1keRVbzp2J_AACuyS0rJhA001.jpg

5)允许用户zpf插入、删除、更新和查询SCOTT.emp表中的记录

wKiom1keRVfgT9wLAACu_sABWnY679.jpg

4、撤销权限的语法:

使用REVOKE命令撤销用户分配的权限或角色

1)撤销CONNET,RESOURCE这2个角色

wKioL1keRVeSTtvRAAC_XeQQY5w873.jpg

2)撤销zpf查询 SCOTT.emp表的记录的权限

wKiom1keRVjQ9JXzAAC-e3p77B8196.jpg

总结:

授予权限语法格式:grant   权限|角色 to   用户名;

撤销权限语法格式:remove  权限|角色 from 用户名;

 

案例1:为用户设置权限

1)首先建立用户zpf

wKioL1keRViT4s-lAAF9zmdV8QQ145.jpg

2)使用zpf用户登录

wKiom1keRVnDtjtNAAHCgpuTmE0663.jpg

3)使用新密码重新登录,提示没有任何权限

wKioL1keRVnwKIcrAACp57SFBQQ523.jpg

4)为用户授予session(连接到数据库)权限

wKiom1keRVrxt3snAAE2xX2jR0U921.jpg

5)用户zpf重新登录oracle

wKioL1keRVrytDcNAABxQCEdltE540.jpg

6)测试zpf能否创建表,提示权限不足

wKiom1keRVqRdw1sAAFaHpcPg3c709.jpg

7)授予用户zpf创建表的权限

wKioL1keRVui4_ggAAEkUs_POj4170.jpg

8)再次使用zpf登录,测试能够创建表

wKiom1keRYjREreHAAFDEDXJPk0948.jpg

9)测试插入数据,并查询

wKioL1keRYjiPu38AAFnLRljBdY271.jpg

10)查看用户拥有的权限

wKioL1keRYmi9YULAAGgtpLIPzI741.jpg

11)撤销用户zpf的权限

wKiom1keRYnR8aApAAF6J4qWy5M725.jpg

12)测试用户zpf能否查询scott.emp

wKioL1keRYnj9khkAAFQdraxKAE435.jpg

提示没有权限

13)授予用户查询scott.emp的权限

wKiom1keRYrB9SnWAAExH4OpHIw023.jpg

14)测试查询scott.emp

wKiom1keRYugFk_1AAGYVUVDOpY988.jpg


本文转自Mr大表哥 博客,原文链接: http://blog.51cto.com/zpf666/1927384    如需转载请自行联系原作者


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
Oracle 关系型数据库 数据库
Oracle系列之四:用户管理
Oracle系列之四:用户管理
|
3月前
|
存储 SQL Oracle
初步了解oracle的体系结构
初步了解oracle的体系结构
37 1
|
6月前
|
SQL Oracle 关系型数据库
【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理
【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理
69 1
|
6月前
|
存储 SQL Oracle
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
107 7
|
6月前
|
存储 SQL Oracle
Oracle系列十九:Oracle的体系结构
Oracle系列十九:Oracle的体系结构
|
存储 SQL 运维
Oracle数据库系统管理与运维 | Oracle体系结构与性能优化
Oracle数据库系统管理与运维 | Oracle体系结构与性能优化
266 0
Oracle数据库系统管理与运维 | Oracle体系结构与性能优化
|
Oracle 关系型数据库 数据库
|
Oracle 关系型数据库 数据库
Oracle用户管理
Oracle用户管理
|
存储 Oracle 关系型数据库
4 Oracle 用户管理
学习了解4 Oracle 用户管理。
186 0
|
Oracle 关系型数据库 数据库
oracle学习6-oracle用户管理
oracle学习6-oracle用户管理
174 0