dmctlcvt工具介绍数据文件路径变化后如何拉起数据库
文章目录
- 1 dmctlcvt介绍
- 2 场景模拟
- 2.1 场景1:移动整个数据文件父目录
- 2.1.1 关停数据库
- 2.1.2 更换数据文件存放目录
- 2.1.3 修改参数文件
- 2.1.4 修改控制文件
- 2.4.5 启动数据库
- 2.2 场景2:以表空间为单位移动数据文件
- 2.2.1 创建测试数据
- 2.2.2 表空间OFFLINE
- 2.2.3 更新控制文件
- 2.2.4 表空间ONLINE
1 dmctlcvt介绍
dmctlcvt 位于$DM_HOME/bin目录下
使用 dmctlcvt 工具将控制文件转换为文本文件,编辑文本文件 中要修改的文件的路径后再使用 dmctlcvt 工具将文本文件转换为控制文件即可。
该工具实现的作用与Oracle数据库手写控制文件类似
SQL> alter database backup controlfile to trace as '/home/oracle/controlfile.trc';vi ctl.txtSTARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 100MAXINSTANCES 8MAXLOGHISTORY 292
LOGFILEGROUP 1 '/data/app/oracle/fast_recovery_area/orcl/redo01.log' SIZE 200M BLOCKSIZE 512,GROUP 2 '/data/app/oracle/fast_recovery_area/orcl/redo02.log' SIZE 200M BLOCKSIZE 512,GROUP 3 '/data/app/oracle/fast_recovery_area/orcl/redo03.log' SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE'/data/app/oracle/fast_recovery_area/orcl/system01.dbf','/data/app/oracle/fast_recovery_area/orcl/sysaux01.dbf','/data/app/oracle/fast_recovery_area/orcl/undotbs01.dbf','/data/app/oracle/fast_recovery_area/orcl/users01.dbf'
CHARACTER SET AL32UTF8
;
2 场景模拟
假设生产环境数据库磁盘空间不足或者性能不足需要更换磁盘,
将当前数据文件目录转移至空间更充足或磁盘性能更好的目录。
2.1 场景1:移动整个数据文件父目录
2.1.1 关停数据库
[dmdba@localhost bin]$ ps -ef | grep dms
dmdba 8675 1 0 21:21 pts/0 00:00:15 /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/dmdbms/bin/dm.ini -noconsole[dmdba@localhost bin]$ pwd
/home/dmdba/dmdbms/bin
[dmdba@localhost bin]$ ./dmserverd stop
Stopping dmserverd: [ OK ]
2.1.2 更换数据文件存放目录
-- 当前安装目录为
[dmdba@localhost DAMENG]$ pwd
/dmdata/data/DAMENG
[dmdba@localhost DAMENG]$ ls
bak ctl_bak DAMENG01.log DAMENG02.log dm.ctl dm.ini dminit20250807212058.log dm_service.prikey dmtemp.ctl HMAIN MAIN.DBF ROLL.DBF sqllog.ini SYSTEM.DBF TEMP.DBF trace-- 假设移动至DAMENG_NEW
[dmdba@localhost data]$ mv DAMENG DAMENG_NEW
2.1.3 修改参数文件
[dmdba@localhost bin]$ vim dm.ini
-- 字符串替换
:%s/DAMENG/DAMENG_NEW/g
如仅修改参数文件相关文件路径启动报错如下:
[dmdba@localhost bin]$ ./dmserver path=/home/dmdba/dmdbms/bin/dm.ini
file dm.key not found, use default license!
version info: develop
Server key decrypt failed!!
Server exit!!
2.1.4 修改控制文件
使用dmctlcvt工具-【帮助】
转换控制文件,由二进制转为文本格式
[dmdba@localhost bin]$ ./dmctlcvt TYPE=1 SRC=/dmdata/data/DAMENG_NEW/dm.ctl DEST=/dmdata/data/DAMENG_NEW/dm.txt
dmctlcvt V8
convert ctl to txt success!
同样将控制文件内数据文件相关路径调整为新的路径,注意仅修改fil_path和huge_path包含的DAMENG
[dmdba@localhost bin]$ cat /dmdata/data/DAMENG_NEW/dm.txt | grep DAMENG
dbname=DAMENG
fil_path=/dmdata/data/DAMENG/SYSTEM.DBF
fil_path=/dmdata/data/DAMENG/ROLL.DBF
fil_path=/dmdata/data/DAMENG/DAMENG01.log
fil_path=/dmdata/data/DAMENG/DAMENG02.log
fil_path=/dmdata/data/DAMENG/MAIN.DBF
huge_path=/dmdata/data/DAMENG/HMAIN-- 使用sed命令可以精准匹配相应字符串,确认无误后加上-i参数
sed 's|/dmdata/data/DAMENG|/dmdata/data/DAMENG_NEW|g' /dmdata/data/DAMENG_NEW/dm.txt[dmdba@localhost bin]$ sed -i 's|/dmdata/data/DAMENG|/dmdata/data/DAMENG_NEW|g' /dmdata/data/DAMENG_NEW/dm.txt
修改完成后,备份原有dm.ctl文件,将dm.txt文件通过dmctlcvt工具转换为dm.ctl
[dmdba@localhost bin]$ mv /dmdata/data/DAMENG_NEW/dm.ctl /dmdata/data/DAMENG_NEW/dm.ctl.old
[dmdba@localhost bin]$ ./dmctlcvt TYPE=2 SRC=/dmdata/data/DAMENG_NEW/dm.txt DEST=/dmdata/data/DAMENG_NEW/dm.ctl
2.4.5 启动数据库
还原成功
[dmdba@localhost bin]$ ./dmserverd start
Starting dmserverd: [ OK ][dmdba@localhost bin]$ disql SYSDBA/"Sysdba%_025"服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 3.951(ms)
disql V8SQL> select * from test01;行号 id
---------- -----------
1 1已用时间: 4.280(毫秒). 执行号:601.SQL> select ID,PATH from v$datafile;行号 ID PATH
---------- ----------- ----------------------------------
1 0 /dmdata/data/DAMENG_NEW/MAIN.DBF
2 0 /dmdata/data/DAMENG_NEW/ROLL.DBF
3 0 /dmdata/data/DAMENG_NEW/TEMP.DBF
4 0 /dmdata/data/DAMENG_NEW/SYSTEM.DBF已用时间: 2.691(毫秒). 执行号:603.
2.2 场景2:以表空间为单位移动数据文件
2.2.1 创建测试数据
-- 创建表空间
SQL> create tablespace yichu datafile '/dmdata/data/yichu.dbf' size 128 autoextend on CACHE = NORMAL;
操作已执行
已用时间: 33.015(毫秒). 执行号:504.-- 创建用户指定默认表空间
SQL> create user yichu identified by "Dameng123" default tablespace yichu;
操作已执行
已用时间: 6.041(毫秒). 执行号:507.-- 查询当前数据文件路径
SQL> select id,path from v$datafile;行号 ID PATH
---------- ----------- ------------------------------------
1 0 /dmdata/data/DAMENG_bak/MAIN.DBF
2 0 /dmdata/data/yichu.dbf
3 0 /dmdata/data/DAMENG_bak/ROLL.DBF
4 0 /dmdata/data/DAMENG_bak/TEMP.DBF
5 0 /dmdata/data/DAMENG_bak/SYSTEM.DBF
6 0 /dmdata/data/DAMENG_bak/BOOKSHOP.DBF
7 0 /dmdata/data/DAMENG_bak/DMHR.DBF7 rows got
2.2.2 表空间OFFLINE
SQL> alter tablespace yichu offline;
操作已执行
已用时间: 22.080(毫秒). 执行号:509.SQL> select name,status$ from v$tablespace;行号 NAME STATUS$
---------- -------- -----------
1 SYSTEM 0
2 ROLL 0
3 TEMP 0
4 MAIN 0
5 BOOKSHOP 0
6 DMHR 0
7 YICHU 17 rows got
2.2.3 更新控制文件
直接更新控制文件,数据文件会相应移动到指定目录
[dmdba@localhost data]$ disql SYSDBA/Dameng123:5237服务器[LOCALHOST:5237]:处于普通打开状态
登录使用时间 : 4.452(ms)
disql V8
SQL> alter tablespace yichu rename datafile '/dmdata/data/yichu.dbf' to '/dmdata/data/DAMENG_bak/yichu.dbf';
操作已执行
已用时间: 378.729(毫秒). 执行号:1001.[dmdba@localhost DAMENG_bak]$ pwd
/dmdata/data/DAMENG_bak
[dmdba@localhost DAMENG_bak]$ ll yichu.dbf
-rw-r--r--. 1 dmdba dinstall 134217728 Aug 7 23:12 yichu.dbf
2.2.4 表空间ONLINE
SQL> alter tablespace yichu online;
操作已执行
已用时间: 8.551(毫秒). 执行号:1201.