前言:在日常运维过程中会发现,因为前期对数据量预估不准确、中期业务增长量超过预期及其他一些故障等原因,会导致文件占用磁盘空间过大甚至不够用,若在磁盘空间不能扩容的情况下,只能通过删除部分不重要的文件(如各应用的日志文件、创建的测试文件、应用安装包等)来释放部分可用空间出来。如果此服务器是专门提供给数据库使用的,比如达梦数据库,上面的基本就是数据相关的文件了,此时删除数据库运行日志文件一般不会释放出来太多可用空间,此时可以考虑通过更改里面的表空间文件、重做日志路径来达到近似扩容的目的
说明:1、更改路径是在确定磁盘空间无法扩容,但磁盘占用率还在上升且可用磁盘空间剩余不多的情况下使用,剩余磁盘空间很大、磁盘可在线扩容(如磁盘做了lvm)的情况下,一般不建议更改文件路径,避免误操作导致出现故障
2、在操作前,一定要做好数据备份,这样可以在误操作后有问题的情况下进行数据恢复,比如达梦数据库可以通过dmrman工具来备份和恢复数据
3、以下操作全部基于达梦数据库,若是其它数据库,可自行查找其官网文档看下是否有类似的操作
一.文件分类
在达梦数据库安装好且初始化了一个实例后,在它的实例路径下会包含许多文件,包括MAIN表空间文件、普通表空间文件、SYSTEM表空间文件、TEMP表空间文件、ROLL表空间文件、重做日志、初始化日志、控制文件、配置文件等
二.查看各文件状态和路径等信息
1.查看当前表空间信息
select file_id,file_name,tablespace_name from dba_data_files;
2.查看当前表空间类型和状态(status为0表示联机,1为脱机)
select tablespace_name,status,contents from dba_tablespaces;
三.当数据库为运行状态时修改路径
1.普通表空间文件路径修改
1.1让表空间脱机,同时确认表空间状态
alter tablespace "TEST_TBS" offline;
1.2修改表空间路径
alter tablespace "TEST_TBS" rename datafile '/data/dm_instance/DAMENG/test_tbs.dbf' to '/data1/dm_instance/DAMENG/test_tbs.dbf';
可以发现报错了,经过检查,原因是修改后的路径不存在,创建后再试试
发现仍然报错,原因是此目录为root权限,需要修改成dmdba权限
修改权限后正常了
1.3表空间联机
alter tablespace "TEST_TBS" online;
2.SYSTEM表空间文件、ROLL表空间文件、MAIN表空间文件路径修改
2.1将表文件脱机
可以发现SYSTEM、ROLL、TEMP不允许脱机,MAIN可以脱机,即MAIN可以和普通表空间文件一样修改,其他不行。SYSTEM、ROLL、TEMP不能在数据库运行时修改,后面再测试在数据库为停止状态时路径的修改
3.重做日志文件路径修改
3.1查看重做日志信息
select * from v$rlogfile;
3.2修改重做日志文件路径
alter database rename logfile '/data/dm_instance/DAMENG/DAMENG01.log' to '/data1/dm_instance/DAMENG/DAMENG01.log';
可以发现报错了,报错信息为只允许在mount状态normal模式下执行
修改数据库状态为mount后再试试
可以发现DAMENG01.log文件的路径已修改成功
四.当数据库为停止状态时修改路径
数据文件路径大多存放在控制文件dm.ctl中,但dm.ctl文件是二进制文件,无法直接查看和编辑,需要借助dmctlcvt工具转换后查看和编辑
将dm.ctl转换为dm.txt
./dmctlcvt type=1 src=/data/dm_instance/DAMENG/dm.ctl dest=/data/dm_instance/DAMENG/dm.txt
查看dm.txt文件内容,会发现有我们需要的各表空间文件信息和路径信息
可以看到dm.txt文件中,不仅有之前在数据库运行时不能脱机操作的SYSTEM、ROLL文件信息和路径信息,也有之前在数据库运行时能脱机操作的TEST_TBS、MAIN和重做日志DAMENG01.log,说明在数据库停止状态下,也可以对普通表空间和重做日志路径进行修改,修改方法就是在dm.ctl控制文件中找到希望修改的文件路径然后进行修改。
以下选择两个之前无法脱机的表空间文件(ROLL、TEMP)来测试
1.ROLL表空间文件修改路径
1.1将不可编辑的二进制控制文件dm.ctl转换成可编辑的txt文件
./dmctlcvt type=1 src=/data/dm_instance/DAMENG/dm.ctl dest=/data/dm_instance/DAMENG/dm.txt
1.2修改dm.txt文件中的ROLL的路径
1.3把可编辑的控制文件dm.txt转换成不可修改的二进制控制文件dm.ctl,操作前先将原来的dm.ctl文件删除或者重命名
./dmctlcvt type=2 src=/data/dm_instance/DAMENG/dm.txt dest=/data/dm_instance/DAMENG/dm.ctl
1.4启动数据库
为了便于观察,以前台方式启动数据库
./dmserver /data/dm_instance/DAMENG/dm.ini
可以发现启动失败了,从报错信息看,启动失败是因为修改后的新路径没有ROLL.DBF文件
将ROLL.DBF文件从原路径移动到新路径
再次启动数据库
发现还是启动失败了,原因是控制文件dm.ctl拒绝访问
经过检查,发现之前操作的时候是用的root用户,转换后的dm.ctl文件也为root权限,修改为dmdba用户后再试试
可以发现启动没问题了
2.TEMP表空间文件修改路径
2.1经过之前对dm.ctl控制文件转换后查看内容,发现此文件中兵没有TEMP表空间信息,通过查看dm.ini文件,发现里面有TEMP路径信息
2.2修改dm.ini配置文件中TEMP_PATH路径
2.3启动数据库,查看是否正常
发现启动正常
2.4查看TEMP.DBF文件所在路径
可以发现在原路径下的TEMP.DBF文件依然存在,同时在修改后的新路径下也生成了一个TEMP.DBF文件
后续经过测试,发现DM7和DM8在修改TEMP.DBF文件后略有不同。
DM7修改TEMP.DBF文件路径后,原路径下的TEMP.DBF文件会直接移动到新路径下;
DM8修改TEMP.DBF文件路径后,原路径下的TEMP.DBF文件依然存在,会在新路径下新生成一个TEMP.DBF文件
总结:
数据库服务运行时
1.普通表空间、MAIN表空间都可通过脱机的方式修改表空间文件路径,并且新路径需要存在且权限为dmdba,否则会报错
2.重做日志可通过将数据库修改为MOUNT状态后再修改日志文件路径,并且新路径需要存在且权限为dmdba,否则会报错
3.SYSTEM、ROLL、TEMP不允许通过脱机方式修改表空间文件路径
数据库服务停止时
1.普通表空间、MAIN、SYSTEM、ROLL、重做日志都可以通过dm.ctl控制文件来修改文件路径,并且需要将文件从原路径移动到新路径下
2.TEMP可以通过dm.ini文件来修改路径;
DM7修改TEMP.DBF文件路径后,原路径下的TEMP.DBF文件会直接移动到新路径下
DM8修改TEMP.DBF文件路径后,原路径下的TEMP.DBF文件依然存在但不使用,会在新路径下生成一个TEMP.DBF文件来使用
更多资讯请上达梦技术社区了解:https://eco.dameng.com