达梦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模式下执行”错误。