达梦数据库初学之ALTER SYSTEM SWITCH LOGFILE疑惑

最近在学习达梦数据库,对日志切换这个问题稍有疑惑,在这里记录与大家分享。

在ORACLE中,alter system switch logfile 为日志切换命令。即手工切换日志组,让Oracle 直接使用下一个日志组,而不管当前使用的日志组是否写满。官方解释如下:

SWITCH LOGFILE Clause The SWITCH LOGFILE clause lets you explicitly force Oracle to begin writing to a new redo log file group, regardless of whether the files in the current redo log file group are full. When you force a log switch, Oracle begins to perform a checkpoint but returns control to you immediately rather than when the checkpoint is complete. To use this clause, your instance must have the database open.

在日志发生切换时,oracle会触发arch进程,即通知归档进程说那个日志可以归档了(产生新的归档文件)。

但在达梦数据库学习中,在执行alter system switch logfile 这条命令后,日志没有切换。这条跟ORACLE略为不同。

日志切换之前:

SQL> select * from v$rlogfile;

行号     GROUP_ID    FILE_ID     PATH                                        CLIENT_PATH  CREATE_TIME                 RLOG_SIZE           
---------- ----------- ----------- ------------------------------------------- ------------ --------------------------- --------------------
1          2           0           /home/dmdba/dmdbms/data/DAMENG/DAMENG01.log DAMENG01.log 2019-09-06 14:44:25.000000  268435456
2          2           1           /home/dmdba/dmdbms/data/DAMENG/DAMENG02.log DAMENG02.log 2019-09-06 14:44:25.000000  268435456

行号     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
           -------------------- --------------
1          159950               164935               164935               164935               686529      7           403421828   0           0
           1           83075584             1           82556928             536344064            536862720            NULL
           47664                0

切换日志:

SQL>  alter system switch logfile;
操作已执行
已用时间: 28.745(毫秒). 执行号:0.

再次查看当前redo file:

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
           -------------------- --------------
1          159950               164935               164935               164935               686529      7           403421828   0           0
           1           83075584             1           82556928             536344064            536862720            NULL
           47664                0

也还是1。

我的归档配置如下:

归档类型为本地归档,每个归档大小为64M。各个归档类型这个不细说,这个顺便讲下达梦数据库打开归档简单步骤:

1、数据库切换到配置模式

      SQL> alter database mount;

2、配置归档文件

SQL> alter database add archivelog 'type=local,dest=/dm7/arch,file_size=64,space_limit=0';

3、切换到归档模式

 SQL> alter database archivelog;

4、数据库切换回open状态

SQL> alter database open;

SQL> select * from v$dm_arch_ini;

大体跟ORACLE类似。

数据库归档打开完成之后,多次执行alter system switch logfile命令,发现我的归档文件还是只有原来的那两个。如下图所示:

通过查阅相关官方文档,并没有专门的章节来讲解达梦内部日志切换机制。但在命令手册中有一个简单说明:

ALTER SYSTEM SWITCH LOGFILE 是把新生成的,还未归档的联机日志进行归档。

原来如此,但是为何上面我多次执行alter system switch logfile,并没有新的归档生产呢?原因很简单,因为我是测试环境,当前环境空闲,数据库中没有相应增删改查操作,也就是没有新生成的联机日志,所以没有产生新的归档。

尝试创建一张表,再进行alter system switch logfile 操作,就看到会有新的归档产生。具体如下:

create table ljw.ljw1 as select * from sysobjects;

alter system switch logfile;

再次查看归档文件,有生成新的归档文件了。

 

通过实验和官方资料查询,得到结论:

ALTER SYSTEM SWITCH LOGFILE 是把新生成的,还未归档的联机日志进行归档,达梦不会去切换使用新的redo日志。达梦redo日志由其内部管理,日志写满之后,自动切换使用下一组日志,不能手工切换人为干预。达梦数据库的redo日志和归档日志是一起写的,这点和ORACLE机制也是不一样的。

 

 

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值