达梦8数据库的REDO日志主要用于记录被修改数据的新值,包括事物对数据文件和回滚段的修改。达梦数据库每个实例都有一个相关联的REDO日志,通过重做日志可以保证数据库的完整性和一致性,REDO日志在数据库物理恢复中是非常重要的。
达梦数据库默认包含2个扩展名为.log的联机日志文件,用来保存REDO日志,这2个REDO日志文件是循环使用的,达梦8数据库目前仅支持对REDO日志文件进行增加和扩展操作,不支持对日志文件进行删除或缩容操作,以下我们以实际操作来演示日常工作中对达梦8数据库REDO日志的管理内容。
1 、检查数据库REDO日志信息
达梦数据库中与REDO日志相关的视图主要有:
V$RLOG 视图:用来查询日志的总体信息。包括当前日志的检查点LSN、文件LSN等。
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 1117231 1117232 1117232 1117232 6524 7 1619068376 0 0 0 124192256 0 124191744 805293568 805294080 NULL 0 0 1431 4 0 6524 0 0 0 0 V8.1.1.1 4 已用时间: 12.737(毫秒). 执行号:11. SQL>
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 E:\dmdbms\data\DAMENG\DAMENG01.log DAMENG01.log 2020-03-31 10:12:06.000000 268435456 V8.1.1.1 4 行号 GROUP_ID FILE_ID PATH CLIENT_PATH ---------- ----------- ----------- ---------------------------------- ------------ CREATE_TIME ---------------------------------------------------------------------------------------------------- RLOG_SIZE MIN_EXEC_VER MIN_DCT_VER -------------------- ------------ ----------- 2 2 1 E:\dmdbms\data\DAMENG\DAMENG02.log DAMENG02.log 2020-03-31 10:12:06.000000 268435456 V8.1.1.1 4 行号 GROUP_ID FILE_ID PATH CLIENT_PATH ---------- ----------- ----------- ---------------------------------- ------------ CREATE_TIME ---------------------------------------------------------------------------------------------------- RLOG_SIZE MIN_EXEC_VER MIN_DCT_VER -------------------- ------------ ----------- 3 2 2 E:\dmdbms\data\DAMENG\DAMENG03.log DAMENG03.log 2020-04-13 16:33:03.000000 268435456 V8.1.1.1 4 已用时间: 1.544(毫秒). 执行号:12. SQL>
2 、添加REDO日志文件
达梦数据库的REDO日志文件是有最小大小限制的,最小大小为4096X页大小,当前数据库的页大小可以通过如下语句查看:
SQL> select para_name,para_value from v$dm_ini where para_name = 'GLOBAL_PAGE_SIZE'; 行号 PARA_NAME PARA_VALUE ---------- ---------------- ---------- 1 GLOBAL_PAGE_SIZE 8192 已用时间: 11.085(毫秒). 执行号:13. SQL>
所以当前数据库能够添加的REDO日志文件最小大小为4096X8192=32MB,我们可以通过alert database add logfile的方式添加REDO日志文件,如下所示:
SQL> select file_id,path,rlog_size/1024/1024 from v$rlogfile; 行号 FILE_ID PATH RLOG_SIZE/1024/1024 ---------- ----------- ---------------------------------- -------------------- 1 0 E:\dmdbms\data\DAMENG\DAMENG01.log 256 2 1 E:\dmdbms\data\DAMENG\DAMENG02.log 256 3 2 E:\dmdbms\data\DAMENG\DAMENG03.log 256 已用时间: 2.754(毫秒). 执行号:14. SQL> alter database add logfile 'E:\dmdbms\data\DAMENG\DAMENG04.log' size 31; alter database add logfile 'E:\dmdbms\data\DAMENG\DAMENG04.log' size 31; 第1 行附近出现错误[-2410]:数据文件[E:\dmdbms\data\DAMENG\DAMENG04.log]大小无效. 已用时间: 4.883(毫秒). 执行号:0. SQL> alter database add logfile 'E:\dmdbms\data\DAMENG\DAMENG04.log' size 32; 操作已执行 已用时间: 54.674(毫秒). 执行号:15. SQL> select file_id,path,rlog_size/1024/1024 from v$rlogfile; 行号 FILE_ID PATH RLOG_SIZE/1024/1024 ---------- ----------- ---------------------------------- -------------------- 1 0 E:\dmdbms\data\DAMENG\DAMENG01.log 256 2 1 E:\dmdbms\data\DAMENG\DAMENG02.log 256 3 2 E:\dmdbms\data\DAMENG\DAMENG03.log 256 4 3 E:\dmdbms\data\DAMENG\DAMENG04.log 32 已用时间: 2.257(毫秒). 执行号:16. SQL>
以上过程我们可以看到,当日志文件大小小于32MB时,会提示“出现错误[-2410]:数据文件[E:\dmdbms\data\DAMENG\DAMENG04.log]大小无效.”。
3 、修改现有REDO日志文件大小
达梦8数据库目前只能对日志文件进行向上(扩大)RESIZE操作,不能进行向下(缩容)RESIZE操作,可以通过alter database resize to语句实现,我们现在将上面添加的日志文件由32MB扩大到64MB,再尝试缩容到32MB,过程如下:
SQL> select file_id,path,rlog_size/1024/1024 from v$rlogfile; 行号 FILE_ID PATH RLOG_SIZE/1024/1024 ---------- ----------- ---------------------------------- -------------------- 1 0 E:\dmdbms\data\DAMENG\DAMENG01.log 256 2 1 E:\dmdbms\data\DAMENG\DAMENG02.log 256 3 2 E:\dmdbms\data\DAMENG\DAMENG03.log 256 4 3 E:\dmdbms\data\DAMENG\DAMENG04.log 32 已用时间: 0.392(毫秒). 执行号:17. SQL> alter database resize logfile 'E:\dmdbms\data\DAMENG\DAMENG04.log' to 64; 操作已执行 已用时间: 134.417(毫秒). 执行号:18. SQL> alter database resize logfile 'E:\dmdbms\data\DAMENG\DAMENG04.log' to 32; alter database resize logfile 'E:\dmdbms\data\DAMENG\DAMENG04.log' to 32; [-2410]:数据文件[E:\dmdbms\data\DAMENG\DAMENG04.log]大小无效. 已用时间: 4.402(毫秒). 执行号:0. SQL> select file_id,path,rlog_size/1024/1024 from v$rlogfile; 行号 FILE_ID PATH RLOG_SIZE/1024/1024 ---------- ----------- ---------------------------------- -------------------- 1 0 E:\dmdbms\data\DAMENG\DAMENG01.log 256 2 1 E:\dmdbms\data\DAMENG\DAMENG02.log 256 3 2 E:\dmdbms\data\DAMENG\DAMENG03.log 256 4 3 E:\dmdbms\data\DAMENG\DAMENG04.log 64 已用时间: 0.388(毫秒). 执行号:20. SQL>
可以看到,FILE_ID为3的日志文件可以正常从32MB扩容到64MB,但是不能向下(缩容)从64MB缩容到32MB。
4 、修改REDO日志文件名
达梦数据库REDO日志文件重命名必须在MOUNT状态下进行,通过alter database rename to语句实现,现在我们将文件id为3的日志文件由DAMENG04.log改为DAMENG05.log,过程如下:
SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 OPEN 已用时间: 1.439(毫秒). 执行号:23. SQL> alter database rename logfile 'E:\dmdbms\data\DAMENG\DAMENG04.log' to 'E:\dmdbms\data\DAMENG\DAMENG05.log'; alter database rename logfile 'E:\dmdbms\data\DAMENG\DAMENG04.log' to 'E:\dmdbms\data\DAMENG\DAMENG05.log'; 第1 行附近出现错误[-530]:只允许在MOUNT状态NORMAL模式下执行. 已用时间: 0.427(毫秒). 执行号:0. SQL> SQL> alter database mount; 操作已执行 已用时间: 00:00:01.853. 执行号:0. SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 MOUNT 已用时间: 0.875(毫秒). 执行号:24. SQL> alter database rename logfile 'E:\dmdbms\data\DAMENG\DAMENG04.log' to 'E:\dmdbms\data\DAMENG\DAMENG05.log'; 操作已执行 已用时间: 359.865(毫秒). 执行号:25. SQL> select file_id,path,rlog_size/1024/1024 from v$rlogfile; 行号 FILE_ID PATH RLOG_SIZE/1024/1024 ---------- ----------- ---------------------------------- -------------------- 1 0 E:\dmdbms\data\DAMENG\DAMENG01.log 256 2 1 E:\dmdbms\data\DAMENG\DAMENG02.log 256 3 2 E:\dmdbms\data\DAMENG\DAMENG03.log 256 4 3 E:\dmdbms\data\DAMENG\DAMENG05.log 64 已用时间: 0.788(毫秒). 执行号:26. SQL>
在实际操作过程中,我们可以看到,在OPEN状态下执行REDO日志重命名操作,是不被允许的,会提示“错误[-530]:只允许在MOUNT状态NORMAL模式下执行”错误。