Oracle体系结构

数据库文件组成

0 速览

1.数据文件

2 控制文件

3 联机重做日志文件

4 参数文件

5 归档重做日志文件

6 诊断文件

1)参数文件(启动实例-内存)

参数文件的作用

用来生产实例

实例启动时会读这个spfile文件,根据其中的参数生产实例

Oracle会根据参数文件向操作系统申请内存,然后会启动一堆进程

指向控制文件

参数文件的位置

SQL> show parameter spfile;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /opt/oracle/product/12.2.0.1/dbhome_1/dbs/spfiledev101.ora

参数文件的内容

[oracle@txy dbs]$ strings spfiletxydb.ora
txydb.__data_transfer_cache_size=0
txydb.__db_cache_size=268435456
txydb.__inmemory_ext_roarea=0
txydb.__inmemory_ext_rwarea=0
txydb.__java_pool_size=16777216
txydb.__large_pool_size=33554432
txydb.__oracle_base='/opt/oracle'#ORACLE_BASE set from environment
txydb.__pga_aggregate_target=536870912
txydb.__sga_target=1023410176
txydb.__shared_io_pool_size=50331648
txydb.__shared_pool_size=603979776
txydb.__streams_pool_size=33554432
*.audit_file_dest='/opt/oracle/admin/txydb/adump'
udit_trail='db'
*.compatible='12.2.0'
*.control_files='/opt/oracle/oradata/txydb/control01.ctl','/opt/oracle/oradata/txydb/control02.ctl'
*.db_block_size=8192
*.db_name='txydb'
*.diagnostic_dest='/opt/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=txydbXDB)'
*.enable_pluggable_database=true
*.local_listener='LISTENER_TXYDB'
*.memory_target=1476m
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tables
pace='UNDOTBS1'

具体内容

*.control_files=     ##一个或多个控制文件的绝对路径
db_files			##数据文件的最大数量
*.processes=300		##server_processs的最大数量
db_block_size

有两种参数文件

静态参数文件(pfile)和动态参数文件(spfile)

SPFILE: 格式 SPFILE+<ORACLE_SID>.ora 二进制文件

PFILE: 格式 init+<ORACLE_SID>/init.ora 普通文本文件

两种文件相互创建

[oracle@orcl19c dbs]$ rm -rf spfileorcl19c.ora
##shutdown immediate
##再次启动
SQL>  startup;
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/opt/oracle/product/19c/dbhome_1/dbs/initorcl19c.ora'
##报错了是吧?

删除了 sp

2)控制文件(指向数据文件)

每个数据库都只有一个控制文件(但可以有多个副本)

控制文件的作用

指向数据文件的位置与redo文件位置;

存储维护数据库完成性的信息:序列号与时间戳。使用RMAN备份,控制文件将存储这些备份的信息。

控制文件的内容

[oracle@test101 dev101]$ strings control01.ctl
}|{z
;DEV101
WBDEV101
WBDEV101
dev101
dev101
/opt/oracle/oradata/dev101/redo03.log
/opt/oracle/oradata/dev101/redo02.log
/opt/oracle/oradata/dev101/redo01.log
/opt/oracle/oradata/dev101/users01.dbf
/opt/oracle/oradata/dev101/undotbs01.dbf
/opt/oracle/oradata/dev101/system01.dbf
/opt/oracle/oradata/dev101/sysaux01.dbf
/opt/oracle/oradata/dev101/temp01.dbf
/opt/oracle/oradata/dev101/ss_data01.dbf
/opt/oracle/oradata/dev101/redo03.log
/opt/oracle/oradata/dev101/redo02.log
/opt/oracle/oradata/dev101/redo01.log
/opt/oracle/oradata/dev101/users01.dbf
/opt/oracle/oradata/dev101/undotbs01.dbf
/opt/oracle/oradata/dev101/system01.dbf
/opt/oracle/oradata/dev101/sysaux01.dbf
/opt/oracle/oradata/dev101/temp01.dbf
/opt/oracle/oradata/dev101/ss_data01.dbf
SYSAUX
SYSTEM
UNDOTBS1
USERS

3)联机重做日志文件

首先解释术语

联机重做日志 重做日志 在线日志 是一样的

另外一种日志:归档日志文件,就是在线日志文件的历史备份

它是联机的(正在使用中)

每个数据库至少有两个联机重做日志文件。

数据库至少有两个组,组内每个文件称为一个成员,每组至少一个成员在运行。

文件内容

存储着数据库的变更向量(不仅仅是DML DDL这些操作),若数据库受损则可以使用这些文件,将它们回复到发生故障那一刻前的状态。

日志组

为什么需要两个组呢?

一个组正在接受更改,另一个组用于备份(即进行归档

因为日志是不停记录着的,所以

内存组成

内存基本结构

SGA PGA UGA(这个比较小) 软件代码区

SGA包含:

必须存在的:

高速缓存

日志缓冲区

共享池

可能包含的:

大池 JAVA池 流池 其他缓存池

SGA 与 PGA

SGA是共享的。

PGA是非共享的内存区域

启动时间

当实例启动时分配SGA

当server process启动时分配PGA

1)数据缓冲区缓冲

database buffer cache SGA中最大的一部分

缓存的作用

是Oracle执行SQL的区域。存数据块的拷贝信息

从数据文件没读一次到buffer cacha 就有一次IO

减少物理读(物理读:从数据文件里读),如果buffer cahe有的话就从内存里取,就不用IO了

数据块

数据文件中数据块是8k大小,读取到buffer中也是8k

2)重做日志缓冲

是一个循环写的缓冲区

作用:存储改变信息,

执行delete语句的时候,会先生成一条redo log,会先放在redo log buffer里

commit的时候,才会写到 redo log(文件)里

3)共享池

share pool

作用

语法分析,编译,生产执行计划,运行执行计划。

共享,就是保存共享的执行计划

PGA的内容

包含单个服务器进程所需的数据与控制信息。比如每个人session传入的sql绑定变量,如果session进行了排序或者hash链接操作,也会使用PGA中的内存。

进程组成

有哪些进程

Oracle实例有一下几种不同的进程:

1 客户端进程 client process(也叫用户进程,因为是在客户端的)

2 ORACLE 进程

​ 后台进程 background process

​ 服务器进程 server process

​ 从属进程

每个server p 都有自己的PGA

会话是怎么产生的?

会话(session)就是user process 与 server process 连接产生的

session的信息保存在 PGA 的uga 中

服务器进程 server process

作用:用来处理客户端发出的请求。客户端进程总是通过单独的服务器进程与数据库通信。

如果有20个客户端进程连接到实例,就有20个server process提供服务

执行的任务:

解析SQL

执行PL/SQL

从数据文件中读取数据块读入进buffer cache

返回结果信息

注意:不仅仅user process会产生

后台进程

后台进程

查看后台进程

select pname,program from v$process
where pname is not null

PNAME PROGRAM
----- ------------------------------------------------
PMON  oracle@txy.example.com (PMON)
CLMN  oracle@txy.example.com (CLMN)
PSP0  oracle@txy.example.com (PSP0)
VKTM  oracle@txy.example.com (VKTM)
GEN0  oracle@txy.example.com (GEN0)
MMAN  oracle@txy.example.com (MMAN)
RECO  oracle@txy.example.com (RECO)
GEN1  oracle@txy.example.com (GEN1)
SCMN  oracle@txy.example.com (SCMN)
DIAG  oracle@txy.example.com (DIAG)
OFSD  oracle@txy.example.com (OFSD)
SCMN  oracle@txy.example.com (SCMN)
DBRM  oracle@txy.example.com (DBRM)
VKRM  oracle@txy.example.com (VKRM)
SVCB  oracle@txy.example.com (SVCB)
PMAN  oracle@txy.example.com (PMAN)
DIA0  oracle@txy.example.com (DIA0)
DBW0  oracle@txy.example.com (DBW0)
LGWR  oracle@txy.example.com (LGWR)
CKPT  oracle@txy.example.com (CKPT)

PNAME PROGRAM
----- ------------------------------------------------
LG00  oracle@txy.example.com (LG00)
SMON  oracle@txy.example.com (SMON)
LG01  oracle@txy.example.com (LG01)
SMCO  oracle@txy.example.com (SMCO)
W004  oracle@txy.example.com (W004)
LREG  oracle@txy.example.com (LREG)
PXMN  oracle@txy.example.com (PXMN)
MMNL  oracle@txy.example.com (MMNL)
MMON  oracle@txy.example.com (MMON)
D000  oracle@txy.example.com (D000)
S000  oracle@txy.example.com (S000)
TMON  oracle@txy.example.com (TMON)
QM02  oracle@txy.example.com (QM02)
TT00  oracle@txy.example.com (TT00)
TT01  oracle@txy.example.com (TT01)
TT02  oracle@txy.example.com (TT02)
AQPC  oracle@txy.example.com (AQPC)
CJQ0  oracle@txy.example.com (CJQ0)
P000  oracle@txy.example.com (P000)
P001  oracle@txy.example.com (P001)
P002  oracle@txy.example.com (P002)

PNAME PROGRAM
----- ------------------------------------------------
P003  oracle@txy.example.com (P003)
P004  oracle@txy.example.com (P004)
P005  oracle@txy.example.com (P005)
P006  oracle@txy.example.com (P006)
P007  oracle@txy.example.com (P007)
W003  oracle@txy.example.com (W003)
Q002  oracle@txy.example.com (Q002)
Q003  oracle@txy.example.com (Q003)
W000  oracle@txy.example.com (W000)
W006  oracle@txy.example.com (W006)

51 rows selected

1)LGWR

LGWR()

2)PMON

process monitor process ,进程监视器进程

1 监视其他的后台进程,异常时执行进程回复

2 清理buffer cache

3 将实例注册到Oracle Net Listener

数据库的启动

shutdown -> no mount -> mount -> open

快速浏览

1)no mount 启动实例

由此可知参数文件的作用

1、搜索并读取参数文件(spfing_ -> spfile.org -> init_SID.org)

2、分配SGA

3、启动后台进程

4、启动警报与追踪文件

--若nomount启动

select * from v$datafile;
--会什么都没找到
alter database mount;
select * from v$datafile;

2)mount 装载

关联实例与数据库文件

控制文件已经打开了,但是用户信息不能查看

读取控制文件并获取数据文件与重做日志文件

只是获取文件而已,并不检查文件检查存在于有效性

这时候普通用户会这样

SQL> conn sim/11111111;'
ERROR:
ORA-01033: ORACLE initialization or shutdown in progress
Process ID: 0
Session ID: 0 Serial number: 0

但是

select * from hr.employess; --这样是查不到的

3)open

任何有效的用户可以

1 打开数据文件

2 打开重做日志

3 检查数据库一致性(可以做CRUD了)

其他打开方式

startup nomount:通过参数文件,分配sga,启动数据库后台进程,不打开控制文件和数据文件,不能访问数据库。

startup mount:仅给dba进行管理操作,不允许数据库用户访问。仅当前实例的控制文件被打开,数据文件未打开,在这个模式下可以进行如下操作:重命名数据文件、添加取消或重命名重做日志文件、设置归档模式、设置闪回、执行完整的数据库恢复操作等。

startup open:startup的默认参数就是open,打开数据库,允许数据库的访问,当前实例控制文件中所描述的所有文件都已经打开。

startup pfile=FILENAME:以FILENAME为初始化文件启动数据库,不是采用默认初始化文件。

startup force:中止当前数据库的运行,并开始重新正常的启动数据库。

startup restrict:只允许具有restricted session权限的用户访问数据库,该模式下登陆者可做如下操作:执行数据库数据的导出或导入、执行数据装载操作用SQL*Loader、暂时阻止一般的用户使用数据、在某个移植过程和升级操作过程中restricted session登陆后可使用ALTER SYSTEM 语句来禁止RESTRICTED SESSION特性ALTER SYSTEM DISABLE RESTRICTED SESSION;如果是在非受限模式下打开的数据库,后来发现需要限制访问,此时可以使用带ENABLE RESTRICTED SESSION 子句的ALTER SYSTEM 语句来完成。

startup recover:数据库启动,并开始介质恢复。

数据库的关闭

A = ABORT 强制

I

T

N

物理文件

一个段可以分布在多个数据文件中,一个数据文件可以包含多个段的一部分或全部分
这带来很多好处:
1.如果一个段就是一个数据文件,将会产生数千数万的文件
2.不受操作系统文件大小的限制
       ① 段的存在,并不是依赖于表的。建立一些其它逻辑对象也会会创建段,如索引、物化视图
       ② 一张普通表(堆组织表)对应一个段
       ③ 表的建立,并不意味着段的创建,如临时表(Global Temporary Table)
       ④ 一张表也可以创建多个段,如分区表(Partition Table)
       ⑤ 多个表也可以共存于一个段,如簇表(Cluster Table

典型的段是表(Table),但也有其他类型的段

2 块

数据文件就是连续编号的Oracle块,

3 区

管理一个个块是比较麻烦的,所以块组合成了区间(extend)

区间是数据文件中一组连续编号的块

LONG TIME 问题、

1 ) 数据库有哪些文件?这些文件有什么作用?

参数文件

2)数据库启动的过程

nomout : 打开实力,加载参数文件

mount : 加载数据文件吗,挂载数据库
*

posted on 2022-11-16 10:51  兔哥DB  阅读(89)  评论(0编辑  收藏  举报

导航