【赵渝强老师】崖山数据库写入数据的过程

b467

要了解崖山数据库的数据写入过程,首先需要了解崖山数据库的数据文件和联机重做日志文件。下面分别进行介绍。

image.png
点击这里查看视频讲解:【赵渝强老师】崖山数据库写入数据的过程

1、数据文件(Data File)

一个数据库由多个表空间组成,而表空间可以由多个数据文件组成的,数据文件是真正存放数据库数据的。一个数据文件就是一个硬盘上的文件。表和索引中的数据在物理上是被存放在数据文件中的。当查询表中数据的时候,如果内存中没有该表的数据,那么YashanDB数据库的服务器进程将读取该表所在的数据文件,然后把数据存放到内存中。通过下面的语句可以查看当前数据库中存在的数据文件和对应的表空间:

SQL> select file_name,tablespace_name from dba_data_files;

# 输出的信息如下:
FILE_NAME                                              TABLESPACE_NAME   
------------------------------------------------------ ----------------- 
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/system    SYSTEM           
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/sysaux    SYSAUX           
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/temp      TEMP             
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/swap      SWAP             
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/users     USERS            
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/undo      UNDO             

6 rows fetched.

当表空间中的数据文件写满时,可以通过下面的语句往表空间中添加新的数据文件。例如,往users表空间中添加一个10M大小的数据文件。

SQL> alter tablespace users add datafile '/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/users02' size 10M;

执行下面的语句重新查看YashanDB数据库的数据文件信息。

SQL> select file_name,tablespace_name from dba_data_files;

# 输出的信息如下:
FILE_NAME                                               TABLESPACE_NAME   
------------------------------------------------------- ----------------- 
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/system     SYSTEM           
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/sysaux     SYSAUX           
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/temp       TEMP             
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/swap       SWAP             
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/users      USERS            
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/undo       UNDO             
/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/users02    USERS            

7 rows fetched.

2、重做日志文件(Redo Log File)

一个数据库可以有多个联机重做日志文件,它记录了数据库的变化。例如,当YashanDB数据库产生异常时,导致对数据的改变没有及时写入到数据文件中。这时YashanDB数据库就会根据联机重做日志文件中的信息来获得数据库的变化信息,并根据这些信息把这些改变写到数据文件中。换句话来说,联机重做日志文件中记录的重做日志可以用来进行数据库实例的恢复。通过下面的语句查看当前YashanDB数据库中存在的联机重做日志文件和对应的日志组信息。

SQL> select id,name,status from v$logfile;

# 输出的信息如下:
ID NAME                                                STATUS    
-- --------------------------------------------------- --------- 
 0 /home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo1  INACTIVE 
 1 /home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo2  INACTIVE 
 2 /home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo3  CURRENT  
 3 /home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo4  INACTIVE 

4 rows fetched.

3、崖山数据库写入数据的过程

下图展示了YashanDB数据库写入数据的过程。
image

从上图可以看出,当前客户端成功提交事务时,数据有可能还没有写到数据文件上。如果此时数据库实例发生了崩溃,写入的数据是会丢失的。当重新启动数据库实例时,YashanDB会利用成功写入的重做日志来恢复实例在内存中的数据,这个过程叫做实例恢复。由YashanDB数据库的SMON线程自动完成。

posted @ 2026-09-08 18:14  赵渝强老师  阅读(11)  评论(0)    收藏  举报