这里达梦数据库学习系列的第三篇文章,今天重点了解一下达梦数据库的物理文件结构。
[dmdba@mogdb data]$ tree ./enmotech/
./enmotech/
├── bak
├── ctl_bak
│ ├── dm_20210526024742_318210.ctl
│ ├── dm_20210526024742_323043.ctl
│ ├── dm_20210526024742_324152.ctl
│ ├── dm_20210624184634_902109.ctl
│ ├── dm_20210714192406_585108.ctl
│ ├── dm_20210729003202_244924.ctl
│ ├── dm_20210730072401_783694.ctl
│ ├── dm_20210821022652_517401.ctl
│ ├── dm_20210824060216_278179.ctl
│ ├── dm_20210824061504_600325.ctl
│ └── dm_20210825004716_595562.ctl
├── dm.ctl
├── dm.ini
├── dminit20210526020626.log
├── dm_service.prikey
├── enmotech01.dbf
├── enmotech01.log
├── enmotech02.log
├── enmotech03.log
├── HMAIN
├── MAIN.DBF
├── rep_conflict.log
├── ROLL.DBF
├── sqllog.ini
├── SYSTEM.DBF
├── TEMP.DBF
└── trace
4 directories, 25 files
从数据库目录来看,其中包含了几类主要的问题:控制文件、system文件、回滚段文件、temp文件、HMAIN文件以及redo日志文件、参数文件dm.ini。
@toc
参数文件之前已经讲过,这里不再描述。首先来看下控制文件。
[dmdba@mogdb enmotech]$ cat dm.ini |grep CTL_
CTL_PATH = /opt/dm/dmdbms/data/enmotech/dm.ctl #ctl file path
CTL_BAK_PATH = /opt/dm/dmdbms/data/enmotech/ctl_bak #dm.ctl backup path
CTL_BAK_NUM = 10 #backup number of dm.ctl, allowed to keep one more backup file besides specified number.
[dmdba@mogdb enmotech]$
通过上面几个参数来进行定义控制文件的路径和备份路径;以及控制文件保留的数量(这一点比较灵活,比Oracle好,Oracle如果默认不配置策略,会永久保留)。 当数据库中文件数量发生变化时,比如新增文件或者删除文件时,控制文件会自动进行备份。接下来我们strings来看看控制文件有什么内容:
[dmdba@mogdb enmotech]$ strings dm.ctl
enmotech
SYSTEM
/opt/dm/dmdbms/data/enmotech/SYSTEM.DBF
ROLL
/opt/dm/dmdbms/data/enmotech/ROLL.DBF
RLOG
/opt/dm/dmdbms/data/enmotech/enmotech01.log
/opt/dm/dmdbms/data/enmotech/enmotech02.log
/opt/dm/dmdbms/data/enmotech/enmotech03.log
MAIN
/opt/dm/dmdbms/data/enmotech/MAIN.DBF
ENMOTECH
NORMAL
/opt/dm/dmdbms/data/enmotech/enmotech01.dbf
HMAIN"
/opt/dm/dmdbms/data/enmotech/HMAIN
[dmdba@mogdb enmotech]$
数据库在启动之前,首先需要加载控制文件,那么控制文件中到底有哪些内容呢?如果控制文件损坏或者不存在,我们来看看启动数据库是什么现象?
[dmdba@mogdb enmotech]$ DmServicedmdb stop
Stopping DmServicedmdb: [ OK ]
[dmdba@mogdb enmotech]$ mv dm.ctl dm.ctl0825
[dmdba@mogdb enmotech]$
[dmdba@mogdb enmotech]$ DmServicedmdb start
Starting DmServicedmdb: [ FAILED ]
file dm.key not found, use default license!
Read ini error, name:CTL_PATH, value:/opt/dm/dmdbms/data/enmotech/dm.ctl
dmserver startup failed, code = -803 [Invalid ini config value]
nsvr_ini_file_read failed, [code: -803]
[dmdba@mogdb log]$
如果是控制文件损坏呢?假设问是存在的。 我这里将数据库名称enmotech修改成enmottch。看看能否启动数据库?
[dmdba@mogdb enmotech]$ vi dm.ctl
[dmdba@mogdb enmotech]$ strings dm.ctl
enmottch
SYSTEM
/opt/dm/dmdbms/data/enmotech/SYSTEM.DBF
ROLL
/opt/dm/dmdbms/data/enmotech/ROLL.DBF
RLOG
/opt/dm/dmdbms/data/enmotech/enmotech01.log
/opt/dm/dmdbms/data/enmotech/enmotech02.log
/opt/dm/dmdbms/data/enmotech/enmotech03.log
MAIN
/opt/dm/dmdbms/data/enmotech/MAIN.DBF
ENMOTECH
NORMAL
/opt/dm/dmdbms/data/enmotech/enmotech01.dbf
HMAIN"
/opt/dm/dmdbms/data/enmotech/HMAIN
[dmdba@mogdb enmotech]$ DmServicedmdb start
Starting DmServicedmdb: [ OK ]
[dmdba@mogdb enmotech]$
居然能够顺利启动数据库?这是神马情况??? 急需看看数据库日志呢。
2021-08-25 04:21:40.032 [INFO] database P0000014223 T0000000000000014223 Database's huge_with_delta is 1, and rlog_gen_for_huge is 0!
2021-08-25 04:21:40.034 [INFO] database P0000014223 T0000000000000014223 os_sema2_create_low, create and inc sema success, key:233665561, sem_id:32768, sem_value:1!
2021-08-25 04:21:40.043 [INFO] database P0000014223 T0000000000000014223 DM Database Server x64 V8 1-1-126-20.09.04-126608-ENT startup...
2021-08-25 04:21:40.137 [INFO] database P0000014223 T0000000000000014223 fil_sys_init
2021-08-25 04:21:40.291 [INFO] database P0000014223 T0000000000000014223 Database mode = 0, oguid = 0
2021-08-25 04:21:40.295 [WARNING] database P0000014223 T0000000000000014223 License will expire on 2021-09-08
2021-08-25 04:21:40.298 [INFO] database P0000014223 T0000000000000014223 Initialize temp tablespace, file path: /opt/dm/dmdbms/data/enmotech/TEMP.DBF, code: 0
2021-08-25 04:21:40.308 [INFO] database P0000014223 T0000000000000014223 rfil[/opt/dm/dmdbms/data/enmotech/enmotech01.log] ver: 7006, sta: 1, arch_lsn = 0, arch_seq = 0, clsn = 45150283, clsn_fil = 0, clsn_off = 2704790016, l_next_seq = 714276, g_next_seq = 714276, free = 2704790016
2021-08-25 04:21:40.308 [INFO] database P0000014223 T0000000000000014223 rlog4_apply_info_set, p_db_magic:[0x0](old value:0x0), n_apply_ep: 0(old n_ep=0), apply_info_lsn: 0(old apply_info_lsn=0), pkg_seq_arr:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], apply_lsn_arr:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2021-08-25 04:21:40.309 [INFO] database P0000014223 T0000000000000014223 hlog_sys_destroy, n_logs[1], adjust_sta[0]
2021-08-25 04:21:40.310 [INFO] database P0000014223 T0000000000000014223 rfil[/opt/dm/dmdbms/data/enmotech/enmotech01.log] ver: 7006, sta: 1, arch_lsn = 0, arch_seq = 0, clsn = 45150283, clsn_fil = 0, clsn_off = 2704790016, l_next_seq = 714276, g_next_seq = 714276, free = 2704790016
2021-08-25 04:21:40.311 [INFO] database P0000014223 T0000000000000014223 rlog4_apply_info_set, p_db_magic:[0x0](old value:0x0), n_apply_ep: 0(old n_ep=0), apply_info_lsn: 0(old apply_info_lsn=0), pkg_seq_arr:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], apply_lsn_arr:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2021-08-25 04:21:40.316 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:0, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.320 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:1, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.324 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:2, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.330 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:3, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.333 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:4, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.337 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:5, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.340 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:6, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.343 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:7, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.350 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:8, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.354 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:9, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.358 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:10, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.362 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:11, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.365 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:12, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.368 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:13, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.371 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:14, set plog_redo->redo_lsn from 0 to 0
2021-08-25 04:21:40.374 [INFO] database P0000014223 T0000000000000014223 plog_redo_init, rlog is null, dsc_seqno:15, set plog_redo->redo_lsn from 0 to 0