暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦控制文件dm.ctl异常恢复

张鹏 2024-02-05
212

2040.达梦控制文件dm.ctl异常恢复
创建数据库
dminit path=/dm8/data db_name=DM02 instance_name=DM02 port_num=5236
注册服务
/dm8/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DM02/dm.ini -p DM02
systemctl enable DmServiceDM02.service
systemctl start DmServiceDM02.service
systemctl stop DmServiceDM02.service
systemctl status DmServiceDM02.service
systemctl restart DmServiceDM02.service

打开数据库DM02
[dmdba@localhost bin]$ /dm8/bin/DmServiceDM02 start
Starting DmServiceDM02: [ OK ]
关闭数据库DM02
[dmdba@localhost bin]$ /dm8/bin/DmServiceDM02 stop
Stopping DmServiceDM02: [ OK ]
查看数据库都的数据文件
[dmdba@localhost DM02]$ ls
bak ctl_bak DM0201.log DM0202.log dm.ctl dm.ini dminit20220924214433.log dm_service.prikey HMAIN MAIN.DBF rep_conflict.log
ROLL.DBF sqllog.ini SYSTEM.DBF TEMP.DBF trace

1.控制文件损坏在没有备份的情况下如何修复
mv dm.ctl dm.ctl.bak
查看数据库的状态
[dmdba@localhost DM02]$ /dm8/bin/DmServiceDM02 status
DmServiceDM02 (pid 4598) is running.--------------------打开的
停掉数据库实例
[dmdba@localhost DM02]$ /dm8/bin/DmServiceDM02 stop
Stopping DmServiceDM02: [ OK ]
启动数据库实例
[dmdba@localhost DM02]$ /dm8/bin/DmServiceDM02 start
Starting DmServiceDM02: [ FAILED ]
file dm.key not found, use default license!
Read ini error, name:CTL_PATH, value:/dm8/data/DM02/dm.ctl
dmserver startup failed, code = -803 [Invalid ini config value]
nsvr_ini_file_read failed, [code: -803]

这时可以看出报错了。
常规的办法是把ctl_bak目录里最新的备份拿来。
[dmdba@localhost DM02]$ cd ctl_bak/
[dmdba@localhost ctl_bak]$ ls -al
总用量 32
drwxr-xr-x 2 dmdba dinstall 150 9月 24 22:21 .
drwxr-xr-x 6 dmdba dinstall 291 9月 24 22:25 …
-rw-r–r-- 1 dmdba dinstall 5632 9月 24 21:44 dm_20220924214435_478284.ctl
-rw-r–r-- 1 dmdba dinstall 5632 9月 24 21:59 dm_20220924215944_142685.ctl
-rw-r–r-- 1 dmdba dinstall 5632 9月 24 22:05 dm_20220924220540_295648.ctl
-rw-r–r-- 1 dmdba dinstall 5632 9月 24 22:21 dm_20220924222106_791127.ctl
[dmdba@localhost ctl_bak]$ cp dm_20220924222106_791127.ctl …/dm.ctl
[dmdba@localhost ctl_bak]$ cd …
[dmdba@localhost DM02]$ ls
bak ctl_bak DM0201.log DM0202.log dm.ctl dm.ctl.bak dm.ini dminit20220924214433.log dm_service.prikey HMAIN MAIN.DBF rep_conflict.log
ROLL.DBF sqllog.ini SYSTEM.DBF TEMP.DBF trace
[dmdba@localhost DM02]$ /dm8/bin/DmServiceDM02 start
Starting DmServiceDM02: [ OK ] --------------------打开
2.控制文件及备份都损坏的情况下如何恢复成功。
添加测试数据
create tablespace test datafile ‘/dm8/data/DM02/test01.dbf’ size 64 autoextend on next 1 CACHE = NORMAL;
create user TEST identified by Dameng123 default tablespace test;
grant dba to TEST;
CREATE TABLE TEST.EMPLOYEE
(
EMPLOYEE_ID INT NOT NULL,
EMPLOYEE_NAME VARCHAR(20) NULL,
IDENTITY_CARD VARCHAR(18) NULL,
EMAIL VARCHAR(50) NOT NULL,
PHONE_NUM VARCHAR(20) NULL,
HIRE_DATE DATE NOT NULL,
JOB_ID VARCHAR(10) NOT NULL,
SALARY INT NULL,
COMMISSION_PCT INT NULL,
MANAGER_ID INT NULL,
DEPARTMENT_ID INT NULL
);
CREATE TABLE TEST.DEPARTMENT
(
DEPARTMENT_ID INT NOT NULL,
DEPARTMENT_NAME VARCHAR(30) NOT NULL,
MANAGER_ID INT NULL,
LOCATION_ID INT NULL
);
start /opt/emp.sql
select count() from TEST.EMPLOYEE;
行号 COUNT(
)


1 839
select count() from TEST.DEPARTMENT ;
行号 COUNT(
)


1 46
可以借住dmctlcvt这个工具
查看帮助
[dmdba@localhost bin]$ dmctlcvt help
DMCTLCVT V8
version: 03134283890-20220525-161267-10045 Pack7
格式: ./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 打印帮助信息
先创建一个一样的库DM01,把它的控制文件拿来,使用dmctlcvt转换成txt文件,进行编辑.
dmctlcvt TYPE=1 SRC=/dm8/data/DM01/dm.ctl.bak DEST=/tmp/dmctl.txt
dmctlcvt TYPE=2 SRC=/tmp/dmctl.txt DEST=/dm8/data/DM02/dm.ctl
cat /tmp/dmctl.txt | grep -v “^#” | grep -v “^$”
vi /tmp/dmctl.txt
dbname=DM01 ----修改为dbname=DM02
fil_path=/dm8/data/DM01/SYSTEM.DBF ----修改为fil_path=/dm8/data/DM02/SYSTEM.DBF
fil_path=/dm8/data/DM01/ROLL.DBF ----修改为fil_path=/dm8/data/DM02/ROLL.DBF
fil_path=/dm8/data/DM01/DM0101.log ----修改为fil_path=/dm8/data/DM02/DM0201.log
fil_path=/dm8/data/DM01/DM0102.log ----修改为fil_path=/dm8/data/DM02/DM0202.log
fil_path=/dm8/data/DM01/MAIN.DBF ----修改为fil_path=/dm8/data/DM02/MAIN.DBF
fil_path=/dm8/data/DM01/test01.dbf ----修改为fil_path=/dm8/data/DM02/test01.dbf

./dmctlcvt TYPE=2 SRC=/opt/dmdbms/data/dameng/dmctl.txt DEST=/opt/dmdbms/data/dameng/dm.ctl
[dmdba@localhost DM02]$ /dm8/bin/DmServiceDM02 status
DmServiceDM02 is stopped
[dmdba@localhost DM02]$ /dm8/bin/DmServiceDM02 start
Starting DmServiceDM02: [ OK ]
[dmdba@localhost DM02]$ /dm8/bin/DmServiceDM02 status
DmServiceDM02 (pid 41544) is running.
[dmdba@localhost DM02]$ disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.486(ms)
disql V8
SQL> select count() from TEST.EMPLOYEE;
行号 COUNT(
)


1 839
已用时间: 6.944(毫秒). 执行号:500.
SQL> select count() from TEST.DEPARTMENT ;
行号 COUNT(
)


1 46
已用时间: 1.135(毫秒). 执行号:501.
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43331041/article/details/127027197

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论