数据库日志管理
逻辑日志和物理日志是两种非常重要的磁盘构件。
逻辑日志用来存放所有事务的操作过程。
默认状态下,当服务器初始化时,逻辑日志和物理日志被创建在root dbspace上,在这之后逻辑日志和物理日志需要迁移到独立的logdbspace和plogdbspace上。
- 逻辑日志
逻辑日志主要用来记录事务细节,由三个或更多(最大32676个)的逻辑日志文件组成循环文件。逻辑日志除了事务回滚、系统故障恢复需要使用,还被使用在GBase 8s的高可用数据复制技术中。与物理日志一样,逻辑日志由实例中所有数据库共享使用。
一般配置多个逻辑日志文件,日志文件顺序使用,当日志文件标识为备份状态时,就可以被重复循环使用,当所有的日志文件都写满时,可以动态增加新的逻辑日志文件。
举例:下面为一个实际系统的逻辑日志情况,总共41个逻辑日志文件,日志文件所在的dbspace名为llogdbs,对应的chunk为2号,当前使用的是第37号逻辑日志文件
onstat -d
Dbspaces
address number flags fchunk nchunks pgsize flags owner name
47da3028 1 0x70001 1 1 2048 N BA gbasedbt rootdbs
4c4e29d8 2 0x60001 2 1 2048 N BA gbasedbt llogdbs
4c4e2c08 3 0x70001 3 1 2048 N BA gbasedbt plogdbs
Chunks
address chunk/dbs offset size free bpages flags pathname
47da3258 1 1 0 102400 91508 PO-B-D /opt/dbs/rootdbs
4c4bc028 2 2 0 358400 9847 PO-B-D /opt/dbs/llogdbs
4c4bd028 3 3 0 358400 10447 PO-B-D /opt/dbs/plogdbs
address number flags uniqid begin size used %used
47f1cf88 4 U-B---- 7 2:53 8500 8500 100.00
4c458970 5 U-B---- 8 2:8553 8500 8500 100.00
4c4589d8 6 U-B---- 9 2:17053 8500 8500 100.00
4c458a40 7 U-B---- 10 2:25553 8500 8500 100.00
4c458aa8 8 U-B---- 11 2:34053 8500 8500 100.00
4c458b10 9 U-B---- 12 2:42553 8500 8500 100.00
4c458b78 10 U-B---- 13 2:51053 8500 8500 100.00
4c458be0 11 U-B---- 14 2:59553 8500 8500 100.00
4c458c48 12 U-B---- 15 2:68053 8500 8500 100.00
4c458cb0 13 U-B---- 16 2:76553 8500 8500 100.00
4c458d18 14 U-B---- 17 2:85053 8500 8500 100.00
4c458d80 15 U-B---- 18 2:93553 8500 8500 100.00
4c458de8 16 U-B---- 19 2:102053 8500 8500 100.00
4c458e50 17 U-B---- 20 2:110553 8500 8500 100.00
4c458eb8 18 U-B---- 21 2:119053 8500 8500 100.00
4c458f20 19 U-B---- 22 2:127553 8500 8500 100.00
4c458f88 20 U-B---- 23 2:136053 8500 8500 100.00
47cd4f30 21 U-B---- 24 2:144553 8500 8500 100.00
47cd4f98 22 U-B---- 25 2:153053 8500 8500 100.00
47da3f30 23 U-B---- 26 2:161553 8500 8500 100.00
47da3f98 24 U-B---- 27 2:170053 8500 8500 100.00
4c4e2028 25 U-B---- 28 2:178553 8500 8500 100.00
4c4e2090 26 U-B---- 29 2:187053 8500 8500 100.00
4c4e20f8 27 U-B---- 30 2:195553 8500 8500 100.00
4c4e2160 28 U-B---- 31 2:204053 8500 8500 100.00
4c4e21c8 29 U-B---- 32 2:212553 8500 8500 100.00
4c4e2230 30 U-B---- 33 2:221053 8500 8500 100.00
4c4e2298 31 U-B---- 34 2:229553 8500 8500 100.00
4c4e2300 32 U-B---- 35 2:238053 8500 8500 100.00
4c4e2368 33 U-B---- 36 2:246553 8500 8500 100.00
4c4e23d0 34 U—C-L 37 2:255053 8500 2066 24.31
4c4e2438 35 A------ 0 2:263553 8500 0 0.00
4c4e24a0 36 A------ 0 2:272053 8500 0 0.00
4c4e2508 37 A------ 0 2:280553 8500 0 0.00
4c4e2570 38 A------ 0 2:289053 8500 0 0.00
4c4e25d8 39 A------ 0 2:297553 8500 0 0.00
4c4e2640 40 A------ 0 2:306053 8500 0 0.00
4c4e26a8 41 A------ 0 2:314553 8500 0 0.00
4c4e2710 42 A------ 0 2:323053 8500 0 0.00
4c4e2778 43 A------ 0 2:331553 8500 0 0.00
4c4e27e0 44 A------ 0 2:340053 8500 0 0.00
41 active, 41 total
以下信息将记录在逻辑日志中:
DDL语句(CREATE、DROP、ALTER);
索引项信息的增加和删除;
记录行增加、删除和修改;
Blobpagemap结构;
Checkpoint记录;
Space的分配和管理(chunks、extents、logical logs)。
以下情况下不记录逻辑日志:
SQL语句——select语句;
不记日志临时表(with no log)数据修改;
blobspace blobs;
记录所在的数据页、物理日志记录page;
no-logging数据库DML语句不产生逻辑日志,但是DDL语句会有逻辑日志。
- 逻辑日志管理
在增加一个逻辑日志前必须考虑以下问题:
确保dbspace中有足够的连续空间;
在系统备份过程中不能增加逻辑日志文件;
不能通过修改配置参数的方式增加逻辑日志文件。
在通过onparams功能增加逻辑日志文件时,需要指定新逻辑日志文件的大小以及所在的dbspace的名称。如果不显式的指定文件大小,则将使用LOGSIZE的值作为默认值。
通过onparms功能增加逻辑日志文件的参数:
参数 说明
-a 表明操作为增加逻辑日志文件
-d dbspace 逻辑日志文件所在的dbspace
-s size 新逻辑日志文件的大小(如果没有指定,则使用LOGSIZE的值作为默认值)
在使用onparams增加逻辑日志前,需要使用onspaces增加一个dbspace,这里的例子为创建一个空间为20GB的llogdbs,必须采用默认的pagesize:
onspaces -c -d llogdbs -p /opt/dbs/llogdbs -o 0 -s 2000000
以下例子为在llogdbs中增加一个新的逻辑日志,大小为10000KB:
onparams -a -d llogdbs -s 10000
删除逻辑日志
若一个逻辑日志已经被备份过,而且不包含最后一个Checkpoint或开发(open)的事务,那么这个逻辑日志文件就可以被认为是无用的,可以使用onparams功能删除该逻辑日志文件。
通过onparams功能删除逻辑日志文件的参数:
参数 说明
-d 表明操作为删除逻辑日志文件
-l logid 指定需要删除的逻辑日志文件
需要注意的是,logid是逻辑日志文件的编号,不是逻辑日志的编号。逻辑日志的logid是固定的,永远指向磁盘上的同一个逻辑日志文件。
只有无用的或者新增的逻辑日志文件可以被删除。此外,当只有3个可用的逻辑日志时,无法删除逻辑日志。
以下例子为删除一个logid为21的逻辑日志文件:
onparams -d -l 21
建议在删除逻辑日志文件之前备份root dbspace和被修改的dbspace,以防数据库服务器在数据恢复之后可能会使用到被删除的逻辑日志文件。




