目录
一、前要
二、模拟环境准备:
三、名词定义
3.1 表空间和数据文件
3.2 重做日志(redo)
3.3 控制文件(dm.ctl)
3.4 参数文件(dm.ini)
3.5 dminit工具
3.6 dmmdf工具
3.7 PERMANENT_MAGIC 和 DB_MAGIC数据库魔数
四、如何进入安全模式(救援模式)
4.1 windows进入安全模式
4.2 linux进入救援模式
4.3麒麟系统进入救援模式
五、故障库文件备份及参数查看
5.1 故障库数据文件查看
5.2 查看故障库初始化信息
5.3 查看dm.ini中实例名
六、恢复过程
6.1 按照故障库初始化信息,重新创建数据库
6.2 修改新库文件名
6.3 修改故障库控制文件
6.3.1 转换控制文件格式
6.3.2 修改控制文件内容
6.3.3 转回控制文件格式
6.4 查看故障库db_magic(红色字体)
6.5修改故障库参数文件
6.5.1 DM数据库控制文件的位置是在dm.ini 文件中指定:
6.5.2 修改dm.ini中控制文件位置
6.6 修改故障库文件名
6.7 启动数据库
七、验证数据库
7.1使用DM管理工具登录数据库
7.2验证数据库实例和DB_MAGIC
7.3使用DMDBCHK检查数据页
7.4使用DM管理工具开启归档
7.5使用DM管理对数据库进行一次全量备份
八、总结
8.1 迁移的总体步骤
8.2 数据库备份的重要性
本文讲解的是达梦数据库在无备份,未开启归档模式情况的恢复方式。例如在生产环境中的操作系统崩溃,导致系统无法正常启动,数据库无法启动和登录,但磁盘未损坏,能在安全模式下拷贝出达梦数据库相关文件,包含数据文件、控制文件和参数文件等.在生产环境中很少遇到此种极端情况,但达梦数据库依然可以通过整体迁移数据文件和重建控制文件等方式进行恢复。
环境准备 |
操作系统 |
达梦数据库版本 |
实例安装路径 |
说明 |
1损坏的数据库 |
Windows |
DM Database Server 64 V8 |
D:\DM8\dmdbms\data\DAMENG |
除了此路径下的相关文件,其他均丢失 |
2新环境 |
Linux Red hat 6 |
DM Database Server 64 V8 |
/dm8/data/DAMENG |
初始化新库,无损 |
可以看到,在没有归档,且没有备份的情况下,若要保证数据库能够正常恢复,操作系统的不同并不影响恢复,但恢复的前提要保证初始化新库的数据库版本、实例名、数据库名、各种参数必须和故障库设置完全一样。
参考文献:
达梦数据库在创建 DM 数据库时,会自动创建 5 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN表空间、TEMP 表空间和 HMAIN 表空间。
达梦数据库将数据的逻辑存放于表空间中,而物理的存放是在数据文件里。表空间只能属于唯一一个数据库,但是反过来则不然,因为同一个数据库一般都有多个表空间。每个表空间都是由一个或者多个数据文件组成,但是一个操作系统的数据文件只能属于一个表空间。表空间可以被划分成一些更小的逻辑存储范围。在一个数据库中,数据文件就是是存储模式对象数据的一个容器/仓库。
数据文件是指存储数据库数据的文件,包含数据表中的记录和索引等。
重做日志文件,,是指记录数据库中所有修改信息的文件,可以保证数据库安全,也可以实现数据库备份与恢复。数据库中的DDL操作和DML操作都会被记录在重做日志文件中。
DM8数据库默认会创建两个联机重做日志,即DAMENG01.log,DAMENG02.log。
每个达梦数据库都有一个命名为dm.ctl的控制文件,控制文件是对于达梦数据库是极为重要的文件。该文件是一个比较小的二进制文件,它记载了数据库必要的初始信息。在安装数据库时,DM8会自动创建控制文件。一个控制文件只能属于一个数据库。其中主要包含以下内容:
“(1)数据库名称;
(2)数据库服务器模式;
(3)OGUID 唯一标识;
(4)数据库服务器版本;
(5)数据文件版本;
(6)数据库的启动次数;
(7)数据库最近一次启动时间;
(8)表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的表空间,数组的方式保存起来;
(9)控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控制文件合法性,防止文件损坏及手工修改。”---引用自《DM8系统管理员手册》第53页
每当创建一个DM数据库时,就会自动生成一个dm.ini参数文件。参数文件是达梦数据库最重要的文件之一。它有点像linux操作系统中的profile文件。当数据库启动时,将获取该文件中的每个参数值,并使用其中内容来配置数据库实例。
“dminit 是 DM 数据库初始化工具。在安装 DM 的过程中,用户可以选择是否创建初始数据库。如果当时没有创建,那么在安装完成之后,可以利用创建数据库工具 dminit 来创建。
系统管理员可以利用 dminit 工具提供的各种参数,设置数据库存放路径、段页大小、是否对大小写敏感、以及是否使用 UNICODE 等,创建出满足用户需要的数据库。该工具位于安装目录的/bin 目录下。”---引用自《达梦技术手册-DM8_dminit使用手册》第1页
“达梦数据库的dmmdf 工具可以对DM相关的文件的属性进行修改。 从dmmdf的帮助可以看出,支持的修改的文件类型有:dbf、rlog、original bak、bakset meta、bakset bkp、bakset,根据文件的不同,可修改的属性也有所不同,最主要的就是修改db_magic。”---引用自《达梦技术丛书-DM8备份与还原》,如图。
在创建数据库时会自动生成 PERMANENT_MAGIC 和 DB_MAGIC 值,其中 PERMANENT_MAGIC 一经生成就不会改变。DB_MAGIC在达梦数据库中称为数据库魔数,同样可以用来表示某一个数据库,但 DB_MAGIC是可以不断比那花的,每当经过一次还原、恢复操作后,DB_MAGIC 就会产生变化,用来区分备份源库和还原目标库。
由于操作系统奔溃无法正常启动,故只能进入安全模式(救援模式),现将各操作系统的进入方式介绍如下:
开机按F8键,在重启或者电脑开机的时候,在进入Windows系统启动画面之前按下F8键,会出现系统多操作启动菜单了,有三个版本的安全模式可以选择,视自己需要选择,回车就直接进入安全模式了。
开机启动的时候按F2修改bios首先用CD启动:
重启后进入Menu,选择Rescue installed system,回车
启动救援模式中,会弹出多个对话框进行选择,语言默认使用en,键盘使用默认的us,挂载选项直接Continue,后面就一直OK,最后选择shell,然后就进入了救援模式
输入clear,把屏幕清空,输入ls /mnt/sysimage
看到的就是你的原来系统的文件:
1.插入系统镜像,重启服务器;
2.进入安装界面,选择“Troubleshooting”
3.选择“Rescue a Kylin system”
4.选择“Continue”,按1
5.然后输入chroot /mnt/sysimage 切换到原linux系统,切换后前缀会变为bash ,然后就可以修改root密码或配置文件了
6.此时可以进行文件的拷贝(u盘需要格式化为ext或xfs格式,否则无法挂载)
将故障库存放位置,即D:\DM8\dmdbms\data\DAMENG文件夹进行备份,并传输至准备好的新环境中,故障库的数据文件内容如图所示。
在达梦数据库进行首次初始化后,会在实例文件夹下生产初始化日志,如:dminitXXXXX.log
查看历史信息内容,如图所示:
可以看到数据库初始化信息如下:
版本:V8
db path:存放位置为:D:\DM8\dmdbms\data\DAMENG
db name:数据库名:DAMENG
AUTO_OVERWRITE:是否覆盖所有同名文件(0) 0:不覆盖
Page size:页大小:8K
Extent size:簇大小:16K
TIME_ZONE、 设置时区(+08:00)
Charset::字符集:GB18030(0)
大小写敏感:敏感(1)
其他信息均为默认
[root@localhost ~]# su - dmdba
[dmdba@localhost ~]$ cd /dm8/data/DAMENG_old
[dmdba@localhost DAMENG1]$ more dm.ini
如图所示
进入达梦数据安装目录bin路径下,利用dminit工具初始化数据库,同时可以用./dminit help查看具体参数应用。
[dmdba@localhost ~]$ cd /dm8/bin
[dmdba@localhost bin]$ ./dminit help
可以查看dminit相关参数
[dmdba@localhost bin]$ ./dminit path=/dm8/data/ db_name=DAMENG instance_name=DCATEST1 page_size=8 extent_size=16 charset=0 case_sensitive=1
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2022-03-26
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dm8/data/DAMENG/DAMENG01.log
log file path: /dm8/data/DAMENG/DAMENG02.log
write to dir [/dm8/data/DAMENG].
create dm database success. 2021-10-12 18:11:58
[dmdba@localhost bin]$
[dmdba@localhost data]$ cd /dm8/data/
[dmdba@localhost data]$ mv DAMENG/ DAMENG_new
[dmdba@localhost data]$
[dmdba@localhost bin]$ cd /dm8/bin
[dmdba@localhost bin]$ ./dmctlcvt type=1 src=/dm8/data/DAMENG_old/dm.ctl dest=/dm8/dmctl.txt
DMCTLCVT V8
convert ctl to txt success!
查看控制文件中fil_path内容:
[dmdba@localhost opt]$ more dmctl.txt|grep fil_path
修改dmctl.txt中文件存放位置,并验证查看
[dmdba@localhost opt]$ vi dmctl.txt
[dmdba@localhost opt]$ more dmctl.txt|grep fil_path
修改控制文件中数据文件的对应位置,就可以重新生成控制文件。基本上涉及路径的修改,都可以采用这种重建控制文件。
[dmdba@localhost dm8]$ cd bin
[dmdba@localhost bin]$ ./dmctlcvt type=2 src=/dm8/dmctl.txt dest=/dm8/data/DAMENG_old/dm.ctl
DMCTLCVT V8
convert txt to ctl success!
[dmdba@localhost bin]$
[dmdba@localhost bin]$ ./dmmdf TYPE=1 FILE=/dm8/data/DAMENG_old/SYSTEM.DBF
dmmdf V8
**********************************************************
1 db_magic=913104458
2 next_trxid=25051
3 pemnt_magic=1354359236
**********************************************************
Please input which parameter you want to change(1-3), q to quit:
[dmdba@localhost DAMENG]$ more dm.ini|grep CTL
CTL_PATH = D:\DM8\dmdbms\data\DAMENG\dm.ctl #ctl file path
CTL_BAK_PATH = D:\DM8\dmdbms\data\DAMENG\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.
DSC_N_CTLS = 10000 #Number Of LBS/GBS ctls
[dmdba@localhost DAMENG]$
[dmdba@localhost bin]$ vi /dm8/data/DAMENG_old/dm.ini
[dmdba@localhost DAMENG_old]$ cd /dm8/data/
[dmdba@localhost data]$ ls
DAMENG_new DAMENG_old DMSERVER_bak.tar TEST1
[dmdba@localhost data]$ mv DAMENG_old/ DAMENG
[dmdba@localhost data]$
[dmdba@localhost bin]$ ./dmserver /dm8/data/DAMENG/dm.ini
file dm.key not found, use default license!
version info: develop
DM Database Server x64 V8 1-1-190-21.03.26-137190-ENT startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
License will expire on 2022-03-26
file lsn: 0
ndct db load finished
ndct fill fast pool finished
iid page's trxid[26052]
NEXT TRX ID = 26053
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.
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.
登陆时使用的sysdba用户为故障库密码
select db_magic from v$rlog;
select instance_name from v$instance;
由于dmdbchk需要在达梦数据库正常关闭下使用,故先使用root用户,进入cd /dm8/script/root生成启动脚本,并进入/etc/init.d查看启动脚本。
[root@localhost bin]# cd /dm8/script/root/
[root@localhost root]# ls
dm_service_installer.sh dm_service_uninstaller.sh root_installer.sh
[root@localhost root]# ./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DAMENG/dm.ini -p DAMENG
移动服务脚本文件(/dm8/bin/DmServiceDAMENG 到 /etc/rc.d/init.d/DmServiceDAMENG)
创建服务(DmServiceDAMENG)完成
[root@localhost root]#
关闭数据库,并进入达梦数据库安装路径的bin下,启动dmdbchek,如下图:
当出现error count is 0时,表述数据库无坏损,恢复成功。
选中数据库,右键管理服务器,选择系统管理,并修改成配置状态并转换:
选择归档配置,修改为归档模式,并添加归档日志文件:
重新选择系统管理,并修改数据库状态为打开:
选择备份-->库备份,右键新建备份
达梦数据库的数据文件整体迁移过程主要分成六个步骤:
1.查询当前信息;
2.按照故障库信息重建实例服务,并重命名;
3.物理移动整个故障库数据库文件夹;
4.修改DM.INI 参数文件中有关路径的参数;
5.重建控制文件(修改数据文件路径);
6.起库验证。
经过上述的所有恢复过程,虽然数据库可以得到恢复,但数据库无备份、无归档是数据库运维中的大忌。数据备份是DBA的生命线。数据备份可有效的提高系统的高可用性和灾难可恢复性,子数据库系统崩溃时,快速恢复并找回数据;同时通过备份还原数据库是数据恢复的最优方案;数据备份是一种防患于未然的强力手段。在进行了数据备份之后,也应要定期检查备份成功与否,以及备份的完整性。
在DM管理工具中,已经在章节六中说明了备份的方式,同时可以利用工具进行备份的验证,选中相应备份->右键备份校验,并显示备份校验成功,如下图:
更多资讯请上达梦技术社区了解: https://eco.dameng.com