(一)、为什么要做数据文件的迁移??
我个人认为存在一下两点原因:
1、前期规划不合理导致数据量暴增的情况下,磁盘紧张、I/0增用,降低了数据性能
2、数据文件所在磁盘老化、存在损坏的风险,为了数据存放更合理更安全
3、达梦数据库默认机制是将大部分的数据库文件和数据库软件都放在一起,尤其是使用命令行初始化实例时,仅可以指定redo位置和控制文件的位置,其他均不能指定(我目前是发现这样的)
(二)、达梦DM8数据库实例下所有文件迁移
2.1、整个实例的数据文件
也就是我们看到的实例目录下的文件,包含数据文件、控制文件、参数文件、配置文件等,将所有的数据文件均迁移到一个或者多块盘上,实现数据与DM数据库软件分离,规避硬件损坏丢失文件。
2.1.1、数据文件迁移到一块新的磁盘上
将所有的数据文件均迁移到一块新挂载的盘上,优点实现了数据与软件系统分离保护,但是所有的数据均在一块磁盘上,一旦这块磁盘坏了,存在丢失数据的风险。
文件类型 | 迁移位置规划 |
控制文件 | /data1/ctl/ |
数据文件 | /data1/data/ |
参数文件 | /data1/ |
其他文件(备份文件、配置文件等) | /data1/ |
2.1.2、数据文件迁移到多块新的磁盘上
将所有的数据文件均迁移到多块新挂载的盘上,优点实现了数据与软件系统分离保护,并且多块盘可实现IO负载均衡,可以实现备份与其数据分离,更好的保护数据
文件类型 | 迁移位置规划 |
控制文件 | /data1/ctl/ |
数据文件 | /data2/data/ |
参数文件 | /data2/ |
其他文件(备份文件、配置文件等) | /data3/ |
2.2、修改控制文件
达梦控制文件包含了数据文件的相关信息,通过修改控制文件的数据位置的可以实现数据迁移。多个盘和一个盘迁移方式一样,所以我这里就做了一块盘的迁移,也就是实例所有的数据文件,我迁移到一块盘
#查询控制文件路径
select para_name,para_value from v$dm_ini where para_name='CTL_PATH' |
#转换控制文件:因为控制文件二进制文件无法修改,需要转为可修改的文件
dmctlcvt type=1 src=/dm8/data/DMDATA/dm.ctl dest=/data1/dm.txt
#修改控制文件:
----控制文件中原数据路径 fil_path=/dm8/dmdbms/GRP1_RT_01/MAIN.DBF fil_path=/dm8/dmdbms/GRP1_RT_01/SYSTEM.DBF fil_path=/dm8/dmdbms/GRP1_RT_01/ROLL.DBF fil_path=/dm8/dmdbms/GRP1_RT_01/GRP1_RT_0101.log fil_path=/dm8/dmdbms/GRP1_RT_01/GRP1_RT_0102.log fil_path=/dm8/dmdbms/GRP1_RT_01/MAIN.DBF ----控制文件中原数据路径 fil_path=/data1/data/MAIN.DBF fil_path=/data1/data/SYSTEM.DBF fil_path=/data1/data/ROLL.DBF fil_path=/data1/data/GRP1_RT_0101.log fil_path=/data1/data/GRP1_RT_0102.log fil_path=/data1/data/MAIN.DBF |
#完成修改控制文件后,需要转化回二进制的文件:将转换后的控制文件存放到新路径
dmctlcvt type=2 src=/data1/dm.txt dest=/data1/ctl/dm.ctl |
2.3、修改参数文件dm.ini
当我们修改完控制文件后,并且把控制文件放入新路径,如果不修改dm.ini,那么启动数据库时,数据库将找不到相应的数据文件信息
----参数文件中原数据路径 #file location of dm.ctl CTL_PATH = /dm8/dmdbms/DMDATA/dm.ctl #ctl file path CTL_BAK_PATH = /dm8/dmdbms/DMDATA/ctl_bak #dm.ctl backup path SYSTEM_PATH = /dm8/dmdbms/DMDATA #system path CONFIG_PATH = /dm8/dmdbms/DMDATA #config path TEMP_PATH = /dm8/dmdbms/DMDATA #temporary file path BAK_PATH = /dm8/dmdbms/DMDATA/bak #backup file path DFS_PATH = $/DMDATA #path of db_file in df ----参数文件中修改数据路径 CTL_PATH = /data1/ctl/dm.ctl #ctl file path CTL_BAK_PATH = /data1/ctl//ctl_bak #dm.ctl backup path SYSTEM_PATH = /data1/data #system path CONFIG_PATH = /data1/data #config path TEMP_PATH = /data1/data #temporary file path BAK_PATH = /data1/data #backup file path DFS_PATH = $/DMDATA #path of db_file in df |
2.4、拷贝数据文件
将数据文件迁移到对应的新路径下:
Cd /dm8/dmdbms/DMDATA cp * /data1/data Cd /data1/data mv dm.ctl /data1/ctl mv -r ctl_bak /data1/ctl/ctl_bak |
2.5、修改注册文件
注册文件是启停数据库,数据库均需要读取参数文件,当我们移动了参数文件后,如果不修改该注册文件,则启动失败,原因是在原来的位置找不到dm.ini文件,当然也可以重新注册一个服务,删掉这个服务也不是不可以。
vi /dm8/bin/DmServerDMDATA ----原参数: DM_HOME="/dm8" INI_PATH=" /dm8/dmdbms/DMDATA /dm.ini" DCR_INI_PATH=%DCR_INI_PATH% DPC_MODE=%DPC_MODE% ----修改后参数: DM_HOME="/dm8" INI_PATH=" /data1/data/dm.ini" DCR_INI_PATH=%DCR_INI_PATH% DPC_MODE=%DPC_MODE% |
2.6、启动数据库并查询文件路径
--数据库启动成功说明迁移成功 Cd /dm8/dmdbms/bin ./DmServerDMDATA start [dmdba@dm8 bin]$ ./DmServiceDMDATA start Starting DmServiceDMDATA: [ OK ] --为了确保数据位置已经成功迁移,查询如下: Select * from dba_data_files; /data1/data/SYSTEM.DBF 0 SYSTEM /data1/data/user.dbf 0 USERS /data1/data/MAIN.DBF 0 MAIN /data1/data/TEMP.DBF 0 TEMP //data1/data/ROLL.DBF 0 ROLL Select * from v$dm_ini where PARA_value like '%/%' CTL_PATH /data1/ctl/dm.ctl CTL_BAK_PATH /data1/ctl/ctl_bak SYSTEM_PATH /data1/data CONFIG_PATH /data1/data TEMP_PATH /data1/data BAK_PATH /data1/data/bak TRACE_PATH /data1/data/trace |
(三)、迁移业务数据文件(非系统关键文件)
相比上述的整库的数据文件迁移方案,业务数据迁移往往相对较为灵活,且应用较为常见,一般迁移较多的是业务的数据文件,适合迁移部分系统非关键文件;同时也根据DM系统的特性,系统关键数据文件联机状态下,是不能脱机,因此关键数据文件不能使用ALTER TABLESPACE RENAME TO 方式进行迁移。
2.1、查询需要迁移的数据文件
本次我选择迁移表空间YWUSER数据文件作为测试
select * from dba_data_files; /dm8/dmdbms/DMDATA/SYSTEM.DBF 0 SYSTEM /dm8/ywuser02.dbf 1 YWUSER /data2/ywuser01.dbf 0 YWUSER /dm8/dmdbms/user.dbf 0 USERS /dm8/dmdbms/DMDATA/MAIN.DBF 0 MAIN /dm8/dmdbms/DMDATA/TEMP.DBF 0 TEMP /dm8/dmdbms/DMDATA/ROLL.DBF 0 ROLL |
2.1、数据文件迁移
#将表空间脱机:如果不脱机就不能迁移,迁移会报错
alter TABLESPACE YWUSER OFFLINE
----值得注意的是,迁移表空间文件,不需要提前把数据文件复制到新路径,在执行命令的时候,数据库会把文件复制到新路径
#迁移表空间文件1 alter TABLESPACE YWUSER RENAME DATAFILE '/data2/ywuser01.dbf' TO '/data1/data/ywuser01.dbf'; #迁移表空间文件1 alter TABLESPACE YWUSER RENAME DATAFILE '/dm8/ywuser02.dbf' TO '/data1/data/ywuser02.dbf'; |
#将表空间联机:如果不联机就不能使用该表空间,dba_data_files也查询不到
alter TABLESPACE YWUSER ONLINE
2.3、查询是否迁移成功
#进入服务新路径下查看数据文件
Cd /data1/data ls -l |
#使用达梦管理工具或者disql查询数据文件
Select * from dba_data_files; |
2.4、关键系统表空间的迁移问题
#SYSTEM表空间不能脱机:如果要迁移只能使用控制文件修改方法来迁移
ALTER TABLESPACE SYSTEM OFFLINE
#ROLL表空间不能脱机:如果要迁移只能使用控制文件修改方法来迁移
ALTER TABLESPACE ROLL OFFLINE
#TEMP 表空间不能脱机:如果要迁移只能使用控制文件修改方法来迁移
ALTER TABLESPACE TEMP OFFLINE
总结:系统关键表空间文件在联机状态下脱机,也就是不能使用ALTER TABLESPACERE RENAME TO 方式迁移数据文件,如果非要迁移,只能脱机修改控制文件,将数据迁移到新路径下,使用场景不同
----------------------------------------------------//到此结束//---------------------------------------------------
更多内容,请访问达梦社区地址:https:eco.dameng.com