目录
一、Oracle中物理存储结构
思维导图:

Oracle 数据库的物理存储结构是指数据库在操作系统层面实际可见的文件集合。

1.1.控制文件
控制文件是数据库的核心元数据文件,它是一个很小的二进制文件,其后缀为.ctl,记录了数据库的物理结构信息。

作用:数据库的"大脑"或"路线图"。及其关键,没有控制文件,数据库将无法启动和正常运行。因为实例启动时需要通过控制文件找到数据文件和重做日志文件。
容错:强烈建议多路复用(Multiplexing),即同时维护多个完全相同的副本(通常放在不同的物理磁盘上),以防止单点故障。
存储视图:v$controlfile;
存储的信息包括:
(1)数据库名称和创建时间戳。
(2)所有数据文件和在线重做日志文件的名称、位置。
(3)表空间信息。
(4)当前日志序列号。
(5)检查点信息。
(6)备份和恢复所需的元数据。
控制文件由于是二进制文件,因此并不能直接进行修改,只能通过sql命令进行修改。
1.1.1.控制文件的相关操作
1)查看控制文件的位置
select name,value from v$parameter where name='control_files';

2)查看控制文件内容(简要)
select type,record_size,records_total,records_used from v$controlfile_record_section;
bash
SQL> select type,record_size,records_total,records_used from v$controlfile_record_section;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
DATABASE 316 1 1
CKPT PROGRESS 8180 4 0
REDO THREAD 256 1 1
REDO LOG 72 16 3
DATAFILE 520 1024 8
FILENAME 524 4146 13
TABLESPACE 180 1024 8
TEMPORARY FILENAME 56 1024 3
RMAN CONFIGURATION 1108 50 3
LOG HISTORY 56 292 62
OFFLINE RANGE 200 1063 7
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
ARCHIVED LOG 584 112 28
BACKUP SET 96 1022 13
BACKUP PIECE 780 1006 13
BACKUP DATAFILE 200 1063 23
BACKUP REDOLOG 76 215 18
DATAFILE COPY 736 1000 0
BACKUP CORRUPTION 44 1115 0
COPY CORRUPTION 40 1227 0
DELETED OBJECT 20 818 26
PROXY COPY 928 1004 0
BACKUP SPFILE 124 131 7
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
DATABASE INCARNATION 56 292 2
FLASHBACK LOG 84 2048 0
RECOVERY DESTINATION 180 1 1
INSTANCE SPACE RESERVATION 28 1055 1
REMOVABLE RECOVERY FILES 32 1000 0
RMAN STATUS 116 141 34
THREAD INSTANCE NAME MAPPING 80 1 1
MTTR 100 1 1
DATAFILE HISTORY 568 57 0
STANDBY DATABASE MATRIX 400 128 128
GUARANTEED RESTORE POINT 256 2048 0
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
RESTORE POINT 256 2108 0
DATABASE BLOCK CORRUPTION 80 8384 0
ACM OPERATION 104 64 11
FOREIGN ARCHIVED LOG 604 1002 0
PDB RECORD 780 10 0
AUXILIARY DATAFILE COPY 584 128 0
MULTI INSTANCE REDO APPLY 556 1 0
PDBINC RECORD 144 113 0
TABLESPACE KEY HISTORY 108 151 0
42 rows selected.
SQL>
3)添加新的控制文件副本(多路复用)
SHUTDOWN IMMEDIATE;

-- 操作系统层面复制控制文件
-- cp /u01/app/oracle/oradata/ORCL/control01.ctl /u01/app/oracle/oradata/ORCL/control03.ctl

STARTUP NOMOUNT;

alter system set control_files = '/u01/app/oracle/oradata/ORCL/control01.ctl','/u01/app/oracle/oradata/ORCL/control02.ctl','/u01/app/oracle/oradata/ORCL/control03.ctl' SCOPE=SPFILE;

SHUTDOWN IMMEDIATE;
STARTUP;


4)备份控制文件到跟踪文件
alter database backup controlfile to trace as '/tmp/control.sql';

5)备份控制文件到二进制文件
alter database backup controlfile to '/backup/control.bkp';

观察一下备份文件与当前的控制文件大写是否一致就欧克。
1.2.数据文件
数据文件是实际存储用户数据的文件,包括表、索引、视图等对象的真实数据。它是数据库中最核心的文件,文件扩展名为.dbf,是操作系统可以直接看到的文件。是表空间的重要组成文件,一个表空间对应一个或多个数据文件。
存储视图:DBA_DATA_FILES 或v$DATAFILE视图查询数据文件信息。
区别:
DBA_DATA_FILES:是数据字典视图 ,从控制文件中读取信息,**反映的是文件在数据库逻辑层面的可用性。**AVALIABLE表示该文件在逻辑上被数据库识别为可用的,没有缺失或则损坏。
**v$DATAFILE:是动态性能视图,反映的是实例运行时该文件的实时操作状态。**它关注的是当前能否读写(ONLINE)、是否被手动离线(OFFLINE)、是否在恢复中(RECOVER)。
1.2.1.数据文件的状态
|---------|---------|----------|
| 状态 | 含义 | 操作 |
| ONLINE | 正常可用 | 可读写 |
| OFFLINE | 离线 | 需要恢复才能上线 |
| RECOVER | 需要恢复 | 应用归档日志 |
| SYSTEM | 系统表空间文件 | 不能离线 |
| TEMP | 临时文件 | 不记录日志 |
1)查看所有数据文件
select file_id,file_name,tablespace_name,status,bytes/1024/1024 as MB from dba_data_files order by tablespace_name,file_id;

2)查看临时文件
select file_id,file_name,tablespace_name,bytes/1024/1024 AS MB FROM dba_temp_files;

3)查看数据文件的详细统计
bash
-- 查看数据文件的详细统计
SELECT df.file_name, fs.bytes/1024/1024 AS total_mb,
(fs.bytes - NVL(s.bytes, 0))/1024/1024 AS used_mb,
NVL(s.bytes, 0)/1024/1024 AS free_mb,
ROUND(NVL(s.bytes, 0)/fs.bytes * 100, 2) AS pct_free
FROM dba_data_files df,
(SELECT file_id, SUM(bytes) bytes FROM dba_free_space GROUP BY file_id) s,
(SELECT file_id, bytes FROM dba_data_files) fs
WHERE df.file_id = s.file_id(+)
AND df.file_id = fs.file_id;

1.3.重做日志文件
重做日志文件记录数据库的所有变更操作,是实例恢复的核心。
工作原理:
(1)当数据库处于归档模式时,ARCn(归档进程)会在日志切换发生后,将即将被覆盖的在线重做日志文件复制到指定的位置,形成归档重做日志文件。
(2)归档文件通常有独立的命名convention(如%t_%s_%r.arc)。
1.3.1.查看重做日志信息
1)查看日志组信息
select group#,sequence#,bytes/1024/1024 AS MB, members,status,archived from v$log;

2)查看日志成员信息
select group#,member,status,type from v$logfile;

3)查看当前正在写的日志组
select group#,sequence#,status from v$log where status = 'current';

4)查看日志切换历史
select * from v$log_history where rownum <= 10;

1.3.2.管理重做日志
**作用:**记录所有对数据库数据的修改操作,用于保证数据的一致性和可恢复性。
工作原理:
(1)当用户执行INSERT,UPDATE,DELECT,CREATE,ALTER等DDL/DML操作时,Oracle会生成"重做记录"。
(2)这些记录首先被写入内存中的"重做日志缓冲区"。
(3)LGWR(日志写入器)进程会定期将缓冲区的内容写入在线重做日志文件。
(4)在线重做日志文件是循环使用的。通常由多个组(Group)构成,每个组可以有多个成员(Member)用于冗余。当一个组写满后,LGWR会切换到下一组继续写入(称为日志切换)。
**存储视图:**vLOG,vLOGFILE,v$LOGMEMBER等
1)添加新的日志组
alter database add logfile group 4 '/u01/oradata/ORCL/redo04a.log' SIZE 500M;
2)添加日志组成员(多路复用)
alter database add logfile member '/u02/oradata/ORCL/redo01b.log' TO GROUP 1;
3)删除日志组(不能删除当前组和活动组)
alter database drop logfile group 4;
4)手动切换日志
alter system switch logfile;
1.4.归档日志文件
当数据库处于归档模式时,重做日志写满后会被复制到归档位置。
**重要性:是实现完整恢复(介质恢复)的基础。**有了所有历史归档日志和当前的在线重做日志,就可以将数据库恢复到过去的任意时间点。这对于生产数据库是必须开启的功能。
1.4.1.检查归档模式
select log_mode from v$database;

1.4.2.查看归档日志
SELECT name, sequence#, first_time, next_time, blocks
FROM v$archived_log
WHERE ROWNUM <= 10
ORDER BY sequence# DESC;
select name,sequence#,first_time,next_time,blocks from v$archived_log where rownum <= 10 order by sequence# DESC;

1.4.3.设置归档位置
alter system set log_archive_dest_1='LOCALTION=/u01/archives' SCOPE=BOTH;
1.5.参数文件
作用:定义了数据库实例启动时的配置参数,如内存分配(SGA、PGA)、进程数、控制文件位置、数据库名称等。
|-------------|-----------------|--------------------------------------------------------------------------------------------------|
| 类型 | 文件名 | 特点 |
| PFILE(文本) | init{SID}.ora | 可编辑文本文件,静态修改; 初始化参数文件:文本文件,名为init<SID>.ora。传统方式,修改后必须重启实例才能生效,且无法动态保存修改。 |
| SPFILE(二进制) | spfile{SID}.ora | 服务器端管理,动态修改; 服务器参数文件:二进制文件,名为spfile<SID>.ora,推荐使用,因为它可以在数据库运行期间通过ALTER STSTEM命令动态修改,并且修改是持久化的。 |
1.5.1.查看当前使用的参数文件类型及位置
select value from v$parameter where name='spfile';

注意:如果有返回路径,则证明为静态参数文件,修改的时候使用 SPFILE;否则使用 PFILE
1.5.2.查看参数
show parameter db_name;

1.5.3.修改参数(只在SPFILE下可用)
alter system set processed=300 scope=both;
1.5.4.从SPFILE创建PFILE备份
create pfile='/backup/initORCL.ora' from spfile;
1.6.密码文件
作用:用于验证具有SYSDBA、SYSOPER等特殊权限的用户,允许他们从远程客户端启动、关闭数据库或执行高级管理操作。
工具:使用orapwd命令创建。
1.6.1.创建密码文件
orapwd file=$ORACLE_HOME/dbs/orapwORCL password=admin ertries=10
1.6.2.查看具有SYSDBA权限的用户
select * from v$pwfile_users;

1.7.告警、跟踪文件
该文件包含特殊的跟踪条目。数据库的预警日志是一个按时间顺序记录消息和错误的日志。Oracle建议您定期检查此预警日志。
类型:可以是RMAN(Recovery Manager)生成的专用格式备份集,也可以是用户手动拷贝的数据文件、控制文件、归档日志等。
1.8.备份文件
作用:由用户或恢复管理器创建的数据库文件副本,用于在发生介质故障(如磁盘损坏)时恢复数据库。