数据库作用
1. 并发(DBMS)
2. 复杂计算
3. 便于存储
4. 安全、量大
Oracle数据体系
Oracle = instance + database
instance = cache + process
database = files(data files + control files + redo log files) cache = PGA+SGA
内存(cache)
内存管理方式
AMM:自动内存管理,给一个总数,oracle自动分配给sga和pga
show parameter memory
ASMM:手工指定sga和pga大小
show parameter sga
# sga_max_size:实例最多可以使用的大小,只能改到参数文件中,重启生效。
# sga_target:启动实例的时候分配的大小,可以动态调整。
# 修改sga大小
alter system set sga_target=5G**
注:一般情况下这两个参数配置成一样。
SGA
System Global Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。
database buffer cache
来自于数据文件中的数据和修改过将要写入到数据文件中的数据(脏数据)。
shared pool
library cache+data dictionary cache
library cache:经过解析的sql语句,下次使用的时候可以直接从cache中读取
data dictionary cache:记录了数据库的详细信息及参数
Redo log buffer
数据每发生一次改变则Redo log Buffer就会添加一条记录,用户事务回滚。
PGA
Process Global Area是为每个连接到Oracledatabase的用户进程保留的内存。
进程
前台进程
client连接数据库时产生的进程
后台进程
DBWn:将db buffer cache中的脏数据写到数据文件中。 1. 检查点发生 2. 脏数据达到阈值 3. 找不到空余cache
LGWR:将redo log buffer中的数据写入到redo log files中。 1. 事务提交 2. 每隔三秒 3. redo log buffer满三分之一 4. redo log buffer满1M 5. DBWn把内存中的脏数据写入到数据文件之前,日志写先行
SMON:数据库垃圾收集者, 1. 清理空间 2. 接合空闲空间 3. 将不可用文件的事务恢复成活动状态
PMON:用于清理失败的服务器进程;监控oracle进程
CKPT:该进程在检查点出现时,负责跟新全部数据文件的头部信息,标记该检查点。
ARcn:将以填满的在线日志文件拷贝到指定的存储设备。archive log list
数据库结构
逻辑结构
os block:4K
oracle block:8K
物理结构
data file
[[参数#dba_data_files]]
数据文件:存储实际数据。
parameter file
作用:存储数据库的配置参数,如SGA多大、shard pool多大
pfile:可读,init+instance name+.ora,不可以动态修改
spfile:不可读,spfile+instance name+.ora,可以动态修改。数据库启动时将该文件加载到内存
启动方式:
1. 默认搜索路径,优先使用spfile,没有则使用pfile
2. 指定pfile启动,startup pfile=***
3. 如何确定数据库是哪种启动方式:alter文件
4. create pfile='***' form spfile; create spfile form pfile = '***';
修改参数文件:
# 修改参数文件,当前不生效,重启生效
scope=spfile
# 修改内存,当前生效,重启丢失
scope=memory
control files
控制文件定义了数据库当前的物理状态,如datafile位置、SCN号、检查点信息、数据库结构信息。
# 查看控制文件按信息
show parameter control_files;
多路复用
注意:控制文件是在mount状态下读取的,所以说,一定要在mount之前,去操作控制文件,一但数据库启动到mount就不能操作控制文件了。
配置步骤:
1. 修改参数
2. 停库:shutdown immediate
3. 拷贝:cp xx xx
4. 启库: startup
alter system set control_files = '/oradata/wjhdb/control01.ctl','/oradata/wjhdb/control02.ctl','/arch/wjhdb/control03.ctl' scope=spfile;
在开库状态删除了控制文件,需要将数据库shutdown abort
,然后复制备份文件,开库。
datafile
数据文件,一个数据文件只能属于一个表空间
redo logfile
存储重做日志:redo数据,至少需要两组。
查询视图:
- **
V$LOG
**:用于查询日志组的信息(如大小、状态、序列号等)。 - **
V$LOGFILE
**:用于查询日志文件的信息(如路径、状态等)。
v$log中status状态说明
状态 | 说明 |
---|---|
CURRENT | 当前正在使用的重做日志组。 |
ACTIVE | 重做日志组中的数据尚未写入数据文件,但已提交。 |
INACTIVE | 重做日志组中的数据已写入数据文件,不再需要。 |
UNUSED | 重做日志组尚未使用过。 |
若有三组redo log,其中两组处于active状态,一组位于current状态,如果需要写入新的redo log组,则会出现数据库会hang住。
扩容
- 修改数据文件大小
# 扩组数
alter database add logfile group 4 ('/oradata/lchdb/redo04.log') size 50m;
- 扩大小
# 切换日志组
alter system switch logfile;
# 将active的日志组变为inactive状态
alter system checkpoint;
# 删除日志组,该日志组需要处于inactive状态
alter database drop logfile group 1;
# 添加日志组
alter database add logfile group 1 '<PATH>' size 50m;
添加 redo log组成员
每个 Redo Log 组可以包含多个成员(即多个文件),这些成员是镜像关系,存储相同的内容。添加组成员可以提高容错能力、增强数据安全性和分散I/O负载。
alter database add logfile member '/arch/lchdb/redo01_2.log' to group 1;
archive logfile
作用: 热备恢复、追备份
# 查看归档模式
archive log list
show parameter log_archive_dest_1
# 设置归档路径地址
alter system set log_archive_dest_1='location=/arch' scope=spfile;
# 在mount模式下修改数据库为归档模式
alter database archivelog
# 修改当前归档组
alter system archive log current;
# 修改归档路径,可以在线修改
alter system set log_archive_dest_1='location=/arch2' scope=both;
# 归档视图
v$archived_log
### RMAN 用于删除归档 ###
# 连接RMAN
rman taget /
# 查看所有归档
list archivelog all;
# 删除n天内的归档
delete archvelog all compeleted before 'sysdate-n';
# 检查暴力删除的文件状态
crosscheck archivelog all
# 删除expired状态的归档文件
delete expired archivelog all
STATUS 状态说明
状态 | 说明 |
---|---|
A (Available) | 归档日志已成功生成并可用。 |
D (Deleted) | 归档日志已被删除。 |
U (Unavailable) | 归档日志不可用(可能由于文件丢失或损坏)。 |
X (Expired) | 归档日志已过期(通常由 RMAN 的 DELETE OBSOLETE 操作标记)。 |
diagnostic file
alter log:
Alert Log 文件是 Oracle 数据库的主要日志文件,记录了数据库启动、关闭、错误和其他重要事件。启动过程的详细信息会记录在此文件中。
$ORACLE_BASE/diag/rdbms/<DB_NAME>/<INSTANCE_NAME>/trace/alert_<INSTANCE_NAME>.log