当前位置: 首页 > news >正文

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工具-【帮助】
dmctlcvt help
转换控制文件,由二进制转为文本格式

[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.
http://www.dtcms.com/a/320263.html

相关文章:

  • 基于 FreeMarker 实现 SQL 模板动态生成的完整指南
  • 移动端项目框架推荐
  • Effective C++ 条款27: 尽量用const、enum、inline替换 #define
  • restTemplate禁用url编码
  • 安装mkdocs
  • Python从入门到精通——第六章 字典与集合
  • 「日拱一码」046 分支定界算法
  • Airflow 入门案例教程
  • 前端性能优化:从请求到资源的精细调控
  • 【第9话:感知算法基础1】深度学习神经网络模型基础知识概念入门简介
  • 批量获取亚马逊商品SKU商品规格调用流程
  • 【实时Linux实战系列】基于实时Linux的高频交易系统构建
  • Python 常用内置高阶函数
  • RabbitMQ面试精讲 Day 15:RabbitMQ故障转移与数据恢复
  • C++ min循环超超超详细指南
  • WFP DNS 域名解析
  • 深入理解C++模板进阶:非类型参数、特化与分离编译
  • Linux节点创建API与路径对应关系
  • AI日报0807 | GPT-5或今晚1点来袭:四大版本全曝光
  • 什么是 TDengine IDMP?
  • Disruptor 消费者核心:BatchEventProcessor解析
  • 告别复杂配置!cpolar让Prometheus监控突破网络限制
  • 【42】【OpenCV C++】 计算图像某一列像素方差 或 某一行像素的方差;
  • 嵌入式开发硬件——单片机
  • 【列出指定时间段内所有的下单产品】
  • 数据结构(循环顺序队列)
  • RAGAS:检索增强生成系统的无参考评估框架与技术解析
  • 2025年华数杯C题超详细解题思路
  • 哈希表原理与实现全解析
  • 天道20金句