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

达梦数据库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> 
 


达梦数据库社区地址:https://eco.dameng.com/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值