签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦数据库 重做日志管理 及 归档模式切换

2019-08-27 20:02 6946 0 原创 DM 达梦
作者: dave

1 理论知识

1.1 REDO 日志

在恢复操作中最重要的结构是联机 REDO 日志。REDO 日志存放在日志表空间文件中,这些文件存储数据库所做的所有物理更改信息。达梦数据库每一个实例都有一个相关联的联机重做日志,通过重做日志可以保证数据库的完整性和一致性。
DM SERVER 的 REDO 日志用于存储被修改数据的新值,包括事务对数据文件和回滚段的修改。REDO 日志每次被修改以后,都会自动生成一个新的日志序列值 LSN(Log Sequence Number)。LSN 取值范围 0~正无穷大,新建的库 LSN 为 0,以后日志每被写入一次,LSN值增加 1。
REDO 日志里包含有一种特殊的记录,叫 PWR(Page Written Record)日志。PWR 包括(ts_id, fil_id, page_no, page_lsn)信息。每个数据页刷盘时,都会生成一条对应的 PWR 日志。PWR 日志的 lsn 与上一个日志的 lsn 相同。https://www.cndba.cn/dave/article/3575

在以下情况下可以利用 PWR日志:

  1. RAC 故障恢复时:利用 PWR 日志减少加载磁盘数据页的次数;
  2. 故障恢复时:利用 PWR 日志提升 redo 速度;
  3. 增量备份时:利用 PWR 日志提升备份速度。

DM系统采用了单独的日志文件来存储 REDO 日志,DM 至少有两个日志文件,日志文件是循环利用的。日志文件由日志表空间管理。https://www.cndba.cn/dave/article/3575

1.2 重做日志归档

DM 服务器可以运行在两种模式下,即归档模式和非归档模式,这两种模式可以由用户进行设置,系统在归档模式下运行时,会产生归档日志文件,此时系统管理员应该事先预留出足够的磁盘空间以便存储归档日志文件。通过 dm.ini 和 dmarch.ini 可以配置归档。归档日志有五种类型。https://www.cndba.cn/dave/article/3575

https://www.cndba.cn/dave/article/3575

1.2.1本地归档

写入 REDO 日志到本地归档文件,在 REDO 日志写入日志文件后触发,由归档线程完成本地归档动作,最多可以设置 8 个本地归档。若磁盘空间不足,所有本地归档一旦失效,系统会被强制挂起,直到磁盘空间释放,本地归档成功后,再继续执行。

https://www.cndba.cn/dave/article/3575

1.2.2实时归档

在写入 REDO 日志到日志文件之前,通过 MAL 系统发送 REDO 日志到远程服务器,远程服务器收到 REDO 日志后,返回确认消息。收到确认消息后,执行后续操作,发送 REDO 日志失败,或从备库返回的数据库模式不是 STANDBY,将数据库切换为 SUSPEND 状态,阻塞所有 REDO 日志的写入操作。只能配置 1 个实时归档。

1.2.3即时归档

即时归档在主库将 Redo 日志写入联机 Redo 日志文件后,再通过 MAL 系统将 Redo 日志发送到备库。即时归档是读写分离集群的实现基础,与实时归档的主要区别是发送 Redo日志的时机不同。一个主库可以配置 1~8 个即时备库。

https://www.cndba.cn/dave/article/3575
https://www.cndba.cn/dave/article/3575

1.2.4异步归档

在设定的时间点或者每隔设定时间,启动归档 REDO 日志发送。设置定时归档,必须确保至少有一个本地归档。系统调度线程根据设定,触发归档 REDO 日志发送事件。通过 MAL系统,获取远程服务器的当前 LSN,生成发送归档 REDO 日志任务,加入任务队列。归档任务线程获取任务,通过 MAL 系统,发送到远程服务器。最多可以设置 8 个异步归档。

1.2.5远程归档

远程归档就是将写入本地归档的 REDO 日志信息,发送到远程节点,并写入远程节点的指定归档目录中。远程归档与本地归档的主要区别是 REDO 日志写入的位置不同,本地归档将 REDO 日志写入数据库实例所在节点的磁盘,而远程归档则将 REDO 日志写入到其他数据库实例所在节点的指定归档目录。远程归档日志文件的命名规范和本地归档日志文件保持一致,都是以归档名+归档文件的创建时间进行组合命名。最多可以配置 8 个远程归档。

https://www.cndba.cn/dave/article/3575

1.3 与Redo 和 归档相关的视图

V$RLOG :显示日志的总体信息。通过该视图可以了解系统当前日志事务号 LSN 的情况、归档日志情况、检查点的执行情况等。
V$RLOGBUF:显示日志 BUFFER 信息。通过该视图可以查询日志 BUFFER 的使用情况,如 BUFFER 状态、总大小、已使用大小,这样可以带来帮助,如 BUFFER 剩余空间过小产生的失败等。
V$RLOGFILE: 显示日志文件的具体信息。包括文件号、完整路径、文件的状态、文件大小等等。
V$ARCHIVED_LOG:显示当前实例的所有归档日志文件信息。https://www.cndba.cn/dave/article/3575

2 操作示例

2.1 Redo log 操作

#查看当前Redo log 信息:
SQL> select file_id,path,rlog_size/1024/1024 as "Size" from V$RLOGFILE;

LINEID     FILE_ID     PATH                              Size                
---------- ----------- --------------------------------- --------------------
1          0           /dm/dmdbms/data/cndba/cndba01.log 256
2          1           /dm/dmdbms/data/cndba/cndba02.log 256

used time: 1.096(ms). Execute id is 92.

#查看DB 当前正在适用的Redo log:
SQL> select cur_file from V$RLOG;

LINEID     CUR_FILE   
---------- -----------
1          0

used time: 0.612(ms). Execute id is 155.
SQL> 

#在DB open的状态下,可以添加新的Redo log file。 数据文件大小最小为 4096*页大小,如页大小为 8K,则可添加的文件最小值为 4096*8k=32M。如添加重做大小为 128M。
SQL> alter database add logfile '/dm/dmdbms/data/cndba/cndba03.log' size 128;
executed successfully
used time: 462.117(ms). Execute id is 156.
SQL> 
SQL> select file_id,path,rlog_size/1024/1024 as "Size" from V$RLOGFILE;

LINEID     FILE_ID     PATH                              Size                
---------- ----------- --------------------------------- --------------------
1          0           /dm/dmdbms/data/cndba/cndba01.log 256
2          1           /dm/dmdbms/data/cndba/cndba02.log 256
3          2           /dm/dmdbms/data/cndba/cndba03.log 128

used time: 1.073(ms). Execute id is 157.

#修改现有REDO LOG大小:
SQL> alter database resize logfile '/dm/dmdbms/data/cndba/cndba03.log' to 256;
executed successfully
used time: 467.653(ms). Execute id is 164.
SQL> select file_id,path,rlog_size/1024/1024 as "Size" from V$RLOGFILE;

LINEID     FILE_ID     PATH                              Size                
---------- ----------- --------------------------------- --------------------
1          0           /dm/dmdbms/data/cndba/cndba01.log 256
2          1           /dm/dmdbms/data/cndba/cndba02.log 256
3          2           /dm/dmdbms/data/cndba/cndba03.log 256

used time: 0.770(ms). Execute id is 165.
SQL> 


#在MOUNT状态下,还可以对日志文件的重命名操作:
SQL> select name,status$ from v$database;

LINEID     NAME  STATUS$    
---------- ----- -----------
1          cndba 4

used time: 1.286(ms). Execute id is 173.

SQL> alter database rename logfile 'cndba03.log' to 'cndba04.log';
alter database rename logfile 'cndba03.log' to 'cndba04.log';
[-530]:Error in line: 1
Only mount & normal mode supported.
used time: 0.568(ms). Execute id is 0.
SQL> 
SQL> alter database mount;
executed successfully
used time: 00:00:01.872. Execute id is 0.
SQL>  alter database rename logfile 'cndba03.log' to 'cndba04.log';
executed successfully
used time: 591.739(ms). Execute id is 174.
SQL> alter database open;
executed successfully
used time: 657.721(ms). 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/cndba/cndba01.log 256
2          1           /dm/dmdbms/data/cndba/cndba02.log 256
3          2           /dm/dmdbms/data/cndba/cndba04.log 256

used time: 2.183(ms). Execute id is 175.

2.2 启动归档方法1:纯参数文件操作

这里我们只看简单的启动本地归档模式。https://www.cndba.cn/dave/article/3575

1.查看当前的归档模式:
SQL> select arch_mode from v$database;

LINEID     ARCH_MODE
---------- ---------
1          N

used time: 2.176(ms). Execute id is 176.
SQL> 

2.创建归档文件存储目录:
[dave@www.cndba.cn dmarch]$ pwd
/dm/dmarch
[dave@www.cndba.cn dmarch]$ 

3.修改dmarch.ini 文件,添加如下内容。 完整的内容可以参考DM的官方手册。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 0

参数说明:
ARCH_TYPE: 归档类型,有以下几种:
本地归档 LOCAL(一台主库最多配 8 个)
远程实时归档 REALTIME(一台主库最多配 8 个)
远程异步归档 ASYNC(一台主库最多配 8 个)
即时归档 TIMELY(一个主库最多配 8 个)
远程归档 REMOTE(一个主库最多配 8 个)
ARCH_DEST: 归档路径
ARCH_FILE_SIZE:单个归档文件大小,单位 MB,取值范围(64~2048),默认为 1024MB,即 1G
ARCH_SPACE_LIMIT:归档文件空间限制,单位 MB,取值范围(1024~4294967294),0 表示无空间限制

默认没有dmarch.ini文件,需要参考dmarch_example.ini自己创建,但是这个文件里的注释是中文的,在Linux里打开是乱码,很影响阅读,可以在复制到Windows 下查看。
[dave@www.cndba.cn cndba]$ pwd
/dm/dmdbms/data/cndba
[dave@www.cndba.cn cndba]$ ll *.ini
-rw-r--r-- 1 dmdba dinstall   890  2月 23 2029 dmarch_example.ini
-rw-r--r-- 1 dmdba dinstall  1966  2月 23 2029 dmdcr_cfg_example.ini
-rw-r--r-- 1 dmdba dinstall   631  2月 23 2029 dmdcr_example.ini
-rw-r--r-- 1 dmdba dinstall 43490  2月 23 2029 dm.ini
-rw-r--r-- 1 dmdba dinstall  1537  2月 23 2029 dminit_example.ini
-rw-r--r-- 1 dmdba dinstall  2070  2月 23 2029 dmmal_example.ini
-rw-r--r-- 1 dmdba dinstall  1277  2月 23 2029 dmmonitor_example.ini
-rw-r--r-- 1 dmdba dinstall   288  2月 23 2029 dmmpp_example.ini
-rw-r--r-- 1 dmdba dinstall  1679  2月 23 2029 dmtimer_example.ini
-rw-r--r-- 1 dmdba dinstall  2146  2月 23 2029 dmwatcher_example.ini
-rw-r--r-- 1 dmdba dinstall  1241  2月 23 2029 dmwatch_example.ini
-rw-r--r-- 1 dmdba dinstall   522  2月 23 2029 dmwmon_example.ini
-rw-r--r-- 1 dmdba dinstall   636  2月 23 2029 sqllog_example.ini
-rw-r--r-- 1 dmdba dinstall   479  2月 23 2029 sqllog.ini
[dave@www.cndba.cn cndba]$ 

dmarch_example.ini的内容如下:
#comment: delete '#' at the beginning of a line to uncomment the line
#注释:删除行开头的'#'号可以取消注释

#[ARCHIVE_LOCAL1]  #REDO日志归档名
#ARCH_TYPE             = LOCAL                       #REDO日志归档类型,REALTIME/LOCAL/SYNC/ASYNC分别表示实时归档/本地归档/同步归档/异步归档
#ARCH_DEST             = c:/dmdbms/data/DAMENG  #归档目标,实时归档、同步归档和异步归档设置为远程数据库实例名,本地归档为归档文件存放路径
#ARCH_FILE_SIZE          = 128                    #单个REDO日志归档文件大小,单位Mb,取值范围(64M~2048M),仅对本地归档有效,缺省128M
#ARCH_SPACE_LIMIT     = 0                      #REDO日志归档空间限制,当所有本地归档文件达到限制值时,系统自动删除最老的归档文件。单位Mb,0表示无空间限制,取值范围(1024M~4294967294M),仅对本地归档有效,缺省为0

#[ARCHIVE_REALTIME] 
#ARCH_TYPE             = REALTIME               #实时归档
#ARCH_DEST             = DMSERVER1              #实时归档目标实例名

#最终如下:
[dave@www.cndba.cn cndba]$ cat dmarch.ini 
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 0
[dave@www.cndba.cn cndba]$ 


4.启动归档模式:直接修改dm.ini 参数
修改dm.ini 文件,将ARCH_INI改成1,参数生效即启动归档模式:
#configuration file
                MAL_INI                         =  0                    #dmmal.ini
                ARCH_INI                        =  1                    #dmarch.ini
                REP_INI                         =  0                    #dmrep.ini
                LLOG_INI                        =  0                    #dmllog.ini
                TIMER_INI                       =  0                    #dmtimer.ini
                MPP_INI                         =  0                    #dmmpp.ini

重启DM 让dm.ini 生效:

[dave@www.cndba.cn root]$ service DmServicedave stop
Stopping DmServicedave:                                    [ OK ]
[dave@www.cndba.cn root]$ service DmServicedave start
Starting DmServicedave:                                    [ OK ]
[dave@www.cndba.cn root]$ 

#已经归档模式了:
SQL> select name,value from v$parameter where name like 'ARCH%';

Server[192.168.20.191:5236]:mode is normal, state is open
connected

LINEID     NAME     VALUE
---------- -------- -----
1          ARCH_INI 1

used time: 10.272(ms). Execute id is 10.
SQL> 
SQL> select arch_mode from v$database;

LINEID     ARCH_MODE
---------- ---------
1          Y

used time: 2.574(ms). Execute id is 11.
SQL>

2.3 启动归档方法2:通过SQL语句


SQL> alter database mount;
executed successfully
used time: 00:00:01.859. Execute id is 0.

#直接通过SQL语句修改归档的相关目录信息:
SQL> alter database add archivelog 'DEST=/dm/dmarch,TYPE=local,FILE_SIZE=128,space_limit=0';
alter database add archivelog 'DEST=/dm/dmarch,TYPE=local,FILE_SIZE=128,space_limit=0';
[-806]:Error in line: 1
Duplicate archive destination.
used time: 0.491(ms). Execute id is 0.

#这里因为目录已经用过,所有更换了一个目录:
SQL> alter database add archivelog 'DEST=/dm/dmarch2,TYPE=local,FILE_SIZE=128,space_limit=0';
executed successfully
used time: 3.021(ms). Execute id is 0.
SQL> alter database archivelog;
executed successfully
used time: 9.600(ms). Execute id is 0.
SQL> alter database open;
executed successfully
used time: 748.434(ms). Execute id is 0.
SQL> select arch_mode from v$database;

LINEID     ARCH_MODE
---------- ---------
1          Y

used time: 2.218(ms). Execute id is 15.
SQL> 
SQL> select arch_name,arch_type,arch_dest,arch_file_size from v$dm_arch_ini;

LINEID     ARCH_NAME      ARCH_TYPE ARCH_DEST   ARCH_FILE_SIZE
---------- -------------- --------- ----------- --------------
1          ARCHIVE_LOCAL2 LOCAL     /dm/dmarch2 128
2          ARCHIVE_LOCAL3 LOCAL     /dm/dmarch  128

used time: 1.824(ms). Execute id is 1592.

2.4 取消归档模式

SQL> alter database mount;
executed successfully
used time: 00:00:01.873. Execute id is 0.
SQL> alter database noarchivelog;
executed successfully
used time: 55.914(ms). Execute id is 0.
SQL>alter database open;
executed successfully
used time: 737.539(ms). Execute id is 0.
SQL>  select arch_mode from v$database;

LINEID     ARCH_MODE
---------- ---------
1          N

used time: 1.980(ms). Execute id is 12.
SQL> select name,value from v$parameter where name like 'ARCH%';

LINEID     NAME     VALUE
---------- -------- -----
1          ARCH_INI 0

used time: 6.793(ms). Execute id is 13.
SQL>

2.5 图形界面启用归档模式

  1. 运行DM管理工具并连接
  2. 在”LOCALHOST(SYSDBA)节点,点右键,选择管理服务器
  3. 将数据库状态从”打开”更改成”配置”,再点击”转换”按纽
  4. 在归档配置下,选择”归档(R)” 再点”添加”,输入”归档目标”一栏的路径
  5. 再将系统状态从”配置” 改为”打开” 点击”转换”按纽 即完成数据库归档模式的修改

2.6 删除归档

我们之前操作了2次,此时我们查询参数,就会发现有2个归档目录:

[dave@www.cndba.cn cndba]$ cat dmarch.ini 
#DaMeng Database Archive Configuration file
#this is comments

    ARCH_WAIT_APPLY      = 1        

[ARCHIVE_LOCAL1]
    ARCH_TYPE            = LOCAL        
    ARCH_DEST            = /dm/dmarch        
    ARCH_FILE_SIZE        = 256        
    ARCH_SPACE_LIMIT        = 0        

[ARCHIVE_LOCAL2]
    ARCH_TYPE            = LOCAL        
    ARCH_DEST            = /dm/dmarch2        
    ARCH_FILE_SIZE        = 128        
    ARCH_SPACE_LIMIT        = 0        

[dave@www.cndba.cn cndba]$ 


对于本地归档,只能通过修改dmarch.ini 文件来进行删除归档目录,如果通过SQL语句会报如下错误:
SQL> alter database delete archivelog 'DEST=/dm/dmarch2';
alter database delete archivelog 'DEST=/dm/dmarch2';
[-2004]:Error in line: 1
Unsupported SQL type.
used time: 0.897(ms). Execute id is 0.
SQL> 

如果是实时归档或者同步归档,可以直接通过SQL进行删除或者修改:
ALTER DATABASE MOUNT;
ALTER DATABASE DELETE ARCHIVELOG 'DEST = syn';
ALTER DATABASE MODIFY ARCHIVELOG 'DEST = realtime, TYPE = SYNC';

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2297
    原创
  • 3
    翻译
  • 727
    转载
  • 201
    评论
  • 访问:10453886次
  • 积分:4625
  • 等级:核心会员
  • 排名:第1名
精华文章
    热门文章
      Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

      AI QQ群