在之前的博客我们了解了DM中重做日志的基本概念,如下:
DM7 达梦数据库 重做日志管理 及 归档模式切换
https://www.cndba.cn/dave/article/3575
本篇是对重做日志的进一步测试。
1 重做日志redo log 只能添加 不能删除
本想按照Oracle里的思路,替换下redo log文件(因为怀疑文件有损坏),但一顿操作之后,发现redo log 可以添加,但是无法drop:
SQL> select file_id,path,rlog_size/1024/1024 as "Size" from V$RLOGFILE;
LINEID FILE_ID PATH Size
---------- ----------- ------------------------------- --------------------
1 0 /dm/dmdbms/data/dave/dave01.log 256
2 1 /dm/dmdbms/data/dave/dave02.log 256
used time: 4.815(ms). Execute id is 5.
SQL> alter database add logfile '/dm/dmdbms/data/dave/dave03.log' size 256;
executed successfully
used time: 987.905(ms). Execute id is 6.
SQL> alter database add logfile '/dm/dmdbms/data/dave/dave04.log' size 256;
executed successfully
used time: 817.451(ms). Execute id is 7.
SQL> alter database drop logfile '/dm/dmdbms/data/dave/dave01.log';
alter database drop logfile '/dm/dmdbms/data/dave/dave01.log';
alter database drop logfile '/dm/dmdbms/data/dave/dave01.log';
*
line 1, column 15, nearby [drop] has error[-2007]:
Syntax error.
used time: 0.593(ms). Execute id is 0.
SQL>
这里提示drop 语法有问题,查看了一下DM的用户手册,确实没有看到drop的操作,只有add,resize和 rename。 所以从官方文档得到的信息,redo log 只能添加不能删除。
2 Redo log 只能改大,不能改小
在DB open的状态下,可以添加和resi Redo log file。 数据文件大小最小为 4096页大小,如页大小为 8K,则可添加的文件最小值为 40968k=32M。
但实际测试的时候发现另外一个限制:redo log 只能resize 大,不能resize 小:
SQL> alter database resize logfile '/dm/dmdbms/data/dave/dave01.log' to 32;
alter database resize logfile '/dm/dmdbms/data/dave/dave01.log' to 32;
[-2410]:Data file [/dm/dmdbms/data/dave/dave01.log] size is invalid.
used time: 1.678(ms). Execute id is 0.
SQL> alter database resize logfile '/dm/dmdbms/data/dave/dave01.log' to 128;
alter database resize logfile '/dm/dmdbms/data/dave/dave01.log' to 128;
[-2410]:Data file [/dm/dmdbms/data/dave/dave01.log] size is invalid.
used time: 1.277(ms). Execute id is 0.
SQL> alter database resize logfile '/dm/dmdbms/data/dave/dave01.log' to 512;
executed successfully
used time: 671.505(ms). Execute id is 25.
SQL> alter database resize logfile '/dm/dmdbms/data/dave/dave01.log' to 256;
alter database resize logfile '/dm/dmdbms/data/dave/dave01.log' to 256;
[-2410]:Data file [/dm/dmdbms/data/dave/dave01.log] size is invalid.
used time: 1.899(ms). Execute id is 0.
3 重命名redo log
该操作比较简单,在mount 状态下直接操作:
SQL> alter database rename logfile 'dave01.log' to 'dave11.log';
alter database rename logfile 'dave01.log' to 'dave11.log';
[-530]:Error in line: 1
Only mount & normal mode supported.
used time: 0.430(ms). Execute id is 0.
SQL> alter database mount;
executed successfully
used time: 00:00:01.849. Execute id is 0.
SQL> alter database rename logfile 'dave01.log' to 'dave11.log';
executed successfully
used time: 00:00:03.810. Execute id is 27.
SQL> alter database rename logfile 'dave02.log' to 'dave12.log';
executed successfully
used time: 00:00:02.785. Execute id is 28.
SQL> alter database open;
executed successfully
used time: 00:00:01.178. Execute id is 0.
SQL> select file_id,path,rlog_size/1024/1024 as "Size" from V$RLOGFILE;
LINEID FILE_ID PATH Size
---------- ----------- ------------------------------- --------------------
1 0 /dm/dmdbms/data/dave/dave11.log 512
2 1 /dm/dmdbms/data/dave/dave12.log 256
3 2 /dm/dmdbms/data/dave/dave03.log 256
4 3 /dm/dmdbms/data/dave/dave04.log 256
used time: 1.402(ms). Execute id is 29.
SQL>
4 尝试重建控制文件来删除redo log 文件
DM的控制文件里记录了redo log 的信息,我们可以通过重建控制文件的方式来移动文件的位置,所以尝试下重建控制文件来删除redo log。
达梦重建控制文件的方法在我之前的博客有说明,如下:
DM7 达梦数据库 查看并重建控制文件 操作示例
https://www.cndba.cn/dave/article/3574
停库:
[dave@www.cndba.cn ~]$ /etc/init.d/DmServicedave stop
Stopping DmServicedave: [ OK ]
[dave@www.cndba.cn ~]$
生成控制文件文本:
[dave@www.cndba.cn ~]$ dmctlcvt type=1 src=/dm/dmdbms/data/dave/dm.ctl dest=/tmp/cmctl.txt
DMCTLCVT V7.6.0.95-Build(2018.09.13-97108)ENT
Can not open ini file !
convert ctl to txt success!
[dave@www.cndba.cn ~]$
删除里面的redo11.log 和redo12.log 内容:
#-----------------------------------------------
# file path
fil_path=/dm/dmdbms/data/dave/dave11.log
# mirror path
mirror_path=
# file id
fil_id=0
# whether the file is auto extend
autoextend=1
# file create time
fil_create_time=2029-3-21 5:56:44
# file modify time
fil_modify_time=2019-10-21 14:40:41
# the max size of file
fil_max_size=0
# next size of file
fil_next_size=0
# file path
fil_path=/dm/dmdbms/data/dave/dave12.log
# mirror path
mirror_path=
# file id
fil_id=1
# whether the file is auto extend
autoextend=1
# file create time
fil_create_time=2029-3-21 5:56:44
# file modify time
fil_modify_time=2019-10-21 14:40:54
# the max size of file
fil_max_size=0
# next size of file
fil_next_size=0
重建控制文件:
[dave@www.cndba.cn ~]$ dmctlcvt type=2 src=/tmp/cmctl.txt dest=/dm/dmdbms/data/dave/dm.ctl
DMCTLCVT V7.6.0.95-Build(2018.09.13-97108)ENT
Can not open ini file !
convert txt to ctl success!
起库验证:
折腾2次,删除redo log 后,达梦实例无法正常启动
[dave@www.cndba.cn ~]$ /etc/init.d/DmServicedave start
Starting DmServicedave: [ FAILED ]
file dm.key not found, use default license!
Global parameter value of RT_HEAP_TARGET is illegal, use min value!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V7.6.0.95-Build(2018.09.13-97108)ENT startup...
License will expire on 2019-11-04
rfil grp init log file /dm/dmdbms/data/dave/dave03.log error, code = -717
[dave@www.cndba.cn ~]$
[dave@www.cndba.cn ~]$ /etc/init.d/DmServicedave start
Starting DmServicedave: /etc/init.d/DmServicedave: line 333: 2958 Segmentation fault (core dumped) "$EXEC_PROG_FULL_PATH" "$INI_PATH" -noconsole $TMP_START_MODE > "$SERVICE_LOG_FILE" 2>&1
[ FAILED ]
file dm.key not found, use default license!
Global parameter value of RT_HEAP_TARGET is illegal, use min value!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V7.6.0.95-Build(2018.09.13-97108)ENT startup...
License will expire on 2019-11-04
[dave@www.cndba.cn ~]$
查看DM的日志如下:
2019-10-21 15:15:50 [INFO] database P0000002847 main_thread fil_sys_init
2019-10-21 15:15:51 [WARNING] database P0000002847 main_thread License will expire on 2019-11-04
2019-10-21 15:15:51 [INFO] database P0000002847 main_thread ep 0 set rac status to 1
2019-10-21 15:19:09 [INFO] database P0000002902 main_thread version info: develop
2019-10-21 15:19:09 [INFO] database P0000002902 main_thread DM Database Server x64 V7.6.0.95-Build(2018.09.13-97108)ENT startup...
2019-10-21 15:19:15 [INFO] database P0000002902 main_thread fil_sys_init
2019-10-21 15:19:16 [WARNING] database P0000002902 main_thread License will expire on 2019-11-04
2019-10-21 15:19:16 [INFO] database P0000002902 main_thread ep 0 set rac status to 1
2019-10-21 15:19:16 [ERROR] database P0000002902 main_thread arch file(/dm/dmdbms/data/dave/dave03.log) fil id check fail(file: /data/zsn/trunk7_ent/log/rfil.c, line: 777)
2019-10-21 15:19:16 [ERROR] database P0000002902 main_thread rfil grp init log file /dm/dmdbms/data/dave/dave03.log error, code = -717
2019-10-21 15:22:58 [INFO] database P0000002958 main_thread version info: develop
2019-10-21 15:22:58 [INFO] database P0000002958 main_thread DM Database Server x64 V7.6.0.95-Build(2018.09.13-97108)ENT startup...
2019-10-21 15:23:04 [INFO] database P0000002958 main_thread fil_sys_init
2019-10-21 15:23:04 [WARNING] database P0000002958 main_thread License will expire on 2019-11-04
2019-10-21 15:23:04 [INFO] database P0000002958 main_thread ep 0 set rac status to 1
最后老老实实还原环境:
[dave@www.cndba.cn ~]$ /etc/init.d/DmServicedave start
Starting DmServicedave: [ OK ]
[dave@www.cndba.cn ~]$ disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 9.084(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> select file_id,path,rlog_size/1024/1024 as "Size" from V$RLOGFILE;
LINEID FILE_ID PATH Size
---------- ----------- ------------------------------- --------------------
1 0 /dm/dmdbms/data/dave/dave11.log 512
2 1 /dm/dmdbms/data/dave/dave12.log 256
3 2 /dm/dmdbms/data/dave/dave03.log 256
4 3 /dm/dmdbms/data/dave/dave04.log 256
used time: 10.700(ms). Execute id is 3.
SQL>
曲线救国的方式也无法删除,从目前的测试来看DM数据库的redo log 真的只能添加,不能删除。
版权声明:本文为博主原创文章,未经博主允许不得转载。