在数据库管理中,表空间是数据库中存储数据的逻辑单位,它由一个或多个数据文件组成。在达梦数据库中,有四种主要的表空间:ROLL表空间,SYSTEM表空间,MAIN表空间和TEMP表空间。
随着数据库中数据的不断膨胀以及并发操作的日益频繁,表空间中的数据文件,如SYSTEM, ROLL, TEMP, 和MAIN等可能会显著增长,进而占据庞大的磁盘资源,有时甚至可能触及磁盘容量的极限。在这种情况下,尤其当原始数据分区不支持在线扩容,或存储设备无法满足性能与安全性需求时,我们便可以考虑对这些关键表空间的存放位置进行修改,从而提升数据库性能和保障数据完整性。
通过使用SYSDBA账户连接到数据库,对数据文件路径进行查找。
--查找数据文件路径
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA
SQL> select a.name,a.status$,b.path from v$tablespace a left join v$datafile b on a.id=b.group_id;
对ROLL, SYSTEM, MAIN, 或TEMP表空间进行任何修改之前,需要对数据库进行完整备份,以便在调整过程中发生任何异常情况,能够快速地将数据恢复至初始状态,从而最小化对业务的影响。
--关闭数据库
cd /home/dmdba/dmdbms/bin
./DmServiceDMDB stop
--数据库备份
cd /home/dmdba/dmdbms/bin
./dmrman
RMAN> backup database '/dm/dmdata/DMDB/dm.ini' backupset '/dm/dmbak/bak_full';
修改数据库数据文件路径之前需对dm.ctl与dm.ini文件进行备份。
--创建新路径存放数据文件
mkdir /dm/dmdata/new_data
--将dm.ctl转换为可编辑文件
cp /dm/dmdata/DMDB/dm.ctl /dm/dmdata/DMDB/dm.ctl.bak
cp /dm/dmdata/DMDB/dm.ini /dm/dmdata/DMDB/dm.ini.bak
cd /home/dmdba/dmdbms/bin
./dmctlcvt TYPE=1 SRC=/dm/dmdata/DMDB/dm.ctl DEST=/dm/dmdata/DMDB/dmctl.ini
vi /dm/dmdata/DMDB/dmctl.ini(修改内容如下)
fil_path=/dm/dmdata/new_data/ROLL.DBF
fil_path=/dm/dmdata/new_data/MAIN.DBF
fil_path=/dm/dmdata/new_data/SYSTEM.DBF
--移动MAIN、ROLL、SYSTEM数据文件
mv /dm/dmdata/DMDB/ROLL.DBF /dm/dmdata/new_data
mv /dm/dmdata/DMDB/SYSTEM.DBF /dm/dmdata/new_data
mv /dm/dmdata/DMDB/MAIN.DBF /dm/dmdata/new_data
--将修改后的dmctl文件进行转换
./dmctlcvt TYPE=2 SRC=/dm/dmdata/DMDB/dmctl.ini DEST=/dm/dmdata/DMDB/dm.ctl
--修改TEMP表空间数据文件(TEMP文件大小受dm.ini参数TEMP_SIZE、TEMP_SPACE_LIMIT控制)
vi /dm/dmdata/DMDB/dm.ini
TEMP_PATH = /dm/dmdata/new_data
修改完成后对数据库进行开启,并检查开启过程中有误报错。若无报错可登录数据库查看表空间数据文件路径是否修改成功。
--启动数据库
cd /home/dmdba/dmdbms/bin
./DmServiceDMDB start
--检查日志情况
cat /home/dmdba/dmdbms/log/dm_DMDB_202401.log | grep -iE 'error|fatal'
--登录数据库查看是否修改成功
./disql SYSDBA/SYSDBA
SQL> select a.name,a.status$,b.path from v$tablespace a left join v$datafile b on a.id=b.group_id;
通过使用SYSDBA账户连接到数据库,对数据文件路径进行查找。
--查找数据文件路径
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA
SQL> select a.name,a.status$,b.path from v$tablespace a left join v$datafile b on a.id=b.group_id;
在利用dmrman文件映射功能更改数据目录路径之前,必须确保数据库已经创建了一份完整的备份。
--关闭数据库
cd /home/dmdba/dmdbms/bin
./DmServiceDMDB stop
--数据库备份
cd /home/dmdba/dmdbms/bin
./dmrman
RMAN> backup database '/dm/dmdata/DMDB/dm.ini' backupset '/dm/dmbak/bak_full';
通过dmrman生成全量备份的映射文件。
cd /home/dmdba/dmdbms/bin
./dmrman
RMAN> dump backupset '/dm/dmbak/bak_full' database '/dm/dmdata/DMDB/dm.ini' mapped file '/dm/dmdata/DMDB/dump_file.txt';
cat /dm/dmdata/DMDB/dump_file.txt
使用vi命令对映射文件内数据文件的路径进行按需调整(例如我需要修改ROLL、SYSTEM及MAIN数据文件路径则修改以下内容),TEMP数据文件修改则直接修改dm.ini内TEMP_PATH参数即可。
vi /dm/dmdata/DMDB/dump_file.txt
data_path = /dm/dmdata/new_data/SYSTEM.DBF
data_path = /dm/dmdata/new_data/ROLL.DBF
data_path = /dm/dmdata/new_data/MAIN.DBF
vi /dm/dmdata/DMDB/dm.ini
TEMP_PATH = /dm/dmdata/new_data
使用DMRMAN将备份与映射文件进行还原和恢复。
cd /home/dmdba/dmdbms/bin
./dmrman
RMAN> restore database '/dm/dmdata/DMDB/dm.ini' from backupset '/dm/dmbak/bak_full' mapped file '/dm/dmdata/DMDB/dump_file.txt';
RMAN> recover database '/dm/dmdata/DMDB/dm.ini' from backupset '/dm/dmbak/bak_full';
RMAN> recover database '/dm/dmdata/DMDB/dm.ini' update db_magic;
修改完成后对数据库进行开启,并检查开启过程中有误报错。若无报错可登录数据库查看表空间数据文件路径是否修改成功。
--启动数据库
cd /home/dmdba/dmdbms/bin
./DmServiceDMDB start
--检查日志情况
cat /home/dmdba/dmdbms/log/dm_DMDB_202401.log | grep -iE 'error|fatal'
--登录数据库查看是否修改成功
./disql SYSDBA/SYSDBA
SQL> select a.name,a.status$,b.path from v$tablespace a left join v$datafile b on a.id=b.group_id;
以上两种方法均可对表空间数据文件存储位置进行更改。
方式一通过直接编辑控制文件和配置文件来修改达梦数据库表空间路径,操作较为复杂,适合熟悉数据库和Linux系统的用户快速执行变更。
而方式二利用dmrman工具进行文件映射,操作过程标准化且安全性更高,但在数据量大时可能导致较长的备份和恢复时间,更适合对数据完整性有较高要求的场景。
文章
阅读量
获赞