达梦数据库DM8之REDOLOG重做日志文件管理

达梦数据库DM8之重做日志文件 

    重做日志(即 REDO 日志)指在 DM 数据库中添加、删除、修改对象,或者改变数据,DM 都会按照特定的格式,

将这些操作执行的结果写入到当前的重做日志文件中。重做日志文件以 log 为扩展名。每个 DM 数据库实例必须至少

有 2 个重做日志文件,默认两个日志文件为 DAMENG01.log、DAMENG02.log,这两个文件循环使用。

    重做日志文件因为是数据库正在使用的日志文件,因此被称为联机日志文件。

    重做日志文件主要用于数据库的备份与恢复。理想情况下,数据库系统不会用到重做日志文件中的信息。然而现实

世界总是充满了各种意外,比如电源故障、系统故障、介质故障,或者数据库实例进程被强制终止等,数据库缓冲区

中的数据页会来不及写入数据文件。这样,在重启 DM 实例时,通过重做日志文件中的信息,就可以将数据库的状态

恢复到发生意外时的状态。

    重做日志文件对于数据库是至关重要的。它们用于存储数据库的事务日志,以便系统在出现系统故障和介质故障时

能够进行故障恢复。在 DM 数据库运行过程中,任何修改数据库的操作都会产生重做日志,例如,当一条元组插入到

一个表中的时候,插入的结果写入了重做日志,当删除一条元组时,删除该元组的事实也被写了进去,这样,当系统出

现故障时,通过分析日志可以知道在故障发生前系统做了哪些动作,并可以重做这些动作使系统恢复到故障之前的状态。



1.管理重做日志文件

1.1 添加重做日志文件

在服务器打开状态下,可以添加新的重做日志文件。添加的数据文件大小最小为 4096*页大小,如页大小为 8K,则可

添加的文件最小值为 4096*8k=32M。如添加重做大小为 128M的重做日志文件 DAMENG03.log。

ALTER DATABASE ADD LOGFILE 'd:\DAMENG03.log' size 128;


1.2 扩展重做日志文件

在服务器打开状态下,可以扩展已有的重做日志文件的大小。如扩展重做日志文件DAMENG03.log 到 256M。

ALTER DATABASE RESIZE LOGFILE 'd:\DAMENG03.log' to 256;


--操作实例

1. 检查数据库REDO日志信息

达梦数据库中与REDO日志相关的视图主要有:

1.1 V$RLOG 视图:用来查询日志的总体信息。包括当前日志的检查点LSN、文件LSN等。

[dmdba@dmdb01 ~]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

服务器[192.168.186.128:5240]:处于普通打开状态

登录使用时间 : 2.756(ms)

disql V8

SQL> select * from v$rlog;

行号     CKPT_LSN             FILE_LSN             FLUSH_LSN            CUR_LSN              NEXT_SEQ             N_MAGIC    

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

           DB_MAGIC             FLUSH_PAGES FLUSHING_PAGES CUR_FILE    CUR_OFFSET           CKPT_FILE   CKPT_OFFSET         

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

           FREE_SPACE           TOTAL_SPACE          SUSPEND_TIME UPD_CTL_LSN          N_RESERVE_WAIT TOTAL_FLUSH_PAGES   

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

           TOTAL_FLUSH_TIMES    TOTAL_ECPR_FLUSH_PAGES GLOBAL_NEXT_SEQ      N_PRIMAY_EP PRIMARY_DB_MAGIC     CKPT_N_PRIMAY_EP

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

           CKPT_PRIMARY_DB_MAGIC MIN_EXEC_VER MIN_DCT_VER

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

1          48565                50910                50910                50910                5149                 7

           1488733682           0           0              0           11720704             0           11452928

           536594944            536862720            NULL         0                    0              523

           3                    0                      5149                 0           0                    0

           0                     V8.1.1.1     4

已用时间: 13.014(毫秒). 执行号:500.

SQL> 


1.2 V$RLOGFILE 视图:用来查询日志文件的具体信息。包括当前数据库的日志文件路径、大小、创建时间等信息。

SQL> select * from v$rlogfile;

行号     GROUP_ID    FILE_ID     PATH                             CLIENT_PATH CREATE_TIME                RLOG_SIZE           

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

           MIN_EXEC_VER MIN_DCT_VER

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

1          2           0           /dm8/dmdbms/data/dm01/dm0101.log dm0101.log  2022-04-24 21:14:40.000000 268435456

           V8.1.1.1     4


2          2           1           /dm8/dmdbms/data/dm01/dm0102.log dm0102.log  2022-04-24 21:14:40.000000 268435456

           V8.1.1.1     4

已用时间: 1.118(毫秒). 执行号:501.

SQL> 


2. 添加REDO日志文件

达梦数据库的REDO日志文件是有最小大小限制的,最小大小为4096*页大小,当前数据库的页大小可以通过如下语句查看:

SQL> select para_name,para_value from v$dm_ini where para_name = 'GLOBAL_PAGE_SIZE';

行号     PARA_NAME        PARA_VALUE

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

1          GLOBAL_PAGE_SIZE 32768

已用时间: 8.783(毫秒). 执行号:503.

SQL> 

所以当前数据库能够添加的REDO日志文件最小大小为4096*32768=128MB,我们可以通过alert database add logfile的

方式添加REDO日志文件,如下所示:

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行号     FILE_ID     PATH                             MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log 256

2          1           /dm8/dmdbms/data/dm01/dm0102.log 256

已用时间: 0.786(毫秒). 执行号:505.

SQL> 

1)测试添加小于128M的REDO日志文件

SQL> alter database add logfile '/dm8/dmdbms/data/dm01/dm0103.log' size 100;

alter database add logfile '/dm8/dmdbms/data/dm01/dm0103.log' size 100;

第1 行附近出现错误[-2410]:数据文件[/dm8/dmdbms/data/dm01/dm0103.log]大小无效.

已用时间: 0.319(毫秒). 执行号:0.

2)测试添加大于等于128M的REDO日志文件

SQL> alter database add logfile '/dm8/dmdbms/data/dm01/dm0103.log' size 128;

操作已执行

已用时间: 13.997(毫秒). 执行号:506.

SQL> 

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行号     FILE_ID     PATH                             MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log 256

2          1           /dm8/dmdbms/data/dm01/dm0102.log 256

3          2           /dm8/dmdbms/data/dm01/dm0103.log 128

已用时间: 0.241(毫秒). 执行号:507.

SQL> 

注意:以上过程我们可以看到,当日志文件大小小于128MB时,会提示“第1 行附近出现错误[-2410]:数据文

件[/dm8/dmdbms/data/dm01/dm0103.log]大小无效.”。


3. 修改现有REDO日志文件大小

达梦8数据库目前只能对日志文件进行向上(扩大)RESIZE操作,不能进行向下(缩容)RESIZE操作,可以通过

alter database resize to语句实现,我们现在将上面添加的日志文件由128MB扩大到150MB,再尝试缩容到128MB,

过程如下:

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行号     FILE_ID     PATH                             MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log 256

2          1           /dm8/dmdbms/data/dm01/dm0102.log 256

3          2           /dm8/dmdbms/data/dm01/dm0103.log 128

已用时间: 0.241(毫秒). 执行号:507.

SQL> 

SQL> alter database resize logfile '/dm8/dmdbms/data/dm01/dm0103.log' to 150;

操作已执行

已用时间: 11.492(毫秒). 执行号:508.

SQL> alter database resize logfile '/dm8/dmdbms/data/dm01/dm0103.log' to 128;

alter database resize logfile '/dm8/dmdbms/data/dm01/dm0103.log' to 128;

[-2410]:数据文件[/dm8/dmdbms/data/dm01/dm0103.log]大小无效.

已用时间: 2.062(毫秒). 执行号:0.

SQL> 

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行号     FILE_ID     PATH                             MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log 256

2          1           /dm8/dmdbms/data/dm01/dm0102.log 256

3          2           /dm8/dmdbms/data/dm01/dm0103.log 150

已用时间: 0.269(毫秒). 执行号:510.

SQL> 

注意:可以看到,FILE_ID为2的日志文件可以正常从128MB扩容到150MB,但是向下(缩容)从150MB缩容到128MB

报错:[-2410]:数据文件[/dm8/dmdbms/data/dm01/dm0103.log]大小无效。


4.修改REDO日志文件名

达梦数据库REDO日志文件重命名必须在MOUNT状态下进行,通过alter database rename to语句实现,现在我们将

文件file_id为2的日志文件由 dm0103.log改为dm0103_1.log,过程如下:

SQL> select name,instance_name,status$ from v$instance;

行号     NAME INSTANCE_NAME STATUS$

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

1          DM01 DM01          OPEN

已用时间: 0.822(毫秒). 执行号:512.

SQL> 

SQL> alter database rename logfile '/dm8/dmdbms/data/dm01/dm0103.log' to '/dm8/dmdbms/data/dm01/dm0103_1.log';

alter database rename logfile '/dm8/dmdbms/data/dm01/dm0103.log' to '/dm8/dmdbms/data/dm01/dm0103_1.log';

第1 行附近出现错误[-530]:只允许在MOUNT状态NORMAL模式下执行.

已用时间: 0.207(毫秒). 执行号:0.

SQL> 

SQL> alter database mount;

操作已执行

已用时间: 2.263(毫秒). 执行号:0.

SQL> select name,instance_name,status$ from v$instance;

行号     NAME INSTANCE_NAME STATUS$

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

1          DM01 DM01          MOUNT

已用时间: 0.678(毫秒). 执行号:513.

SQL> 

SQL> alter database rename logfile '/dm8/dmdbms/data/dm01/dm0103.log' to '/dm8/dmdbms/data/dm01/dm0103_1.log';

操作已执行

已用时间: 994.826(毫秒). 执行号:514.

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行号     FILE_ID     PATH                               MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log   256

2          1           /dm8/dmdbms/data/dm01/dm0102.log   256

3          2           /dm8/dmdbms/data/dm01/dm0103_1.log 150

已用时间: 0.786(毫秒). 执行号:515.

SQL> alter database open;

操作已执行

已用时间: 11.614(毫秒). 执行号:0.

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行号     FILE_ID     PATH                               MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log   256

2          1           /dm8/dmdbms/data/dm01/dm0102.log   256

3          2           /dm8/dmdbms/data/dm01/dm0103_1.log 150

已用时间: 0.272(毫秒). 执行号:516.

SQL> 

注意:在实际操作过程中,我们可以看到,在OPEN状态下执行REDO日志重命名操作,是不被允许的,

会提示“[-530]:只允许在MOUNT状态NORMAL模式下执行”错误。


5.删除REDO日志文件名

通过测试 alter database drop logfile 和 alter database delete logfile删除重做日志都报错,说明达梦数据库当前不支持删除重做REDOLOG日志

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行号     FILE_ID     PATH                               MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log   256

2          1           /dm8/dmdbms/data/dm01/dm0102.log   256

3          2           /dm8/dmdbms/data/dm01/dm0103_1.log 150

已用时间: 0.272(毫秒). 执行号:516.

SQL> 

SQL> alter database drop logfile file_id 2;

alter database drop logfile file_id 2;

                               *      

第 1 行, 第 32 列[drop]附近出现错误[-2007]:

语法分析出错.

已用时间: 0.367(毫秒). 执行号:0.

SQL> 

SQL> alter database drop logfile '/dm8/dmdbms/data/dm01/dm0103_1.log';


alter database drop logfile '/dm8/dmdbms/data/dm01/dm0103_1.log';

                               *                                 

第 1 行, 第 32 列[drop]附近出现错误[-2007]:

语法分析出错.

已用时间: 0.172(毫秒). 执行号:0.

SQL> alter database drop logfile 'dm0103_1.log';

alter database drop logfile 'dm0103_1.log';


alter database drop logfile 'dm0103_1.log';

                               *           

第 1 行, 第 32 列[drop]附近出现错误[-2007]:

语法分析出错.

已用时间: 0.280(毫秒). 执行号:0.

SQL> 

SQL> 

SQL> alter database delete logfile '/dm8/dmdbms/data/dm01/dm0103_1.log';

alter database delete logfile '/dm8/dmdbms/data/dm01/dm0103_1.log';


alter database delete logfile '/dm8/dmdbms/data/dm01/dm0103_1.log';

                                               *                   

第 1 行, 第 48 列[logfile]附近出现错误[-2007]:

语法分析出错.

已用时间: 0.354(毫秒). 执行号:0.

SQL> alter database delete logfile file_id 2;

alter database delete logfile file_id 2;


alter database delete logfile file_id 2;

                                       *

第 1 行, 第 48 列[logfile]附近出现错误[-2007]:

语法分析出错.

已用时间: 0.137(毫秒). 执行号:0.

SQL> 


达梦数据库社区地址:

请使用浏览器的分享功能分享到微信等