绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
达梦数据库探索-数据库实例文件详解
2022-03-30 11:01:21

达梦数据库探索-数据文件详解
本文将对达梦数据库实例中的每个文件做仔细的剖析,为了不让小朋友误删文件,作者可是操碎了心呐

1、初始化一个数据库实例
[root@localhost ~]# cd /opt/dmdbms/bin
[root@localhost bin]# ./dminit path=/data
initdb V8
db version: 0x7000b
file dm.key not found, use default license!
License will expire on 2021-11-06
log file path: /data/DAMENG/DAMENG01.log
log file path: /data/DAMENG/DAMENG02.log
write to dir [/data/DAMENG].
create dm database success. 2021-01-10 04:39:03

2、查看一下有啥文件
文件不是很多嘛,只有10个文件和3个目录。

[root@localhost bin]# cd /data/DAMENG/
[root@localhost DAMENG]# ls -la
总用量 496
drwxr-xr-x. 5 dmdba dinstall 238 1月 10 04:39 .
drwxr-xr-x. 3 root root 20 1月 10 04:39 ..
drwxr-xr-x. 2 dmdba dinstall 6 1月 10 04:39 bak
drwxr-xr-x. 2 dmdba dinstall 42 1月 10 04:39 ctl_bak
-rw-r--r--. 1 dmdba dinstall 268435456 1月 10 04:39 DAMENG01.log
-rw-r--r--. 1 dmdba dinstall 268435456 1月 10 04:39 DAMENG02.log
-rw-r--r--. 1 dmdba dinstall 5120 1月 10 04:39 dm.ctl
-rw-r--r--. 1 dmdba dinstall 48784 1月 10 04:39 dm.ini
-rw-r--r--. 1 dmdba dinstall 790 1月 10 04:39 dminit20210110043900.log
-rw-r--r--. 1 dmdba dinstall 633 1月 10 04:39 dm_service.prikey
drwxr-xr-x. 2 dmdba dinstall 6 1月 10 04:39 HMAIN
-rw-r--r--. 1 dmdba dinstall 134217728 1月 10 04:39 MAIN.DBF
-rw-r--r--. 1 dmdba dinstall 134217728 1月 10 04:39 ROLL.DBF
-rw-r--r--. 1 dmdba dinstall 479 1月 10 04:39 sqllog.ini
-rw-r--r--. 1 dmdba dinstall 10485760 1月 10 04:39 SYSTEM.DBF
[root@localhost DAMENG]# ll bak/*
ls: 无法访问'bak/*': No such file or directory
[root@localhost DAMENG]# ll ctl_bak/*
-rw-r--r--. 1 dmdba dinstall 5120 1月 10 04:39 ctl_bak/dm_20210110043902_442780.ctl
[root@localhost DAMENG]# ll HMAIN/*
ls: 无法访问'HMAIN/*': No such file or directory

工欲善其事,必先利其器。遇事不要慌《DM8管理员手册.pdf》搂到本地翻一翻。

[root@localhost DAMENG]# cd /opt/dmdbms/doc
[root@localhost doc]# ls
DM8安全管理.pdf DM8作业系统使用手册.pdf
DM8安装手册.pdf DM8_dexp和dimp使用手册.pdf
DM8备份与还原.pdf DM8_DIsql使用手册.pdf
DM8程序员手册.pdf DM8_dmdbchk使用手册.pdf
DM8大规模并行处理MPP.pdf DM8_dmfldr使用手册.pdf
DM8共享存储集群.pdf DM8_dminit使用手册.pdf
DM8集群代理使用手册.pdf DM8_dmPython使用手册.pdf
DM8数据守护与读写分离集群V4.0.pdf DM8_Linux服务脚本使用手册.pdf
DM8透明分布式数据库.pdf DM8_PROC使用手册.pdf
DM8系统包使用手册.pdf DM8_SQL程序设计.pdf
DM8系统管理员手册.pdf DM8_SQL语言使用手册.pdf
2.1、文件夹介绍
1、文件夹bak:
数据库备份的默认目录,这个可以在dm.ini中修改,重启数据库生效
2、文件夹HMAIN:
空的,这是什么玩意啊,查完手册才知道,达梦是一个行列混存的数据库,HMAIN意思就是大表空间,用来放列存表,可以通过SQL 语句查看。

select * from V$HUGE_TABLESPACE;
1
3、文件夹ctl_bak:
文件夹里面有一个文件。见名知意,ctl_bak目录是备份ctl文件的,瞅一眼下面那10个文件,只有一个ctl后缀的文件,一定就是他了!!!达梦创建数据库时候还顺便来了一个ctl文件备份,看来这个文件比较重要啊。

2.2、文件介绍
1)DAMENG01.log、DAMENG02.log 两个文件:
不要被.log文件后缀迷惑,这可不是普通的日志啊!!!两个文件可是数据库的重做日志文件,两个文件循环使用,洋名是REDO日志
2)dm.ctl 文件:
翻一下达梦给的手册看看这个文件是啥,原来是控制文件,记录的信息还是蛮多的,看这介绍一旦坏了数据库可是就起不来了啊!!默认循环备份10个,数据库ctl文件要是坏了可千万不能频繁启动数据库,一定要淡定!!有几个注意点留意一下,看下图介绍
  

3)dm.ini文件:
数据库参数的配置文件,能把这里面的参数吃透的话,就是达梦数据库的大神了!!!
4)dminit20210110043900.log文件:
dminit20210110043900.log,文件记录了数据库初始化时候的信息,明文的,这个是真log啦
5)dm_service.prikey文件:
看起来是个钥匙,应该是公钥,私钥估计是在库里吧?文档里没有关于这个文件的介绍
6)MAIN.DBF、ROLL.DBF、SYSTEM.DBF三个文件:
这几个文件不用多说了,主表空间数据文件,回滚表空间数据文件,系统表空间数据文件,当然也可以用SQL语句查看

select * from V$TABLESPACE;
1
7)sqllog.ini文件:
SQL日志的配置文件,可以通过多种组合设置来输出自己想要的SQL日志记录信息

3、启动数据库看文件有啥变化
3.1、启动数据库
数据库启起来看看吧,有两个SQL也正好查一查验证一下

[root@localhost doc]# cd /opt/dmdbms/bin
[root@localhost bin]# ./dmserver /data/DAMENG/dm.ini
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-144-20.11.06-129436-ENT startup...
Database mode = 0, oguid = 0
License will expire on 2021-11-06
file lsn: 0
ndct db load finished
ndct fill fast pool finished
iid page's trxid[1002]
NEXT TRX ID = 1003
pseg_collect_mgr_items, total collect 0 active_trxs, 0 cmt_trxs, 0 pre_cmt_trxs, 0 active_pages, 0 cmt_pages, 0 pre_cmt_pages, 0 mgr pages, 0 mgr recs!total 0 active crash trx, pseg_crash_trx_rollback sys_only(0) begin ...
pseg_crash_trx_rollback end, total 0 active crash trx, include 0 empty_trxs, 0 empty_pages which only need to delete mgr recs.pseg_crash_trx_rollback end
pseg recv finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
trx: 2004 purged 1 pages
....
trx: 2526 purged 1 pages
systables desc init success.
ndct_db_load_info success.
nsvr_process_before_open begin.
nsvr_process_before_open success.
total 0 active crash trx, pseg_crash_trx_rollback sys_only(0) begin ...
pseg_crash_trx_rollback end, total 0 active crash trx, include 0 empty_trxs, 0 empty_pages which only need to delete mgr recs.pseg_crash_trx_rollback end
SYSTEM IS READY.
启动过程可以看出数据库初始化了不少东西,比如:systables

3.2、看看我们的数据文件
总用量多了,看来写了不少东西啊,文件夹又多了一个trace,文件多了3个。来吧一个一个看看

[root@localhost ~]# cd /data/DAMENG/
[root@localhost DAMENG]# ls -la
总用量 47564
drwxr-xr-x. 6 dmdba dinstall 4096 1月 10 06:33 .
drwxr-xr-x. 3 root root 20 1月 10 04:39 ..
drwxr-xr-x. 2 dmdba dinstall 6 1月 10 04:39 bak
drwxr-xr-x. 2 dmdba dinstall 114 1月 10 06:33 ctl_bak
-rw-r--r--. 1 dmdba dinstall 268435456 1月 10 06:38 DAMENG01.log
-rw-r--r--. 1 dmdba dinstall 268435456 1月 10 06:33 DAMENG02.log
-rw-r--r--. 1 dmdba dinstall 5120 1月 10 06:33 dm.ctl
-rw-r--r--. 1 dmdba dinstall 48784 1月 10 04:39 dm.ini
-rw-r--r--. 1 dmdba dinstall 790 1月 10 04:39 dminit20210110043900.log
-rw-r--r--. 1 dmdba dinstall 633 1月 10 04:39 dm_service.prikey
drwxr-xr-x. 2 dmdba dinstall 6 1月 10 04:39 HMAIN
-rw-r--r--. 1 dmdba dinstall 134217728 1月 10 04:39 MAIN.DBF
-rw-r--r--. 1 dmdba dinstall 12 1月 10 06:27 rep_conflict.log
-rw-r--r--. 1 dmdba dinstall 134217728 1月 10 06:38 ROLL.DBF
-rw-r--r--. 1 dmdba dinstall 479 1月 10 04:39 sqllog.ini
-rw-r--r--. 1 dmdba dinstall 24117248 1月 10 06:38 SYSTEM.DBF
-rw-r--r--. 1 dmdba dinstall 10485760 1月 10 06:33 TEMP.DBF
drwxr-xr-x. 2 dmdba dinstall 6 1月 10 06:27 trace
[root@localhost DAMENG]# ll bak/*
ls: 无法访问'bak/*': No such file or directory
[root@localhost DAMENG]# ll ctl_bak/*
-rw-r--r--. 1 dmdba dinstall 5120 1月 10 04:39 ctl_bak/dm_20210110043902_442780.ctl
-rw-r--r--. 1 dmdba dinstall 5120 1月 10 06:27 ctl_bak/dm_20210110062757_761342.ctl
[root@localhost DAMENG]# ll HMAIN/*
ls: 无法访问'HMAIN/*': No such file or directory
[root@localhost DAMENG]# ll trace/*
ls: 无法访问'trace/*': No such file or directory
3.2、多出来的文件夹
1)文件夹trace:
系统跟踪相关的操作存放日志的路径,可气的是,数据库配置文件的默认路径居然不在这,TRACE_PATH默认为空,默认取值是SYSTEM_PATH的路径,看来使用的时候需要手动设置一下了

3.3、多出来的文件
1)文件TEMP.DBF:
临时表空间,这个表空间竟然是启动时候才初始化的,建库的时候没看到这个数据文件。
2)文件rep_conflict.log:
这是个啥,看了一下是空的,应该没啥用
3)文件dm_20210110062757_761342.ctl:
又多了一个ctl备份,看来启动数据库也会触发备份ctl配置文件啊

4、 哪些文件不能碰
预备:这次我们来个玩个大的,数据库 实例目录下,文件全移走
启动过程中根据报错一个一个移回来~

[root@localhost DAMENG]# mv * ../

1
2
1)启动数据库,出现个报错,3号文件错误 dm.ini文件:

报错信息说明了一切,找不到配置文件喽~~

open ini file ../data/DAMENG/dm.ini failed!
dmserver startup failed, code = -104 [Invalid INI file]
nsvr_ini_file_read failed, [code: -104]
1
2
3
单独放回来,在试

[root@localhost DAMENG]# mv ../dm.ini .

1
2
2)启动数据库,出现第二个报错,2号文件错误dm.ctl找不到:

报错信息说明了一切,找不到控制文件喽~~

Read ini error, name:CTL_PATH, value:/opt/dmdbms/data/DAMENG/dm.ctl
dmserver startup failed, code = -803 [Invalid ini config value]
nsvr_ini_file_read failed, [code: -803]
1
2
3
用数据库自动备份的文件还原回来试一下看看

[root@localhost DAMENG]# [root@localhost DAMENG]# ll ctl_bak/*
dm_20201229144155_982578.ctl
dm_20210118134223_907769.ctl
dm_20210120141403_546954.ctl
dm_20210121092340_918232.ctl
dm_20210122120609_504316.ctl
dm_20210127094456_308227.ctl
dm_20210128155616_141529.ctl
dm_20210128203149_301475.ctl
dm_20210129102951_161360.ctl
dm_20210201105727_685053.ctl
dm_20210205211945_110853.ctl
[root@localhost DAMENG]# mv ctl_bak/dm_20210205211945_110853.ctl dm.ctl
数据库启动一下~~完美启动
dm.ctl文件是二进制文件,想查看的话,达梦提供了ctl文件与txt文件互转的工具

[root@localhost bin]# ./dmctlcvt help
DMCTLCVT V8

格式: ./dmctlcvt KEYWORD=value
注意: 控制文件名称必须指定为dm.ctl、dmmpp.ctl、dss.ctl

关键字 说明
--------------------------------------------------------------------------------
TYPE 1 转换控制文件为文本文件(源文件路径中控制文件名称必须是dm.ctl或dmmpp.ctl或dss.ctl)
2 转换文本文件为控制文件(目标文件路径中控制文件名称必须是dm.ctl或dmmpp.ctl或dss.ctl)
SRC 源文件路径
DEST 目标文件路径
DCR_INI dmdcr.ini文件路径
DFS_INI dmdfs.ini文件路径
HELP 打印帮助信息

示例:
./dmctlcvt TYPE=1 SRC=/opt/dmdbms/data/dameng/dm.ctl DEST=/opt/dmdbms/data/dameng/dmctl.txt
./dmctlcvt TYPE=2 SRC=/opt/dmdbms/data/dameng/dmctl.txt DEST=/opt/dmdbms/data/dameng/dm.ctl
单独放回来,在试

[root@localhost DAMENG]# mv ../dm.ctl .

3)启动数据库,出现第3个报错,6号文件错误系统表空间找不到:

报错信息说明了一切,找不到控制文件喽~~

Read ini warning, default dm.ctl backup path [/opt/dmdbms/data/DAMENG/ctl_bak] does not exist.
Read ini warning, default backup path [/opt/dmdbms/data/DAMENG/bak] does not exist.
version info: develop
/opt/dmdbms/data/DAMENG/SYSTEM.DBF not exist

单独放回来,在试

[root@localhost DAMENG]# mv ../SYSTEM.DBF .
1
4)启动数据库,出现第4、5、6个报错,两个目录还有一个解密失败??:

Read ini warning, default dm.ctl backup path [/opt/dmdbms/data/DAMENG/ctl_bak] does not exist.
Read ini warning, default backup path [/opt/dmdbms/data/DAMENG/bak] does not exist.
version info: develop
Server key decrypt failed!!
Server exit!!
1
2
3
4
5
我们一个一个来

[root@localhost DAMENG]# mv ../ctl_bak .
1
启动数据库,少了一个报错

Read ini warning, default backup path [/opt/dmdbms/data/DAMENG/bak] does not exist.
version info: develop
Server key decrypt failed!!
Server exit!!
1
2
3
4
bak 拷贝回来

[root@localhost DAMENG]# mv ../bak .
1
启动数据库,又少了一个报错

version info: develop
Server key decrypt failed!!
Server exit!!
1
2
3
是不是看着脑瓜子嗡嗡的。。。还好我机智,还记得5号文件不dm_service.prikey,拿回来试试看

[root@localhost DAMENG]# mv ../dm_service.prikey .
1
5)启动数据库,出现了一个新的报错,回滚段找不到:

Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-88-20.06.24-123627-ENT startup...
Database mode = 0, oguid = 0
/opt/dmdbms/data/DAMENG/ROLL.DBF not exist, can not startup
1
2
3
4
5
ROLL.DBF拷贝回来

[root@localhost DAMENG]# mv ../ROLL.DBF .
1
6)启动数据库,这次会是什么呢,重做日志,1号文件,姗姗来迟啊:

Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-88-20.06.24-123627-ENT startup...
Database mode = 0, oguid = 0
/opt/dmdbms/data/DAMENG/DAMENG01.log not exist, can not startup
1
2
3
4
5
DAMENG01.log拷贝回来

[root@localhost DAMENG]# mv ../DAMENG01.log .
1
启动数据库,一组文件看来一个都不能少啊

Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-88-20.06.24-123627-ENT startup...
Database mode = 0, oguid = 0
/opt/dmdbms/data/DAMENG/DAMENG02.log not exist, can not startup
1
2
3
4
5
DAMENG02.log拷贝回来

[root@localhost DAMENG]# mv ../DAMENG02.log .
1
7)启动数据库,这次又会是什么错误呢:

卧草!!!结局没想到,居然成功启动了

SYSTEM IS READY.
1
8)我们用充满怀疑的心态登录数据库看看情况

./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间: 10.053(毫秒)
SQL>
1
2
3
4
看到数据库是配置状态,我终于放心了。。。不应该这么顺利嘛~

9)open一下数据库看看

./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间: 10.053(毫秒)
SQL>alter database open;
1
2
3
4
居然可以open~~~

./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间: 10.053(毫秒)
SQL>select status$ from V$INSTANCE;
行号 STATUS$
---------- -------
1 OPEN

已用时间: 0.548(毫秒). 执行号:63.
1
2
3
4
5
6
7
8
9
10)万万没想到啊会这么顺利,我决定看看日志有什么异常信息

果不其然,是有报错的,MAIN.DBF找不到,不过数据库能启动起来还是很厉害的

2021-02-05 23:53:36.252 [ERROR] database P0000004116 T0000000000000004473 os_file_open at (/ssd/ztn/trunk8_rel/dta/fil.c: 2921)
error! desc: No such file or directory, path: /opt/dmdbms/data/DAMENG/MAIN.DBF, code: 2
1
2
我正好之前创建过表,是放在MAIN表空间下的,查一下表试试看

SQL> select * from TEST;
select * from TEST;
[-3408]:表空间[MAIN]处于脱机状态.
已用时间: 4.595(毫秒). 执行号:0.
1
2
3
4
我们把表空间拷贝回来,在试试看

[root@localhost DAMENG]# mv ../MAIN.DBF .
1
把表空间数据文件挂上,再查询

SQL> alter tablespace MAIN online;
操作已执行
已用时间: 11.302(毫秒). 执行号:71.
SQL> select count(1) from TEST;

行号 COUNT(1)
---------- --------------------
1 10

已用时间: 315.397(毫秒). 执行号:73
11)看起来数据库是正常了,还有什么文件没拷贝进来呢,我们看一下

两个文件夹,两个log文件,一个ini配置文件,一个临时表空间。这冷板凳啊,坐的还不孤单哦,数据库可以正常使用就先不管这些啦~~

HMAIN sqllog.ini trace
dminit20200830171425.log rep_conflict.log TEMP.DBF
1
2
5、 总结
从第4节可以看出达梦数据库的启动顺序,有高手的话应该也能看出一点原理,希望这个破坏性的实验能让大家增长一些奇奇怪怪的小知识。
————————————————
版权声明:本文为CSDN博主「El Shaddai.plus」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39782756/article/details/102511179

分享好友

分享这个小栈给你的朋友们,一起进步吧。

DaMeng
创建时间:2022-03-29 15:16:57
DaMeng
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • gaokeke123
    专家
戳我,来吐槽~