Oracle 11g R2 体系结构

简介:  Oracle 11g R2体系结构安装oracle软件----创建数据库----在数据库中创建表----表里存储信息---这些表文件需要存储在物理硬盘上面。假如有一个用户(这个用户可以是远程用户,也可以是本地的,也可以是一个应用程序)连接到oracle数据库上面,用户是不能直...

 Oracle 11g R2体系结构

安装oracle软件----创建数据库----在数据库中创建表----表里存储信息---这些表文件需要存储在物理硬盘上面。

假如有一个用户(这个用户可以是远程用户,也可以是本地的,也可以是一个应用程序)连接到oracle数据库上面,用户是不能直接连接在硬盘上存储的数据文件,所以在oracle中要运行一个实例,实例并不是保存在硬盘上面的,实例是内存的一部分,而库和表文件是存放在硬盘上面的,用户不能直接访问库里面的数据,只能访问实例,实例是一个特殊的内存块,只有实例能和数据库直接通信,在咱们的实验环境中实例和数据库是在同一台机器上,我们称之为单实例环境,对于用户而言所有的操作都是在实例中完成的,oracle为实例划分了一个内存块,这个内存块我们称之为SGA,其实oracle实例启动的时候,将会分配一个SGA系统全局区并启动一些oracle的后台进程(守护进程)。

SGA核心组件介绍:

oracle中内存=SGA+PGA

一个实例只能有一个SGA,所有的服务器进程和后台进程都共享一个SGA

PGA:

我们先看一下一个select语句是如何被执行的?

如果hr用户写了一个select  *  from scott.emp;

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

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

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

wKiom1kVMFajoFPbAACxQ5IRpTE725.png-wh_50

wKiom1kVMHjx64asAABM-EhidsY825.png-wh_50 

sql plus中可以用以下方式查看,图中“0”表示自动化管理

wKioL1kVMIOwRHyMAAAhm8YVu5M893.png-wh_50 

可以从v$sgainfo中查看shared pool size

SQL> select name,bytes/1024/1024||'MB' from v$sgainfo;

Shared Pool Size

256MB

Large Pool Size

16MB

Java Pool Size

16MB

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

举例:

用户第一次访问scott.emp的内容

SQL> set timing on

SQL> select * from scott.emp;第一次执行sql语句

已选择14行。

已用时间:  00: 00: 00.05

SQL> /再次执行上一条命令所用的时间为00: 00: 00.00

已选择14行。

已用时间:  00: 00: 00.00

总结:buffer cache缓存数据本身,library cache缓存sql语句本身。

可以通过show parameter db_cache_size查看buffer cache的大小

wKioL1kVMKnzcClKAAAXXfRn3rY117.png-wh_50 

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

1.2. Oracle 进程

1. 用户进程

Ps elf | greporacleocl |grepv grep

wKiom1kVMLmA9FoWAAB3zHMSZHo093.png-wh_50 

2. 数据库进程

Ps elf |greporacleorcl

wKiom1kVMOmx4TJJAACMvMcrs9U704.png-wh_50 

3. 守护进程

Ps elf |grep oha

wKioL1kVMPTT_15lAAAVU7ZIX4M620.png-wh_50 

大池:SGA中,大池是一个可选的缓冲区域,管理员可以根据需要对其进行配置,在大规模输入输出及备份过程中需要大池作为缓存空间,例如,大数据操作、数据库备份与恢复之类的操作。

Java池:Java池是一个可选的缓冲区,但是在安装java或者java程序时必须设置Java池,它用于编译Java语言编写指令。

 

六大核心进程:

 

DBWn进程:用来将buffer cache中的脏数据写入到硬盘中数据文件中。

 

什么是脏数据,例如我执行如下语句

SQL> update emp set sal=sal+100;

此时修改过的数据存放在内存中,并没有保存到硬盘上的数据文件中,这些数据缓存在buffer cache中,该事务还没有提交(commit),这样修改过还没有写入硬盘数据文件的数据我们称之为脏数据。其实此时在打开一个会话,使用SCOTT用户连接查看emp表中数据是未修改过的数据。所以在oracle中这样的操作是异步写入,多个进程可以同时写入,多个账户就会有多个DBWn进程,其实进程名叫DMW后面的n是产生的进程标识

SQL> update scott.emp set sal=sal+100;

已更新14行。

SQL>

wKiom1kVMQPRN6ACAABX5LXICxM346.png-wh_50 

LGWR:日志写入进程只有一个

wKiom1kVMQ7yj8PvAAAXSofG9RM899.png-wh_50 

当用户commit(提交事务)时触发lgwr进程

red log buffer空间的三分之一空间被使用完时会触发lgwr进程

把脏数据写入磁盘之前,该LGWR进程将日志信息先写入到日志文件中,每隔3秒中执行这样的动作。

LGWR进程不能有多个,因为日志是顺序是写入的,不能做并行写入,否则无法做数据恢复。

CKPT进程:检查所有数据文件和控制文件的头部是否一致,是确保在数据缓冲区中所有修改过的数据块都被写入到数据文件中的一种机制,就是确保数据完整性的一种机制。但检查点完成后,CKPT进程负责更新数据文件和控制文件的头部信息,并保存检查点信息,以保证数据库日志文件和数据文件的同步。其原理是在数据库恢复时,只需找到CKPT保存的最后一次检查点,就可以根据它确定在日志文件中恢复数据的起始位置,重新执行之后的日志信息即可。

SMON进程:如果数据文件和控制文件头部不一致,就会触发SMON进程。在实例启动时SMON进程会检查所有数据文件的同步信息与控制文件中记录的检查点信息是否一致,不一致就启动实例恢复操作。其实CKPT进程是给SMON进程使用的。

PMON进程:进程监控进程,PMON进程管理用户会话,这个进程会在某个会话出现问题时执行的适当的操作。例如用户的个人计算机在登录到数据库时重新启动,PMON就能能够检测到这个问题,而且还会整理用户正在进行的任何操作。


1.3. oracle存储结构

数据文件相关知识

想查看系统中有多少个数据文件我们可以通过动态数据字典或静态数据字典来查看:通过静态数据字典查看数据文件

wKioL1kVMW-zXfjRAACyCsXKu_U974.png-wh_50 

通过动态数据字典来查看数据文件

wKioL1kVManjnWrQAACps9si4jc956.png-wh_50 

直接查看数据文件的内容是看不到的,必须通过一个逻辑的结构即表空间来查看数据文件的内容。表空间是一个逻辑存储结构,而数据文件是一个物理的结构。

如何查看表空间

 

也可以通过dba_tablespaces查看表空间

wKiom1kVMbqDss_qAACoGHVrjU4345.png-wh_50 

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

wKioL1kVMcuwIFlTAACuyCCun0E662.png-wh_50 

也可以查看表空间的大小

wKiom1kVMdnxhK_sAACXJqmpq2E149.png-wh_50 

也可以在上述的表空间中创建新的数据文件。如果表空间不够用了,只需创建相应的数据文件即可。表空间大小就是组成数据文件的大小的总和,最终数据文件存放在硬盘里的,但是我们可以把数据文件存放在不同的硬盘里面,只要在一个表空间即可,这样就解决了硬盘大小对文件的限制,可以将多个硬盘中的数据文件组成一个表空间。

所以在表空间中DBA会存放很多的表,视图,索引,同义词等对象。

段:例如在xx表空间DBA创建了一个名为test的表,这张表表空间所占用的空间,我们称之为段。根据段中存储的对象的不同分为了数据段,索引段,回退段,临时段等

可以查看段的信息

wKioL1kVMefAYlhIAACb3IeR-Ok711.png-wh_50 

对于段又有个更小的单位,称之为“区”

区(extent):区是磁盘空间分配的最小单位,磁盘按区划分,每次至少分配一个区,区由连续的数据块组成,段主要由一个或多个区构成,当段创建时,它至少包含一个区,当段中所有空间已经使用完成时,系统自动为该段分配一个新区,区不能跨数据文件存在,只能存在于一个数据文件中。

段是由区组成的,段必须是区的整数倍,假如一张表是25MB,一个区大小是4MB,那么段的大小是28MB,如果在表里添加了3MB的数据,此时段的空间还能容纳表,现在表的大小是28MB,如果又添加了1MB,此时29MB,那么段的空间是32MB.

wKiom1kVMfOTHONXAADEkw8MpaA218.png-wh_50 

查看EXAMPLE表空间的区和段的分布情况

wKioL1kVMf_jgz5AAAC0ztVYH9Y396.png-wh_50 

oracle数据库中最小的存储单位是块(block--8KBoracle数据库中的数据存储于数据块中。数据块是oracle服务器所能读取或写入的最小存储单元,oracle服务器以数据块为单位管理数据文件的存储空间,数据块的取值范围为2-64KB,其默认大小与oracle版本有关。

wKioL1kVMguwAvR1AAD8GDPlZY0090.png-wh_50 

查看操作系统的最小存储单元

[root@orclsrv ~]# tune2fs -l /dev/sda1

通过OEM也可以查看这些信

 wKioL1kVMhuypqixAADL9DEHRXM543.png-wh_50

创建表空间和数据文件

SQL> create tablespace xx datafile '/u01/xx.dbf' size 100m autoextend on

2  next 5m maxsize 200m;

 

表空间已创建。

wKiom1kVMjCwaPkwAAEPx-pMyh0378.png-wh_50 

wKioL1kVMqjwX-ASAABvHL1axpg802.png-wh_50

修改表空间的名字为yy

 

 wKiom1kVMrWiluNuAAAL_0PVVCU562.png-wh_50

wKioL1kVMt2y7Z60AABqzURdeYQ964.png-wh_50

为了好管理,我们希望表空间的名字和数据文件的名字一致。

解决办法:

1. 使用操作系统命令将数据文件拷贝一份

2. 把表空间offline

3. 然后对数据文件重命名

wKioL1kVMw3h4gSUAAAHOyQ6zaM282.png-wh_50

wKiom1kVMxWSujX5AAAPb725UUs199.png-wh_50 

将表空间offline

wKiom1kVMx6BioKYAAAOqomcAx0460.png-wh_50 

wKioL1kVMyfTGWtDAABfXy17PV0645.png-wh_50 

对数据文件重命名

wKiom1kVMzGTPgMGAAAOsXLESXk017.png-wh_50 

查看修改情况

wKiom1kVM2Ki7scHAABpaWkgMs8434.png-wh_50 

将表空间online

wKiom1kVM2zSl3iVAAAkGd6XoBg301.png-wh_50 

提示需要恢复/u01/yy.dbf

wKioL1kVM3fiPfK7AAAO6QSAPvE782.png-wh_50 

将表空间online

wKioL1kVM4PRrP8EAAANsTLeBeU932.png-wh_50 

wKiom1kVM42hUCjLAABdgGZfxic300.png-wh_50 

如何扩展表空间大小

1. 直接改变数据文件大小

wKiom1kVM8zBfHCdAAAOFCOcvmg736.png-wh_50 

wKioL1kVM9eykTV8AABoranSUGE136.png-wh_50 

2. 给表空间增加数据文件

如果表空间所在的分区的空间不够用了

wKiom1kVM-KTB4DFAAAPxpyHnZs679.png-wh_50 

wKioL1kVM-zjgOrCAAAOLjAmc1w800.png-wh_50 

wKiom1kVM_XAretzAABtZiuyUoo034.png-wh_50 

删除表空间

wKioL1kVM_6xwdwBAAAQ1_-XuQ0798.png-wh_50 

创建临时表空间

wKiom1kVNAnAj6dLAABiU1JN-w8372.png-wh_50 

wKioL1kVNCiQPCx7AAA0VBQwiio927.png-wh_50 

创建临时表空间

wKiom1kVNDKC91fsAAA0VBQwiio281.png-wh_50 

 wKiom1kVNF6xXepsAAAVODTNgBM202.png-wh_50

删除临时表空间与删除表空间的命令是一样的。

wKioL1kVNFaA-m_IAAAQygVCUQQ082.png-wh_50 

1.4. oracle 用户管理

如果想查看oracle系统中存在用户可以查看dba_users视图

wKioL1kVNImy6ltwAABxcjoyEgc242.png-wh_50 

如果使用sqlplus查询需要提前格式化

SQL> col username for a20

SQL> col account_status for a20

SQL> col default_tablespace for a20

SQL> set linesize 120

SQL> set pagesize 120

SQL> select username,account_status,default_tablespace from dba_users;

 

USERNAME     ACCOUNT_STATUS  DEFAULT_TABLESPACE

-------------------- -------------------- --------------------

MGMT_VIEW     OPEN SYSTEM

SYSOPENSYSTEM

SYSTEM     OPENSYSTEM

DBSNMP     OPENSYSAUX

SYSMAN     OPENSYSAUX

SCOTTOPENUSERS

OUTLN     EXPIRED & LOCKED  SYSTEM

FLOWS_FILES     EXPIRED & LOCKED  SYSAUX

MDSYS     EXPIRED & LOCKED  SYSAUX

ORDSYS     EXPIRED & LOCKED  SYSAUX

EXFSYS     EXPIRED & LOCKED  SYSAUX

 

Oracle 用户管理---

要想访问数据库,任何人都必须成为能够通过oracle身份验证的有效数据库用户,我们可以配置应用程序要求每个需要进行访问的个体都具有不同的数据库账户,也可以配置应用程序自身作为公共用户连接数据库并在内部处理应用程序级别的权限。无论选用哪种方法,在数据库内部都需要创建一个或多个允许操作数据的用户。

1.5. 用户与模式(schema

创建用户的语法:

Create user用户名 identified by 密码 default tablespace表空间 quota 大小 on 表空间;

注意:在创建用户的时候虽然用户名写的时小写的,但是存储到数据字典的时候却是大写的,比如create user tom.如果非要使用小写的话,用户名需要使用双引号括起来 create user tom

创建的用户没有任何权限,连登陆数据库的权限都没有。

如果没有设置用户对某个表空间的配额,那么即使这个用户对该表空间有写权限,也是无法写入的。

举例说明:

查看HR用户的状态

wKiom1kVNJWD0k9RAAAWYUSaf5g876.png-wh_50 

修改HR用户的密码为oracle

wKioL1kVNJ3R0tM2AAAf5t-yt9k105.png-wh_50 

手工设置过期;

wKiom1kVNKiBYMOlAAAiCPJ8cD4015.png-wh_50 

解锁用户

wKioL1kVNNqSRPzLAAAcdcDGdSo671.png-wh_50 

举例说明oracle的授予权限和撤销权限

在创建用户之前,创建一个表空间xxx

创建一个表空间xxx

createtablespace xxx datafile '/u01/xxx.dbf' size 100m autoextend on next 10m maxsize unlimited;

创建用户tom

create user tom identified by oracle;

查询创建的用户tom

wKioL1kVNOTSRQNRAABkpsUHpjQ382.png-wh_50 

虽然创建的时是小写tom,但存储到数据字典中的是大写,所以查询时也需要写大写

wKioL1kVNOzh_jbWAABcI25zgQo630.png-wh_50 

删除tom用户

Drop user tom;

create user"tom" identified by oracle;

wKiom1kVNPbRh0xvAABbgvW66_I719.png-wh_50 

删除tom用户

wKiom1kVNWLTtNnpAABfKVnhjNw771.png-wh_50 

正确的删除方式应该是:

drop user"tom";

创建用户tom,默认的表空间是XXX,并没有指定配额,所以tom用户也无法在xxx表空间上创建对象

wKiom1kVNXLipWsiAAApbAtAX-0126.png-wh_50 

使用tom用户连接数据库的结果

wKioL1kVNZmATyXCAAA_tKyoCbQ867.png-wh_50

wKiom1kVNX3wqeRhAAApuRl2wTI468.png-wh_50 

SQL>conn sys/oracle as sysdba

Drop user tom; 删除tom用户

创建tom用户的同时指定默认的表空间是xxxtom用户的磁盘配额是10m

可以使用dba_ts_quotas视图查看每个用户的磁盘配额

 

wKioL1kVNYnhODM1AABe21WINLU564.png-wh_50 

刚才我们测试创建的tom用户连创建会话的权限都没

wKiom1kVNanQjGtQAAApuRl2wTI236.png-wh_50 

1.6. 为用户授予权限

tom用户授予session权限

SQL>conn sys/oracle as sysdba

SQL> grant create session to tom;

 

授权成功。

测试一下连接

wKioL1kVNd7yDZm6AAALJPXnaq4185.png-wh_50 

测试tom用户是否能够创建表

wKiom1kVNemA0_hmAAAZPfTbPp4215.png-wh_50 

tom用户授予创建表的权限

 wKioL1kVNlWTdGffAAAYbolx3Uc296.png-wh_50

创建aa


wKioL1kVNmLTjaXpAAAYbgAc2fY093.png-wh_50 

测试tom用户能否为表插入记录,可以插入记录了。

wKioL1kVNnbwG6e8AAAYbgAc2fY534.png-wh_50 

1.7. 撤销权限

查看tom用户当前拥有的权限

 

撤销tom用户的create table 权限

wKiom1kVNqThRcVLAAAuJNv9Nps047.png-wh_50 

测试tom用户能够查看SCOTT用户下的emp

wKioL1kVNq7CsqypAAAfg-ummFE684.png-wh_50 

使用sys用户连接数据库

wKiom1kVNrnySal5AAAhdTwBJyQ142.png-wh_50 

tom用户授权select scott用户下的emp表的权限

wKioL1kVNsOBigR6AAALYajx7q0055.png-wh_50 

使用tom用户连接数据库

wKiom1kVNs6RlWQSAAAzW8UoOKQ758.png-wh_50 


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
SQL 存储 监控
Oracle 11g R2 体系结构
 Oracle 11g R2体系结构 安装oracle软件----创建数据库----在数据库中创建表----表里存储信息---这些表文件需要存储在物理硬盘上面。 假如有一个用户(这个用户可以是远程用户,也可以是本地的,也可以是一个应用程序)连接到oracle数据库上面,用户是不能直...
1285 0
|
监控 Oracle 关系型数据库
|
11月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
914 93
|
10月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
479 0
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
11月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
700 8
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
607 11
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
2761 28
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle RMAN的目录数据库
Oracle RMAN默认将备份元信息存储在控制文件中,但控制文件损坏或丢失会导致恢复失败,且备份增多会使控制文件无限增长。为解决这些问题,Oracle引入了RMAN目录数据库(Catalog Database),专门用于存储RMAN备份的元信息。使用目录数据库可提升备份管理效率,支持多数据库共享、长期备份历史记录存储,并可保存RMAN脚本。本文详细介绍了如何创建目录数据库、注册目标数据库及其操作步骤。
385 0