注册
如何调整ROLL, SYSTEM, MAIN和TEMP表空间存储位置
专栏/培训园地/ 文章详情 /

如何调整ROLL, SYSTEM, MAIN和TEMP表空间存储位置

阿白 2024/01/15 1726 3 0
摘要

1 表空间介绍及需求

在数据库管理中,表空间是数据库中存储数据的逻辑单位,它由一个或多个数据文件组成。在达梦数据库中,有四种主要的表空间:ROLL表空间,SYSTEM表空间,MAIN表空间和TEMP表空间。

  1. ROLL表空间:ROLL表空间用于存储事务回滚信息。当数据库事务进行修改操作后,如果需要回滚(撤销)这些操作,回滚信息就会从ROLL表空间中获取。ROLL表空间有助于保障数据库事务的原子性和持久性。它是数据库事务控制的重要组成部分,确保在系统崩溃或其他故障情况下能够恢复到一致的状态。
  2. SYSTEM表空间:SYSTEM表空间是达梦数据库中最重要的表空间,它用于存储数据库的系统信息,包括数据字典、系统表和视图等。数据字典中存储了数据库的结构信息,如表的定义、索引、用户权限等。SYSTEM表空间是在数据库创建时自动建立的,是数据库正常运行不可缺少的核心部分。用户通常不应该直接操作SYSTEM表空间中的对象。
  3. TEMP表空间:TEMP表空间是用于存储临时数据的表空间,例如排序操作或哈希操作产生的中间结果。当数据库执行一些需要临时存储的操作时,这些数据会被存放在TEMP表空间中。这个表空间通常不需要持久保存数据,而是在查询执行完毕后清空。使用TEMP表空间可以减少对主要表空间的影响,并且提高查询性能。
  4. MAIN表空间:MAIN表空间主要是由用户创建,用于存放业务数据。在该表空间内,用户有权限创建各种数据库对象,如表、索引和存储过程等。为了维持数据管理的清晰性和优化性能,在存在多个业务线或系统时,建议为每个业务或系统分别创建独立的表空间。这样的做法能够实现数据隔离,便于管理,并且有助于提升系统的维护效率和数据安全性。

随着数据库中数据的不断膨胀以及并发操作的日益频繁,表空间中的数据文件,如SYSTEM, ROLL, TEMP, 和MAIN等可能会显著增长,进而占据庞大的磁盘资源,有时甚至可能触及磁盘容量的极限。在这种情况下,尤其当原始数据分区不支持在线扩容,或存储设备无法满足性能与安全性需求时,我们便可以考虑对这些关键表空间的存放位置进行修改,从而提升数据库性能和保障数据完整性。

数据库及实例路径.png
表空间调整前笤帚路径.png

2 方法一:通过修改ctl与ini方式

2.1查询当前数据文件路径

通过使用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;

查找数据文件路径.png

2.2 数据库备份

对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';

2.3 数据文件路径修改

修改数据库数据文件路径之前需对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

2.4 开启数据库并检查日志有无报错

修改完成后对数据库进行开启,并检查开启过程中有误报错。若无报错可登录数据库查看表空间数据文件路径是否修改成功。

--启动数据库
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;

修改成功.png

3 方法二:通过dmrman文件映射方式

3.1查询当前数据文件路径

通过使用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;

查找数据文件路径.png

3.2 数据库备份

在利用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';

3.3 生成映射文件

通过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

映射文件生成.png

3.4 编辑映射文件内数据文件路径

使用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

数据文件修改.png
TEMP.png

3.5 通过映射文件将备份进行还原

使用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;

还原成功.png

3.6 开启数据库并检查日志有无报错

修改完成后对数据库进行开启,并检查开启过程中有误报错。若无报错可登录数据库查看表空间数据文件路径是否修改成功。

--启动数据库
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;

修改成功.png

4 总结

以上两种方法均可对表空间数据文件存储位置进行更改。
方式一通过直接编辑控制文件和配置文件来修改达梦数据库表空间路径,操作较为复杂,适合熟悉数据库和Linux系统的用户快速执行变更。
而方式二利用dmrman工具进行文件映射,操作过程标准化且安全性更高,但在数据量大时可能导致较长的备份和恢复时间,更适合对数据完整性有较高要求的场景。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服