达梦数据库探索-数据库实例文件详解

Posted El Shaddai.plus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了达梦数据库探索-数据库实例文件详解相关的知识,希望对你有一定的参考价值。

达梦数据库探索-数据文件详解

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

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 110 04:39 .
drwxr-xr-x. 3 root  root            20 110 04:39 ..
drwxr-xr-x. 2 dmdba dinstall         6 110 04:39 bak
drwxr-xr-x. 2 dmdba dinstall        42 110 04:39 ctl_bak
-rw-r--r--. 1 dmdba dinstall 268435456 110 04:39 DAMENG01.log
-rw-r--r--. 1 dmdba dinstall 268435456 110 04:39 DAMENG02.log
-rw-r--r--. 1 dmdba dinstall      5120 110 04:39 dm.ctl
-rw-r--r--. 1 dmdba dinstall     48784 110 04:39 dm.ini
-rw-r--r--. 1 dmdba dinstall       790 110 04:39 dminit20210110043900.log
-rw-r--r--. 1 dmdba dinstall       633 110 04:39 dm_service.prikey
drwxr-xr-x. 2 dmdba dinstall         6 110 04:39 HMAIN
-rw-r--r--. 1 dmdba dinstall 134217728 110 04:39 MAIN.DBF
-rw-r--r--. 1 dmdba dinstall 134217728 110 04:39 ROLL.DBF
-rw-r--r--. 1 dmdba dinstall       479 110 04:39 sqllog.ini
-rw-r--r--. 1 dmdba dinstall  10485760 110 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 110 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;

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;

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 110 06:33 .
drwxr-xr-x. 3 root  root            20 110 04:39 ..
drwxr-xr-x. 2 dmdba dinstall         6 110 04:39 bak
drwxr-xr-x. 2 dmdba dinstall       114 110 06:33 ctl_bak
-rw-r--r--. 1 dmdba dinstall 268435456 110 06:38 DAMENG01.log
-rw-r--r--. 1 dmdba dinstall 268435456 110 06:33 DAMENG02.log
-rw-r--r--. 1 dmdba dinstall      5120 110 06:33 dm.ctl
-rw-r--r--. 1 dmdba dinstall     48784 110 04:39 dm.ini
-rw-r--r--. 1 dmdba dinstall       790 110 04:39 dminit20210110043900.log
-rw-r--r--. 1 dmdba dinstall       633 110 04:39 dm_service.prikey
drwxr-xr-x. 2 dmdba dinstall         6 110 04:39 HMAIN
-rw-r--r--. 1 dmdba dinstall 134217728 110 04:39 MAIN.DBF
-rw-r--r--. 1 dmdba dinstall        12 110 06:27 rep_conflict.log
-rw-r--r--. 1 dmdba dinstall 134217728 110 06:38 ROLL.DBF
-rw-r--r--. 1 dmdba dinstall       479 110 04:39 sqllog.ini
-rw-r--r--. 1 dmdba dinstall  24117248 110 06:38 SYSTEM.DBF
-rw-r--r--. 1 dmdba dinstall  10485760 110 06:33 TEMP.DBF
drwxr-xr-x. 2 dmdba dinstall         6 110 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 110 04:39 ctl_bak/dm_20210110043902_442780.ctl
-rw-r--r--. 1 dmdba dinstall 5120 110 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)启动数据库,出现第一个报错,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]

单独放回来,在试

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

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]

用数据库自动备份的文件还原回来试一下看看

[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 .

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!!

我们一个一个来

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

启动数据库,少了一个报错

Read ini warning, default backup path [/opt/dmdbms/data/DAMENG/bak] does not exist. 
version info: develop
Server key decrypt failed!!
Server exit!!

bak 拷贝回来

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

启动数据库,又少了一个报错

version info: develop
Server key decrypt failed!!
Server exit!!

是不是看着脑瓜子嗡嗡的。。。还好我机智,还记得5号文件不dm_service.prikey,拿回来试试看

[root@localhost DAMENG]# mv  ../dm_service.prikey .

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

ROLL.DBF拷贝回来

[root@localhost DAMENG]# mv  ../ROLL.DBF .

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

DAMENG01.log拷贝回来

[root@localhost DAMENG]# mv  ../DAMENG01.log .

启动数据库,一组文件看来一个都不能少啊

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

DAMENG02.log拷贝回来

[root@localhost DAMENG]# mv  ../DAMENG02.log .

7)启动数据库,这次又会是什么错误呢:

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

SYSTEM IS READY.

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

./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间: 10.053(毫秒)
SQL>

看到数据库是配置状态,我终于放心了。。。不应该这么顺利嘛~

9)open一下数据库看看

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

居然可以open~~~

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

已用时间: 0.548(毫秒). 执行号:63.

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

我正好之前创建过表,是放在MAIN表空间下的,查一下表试试看

SQL> select * from TEST;
select * from TEST;
[-3408]:表空间[MAIN]处于脱机状态.
已用时间: 4.595(毫秒). 执行号:0.

我们把表空间拷贝回来,在试试看

[root@localhost DAMENG]# mv ../MAIN.DBF .

把表空间数据文件挂上,再查询

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

5、 总结

从第4节可以看出达梦数据库的启动顺序,有高手的话应该也能看出一点原理,希望这个破坏性的实验能让大家增长一些奇奇怪怪的小知识。

以上是关于达梦数据库探索-数据库实例文件详解的主要内容,如果未能解决你的问题,请参考以下文章

达梦数据库探索-单机安装

达梦数据库探索-单机安装

DM8达梦数据库体系结构详解

达梦体系结构

达梦数据库使用详解

达梦数据库简单实用实例