一、概述
最近在做公司软件系统盘点时,发现公司MES数据库服务器磁盘已满,剩余空间非常小,为了减少公司EMS停机时长,执行Oracle数据迁移工作,记录一下执行的过程。
数据迁移的一般步骤 对数据库管理人员来说,数据库数据迁移极具挑战性,一旦措施不当,珍贵的数据资源将面临丢失的危险,要成功地实现数据库数据平滑迁移,需要周密计划和充分准备,并按照一定的步骤来完成。
二、数据迁移方案
设计数据迁移方案 设计数据迁移方案主要包括以下几个方面工作:
- 研究与数据迁移相关的资料
- 评估和选择数据迁移的软硬件平台
- 选择数据迁移方法
- 选择数据备份和恢复策略
- 设计数据迁移和测试方案
三、模拟迁移方案
根据设计的数据迁移方案,建立一个模拟的数据迁移环境,它既能仿真实际环境又不影响实际数据,然后在数据模拟迁移环境中测试数据迁移的效果。数据模拟迁移前也应按备份策略备份模拟数据,以便数据迁移后能按恢复策略进行恢复测试。模拟迁移方案能最小程度减少迁移过程中的损失。
四、迁移步骤
- 测试数据模拟迁移:根据设计的数据迁移测试方案测试数据模拟迁移,也就是检查数据模拟迁移后数据和应用软件是否正常,主要包括:数据一致性测试、应用软件执行功能测试、性能测试、数据备份和恢复测试等。
- 准备实施数据迁移:数据模拟迁移测试成功后,在正式实施数据迁移前还需要做好以下几个方面工作:进行完全数据备份、确定数据迁移方案、安装和配置软硬件等。
- 正式实施数据迁移:按照确定的数据迁移方案,正式实施数据迁移。
- 测试数据迁移效果:按照数据迁移测试方案测试数据迁移效果,并对数据迁移后的数据库参数和性能进行调整,使之满足数据迁移后实际应用系统的需要。
- 移植系统应用软件:将实际应用系统的应用软件移植到数据迁移后的数据库系统上,并使之正常运行。
- 正式运行应用系统:在正式实施数据迁移成功并且数据库参数和性能达到要求后,就可以正式运行应用系统,并投入实际使用。
五、迁移方案及其实施细则
5.1 exp/imp逻辑备份与恢复
是最常用最简单的方法,一般是基于应用的owner级做导出导入。
操作方法
- 在新库建立好owner和表空间,停老数据库的应用
- 老库执行
exp user/pwd owner=XXX file=exp_xxx.dmp log=exp_xxx.log buffer=6000000
- 导入dmp文件到新库,在新库执行如下命令
imp user/pwdfromuser=XXX touser=XXX file=exp_xxx.dmp log=imp_xxx.log ignore=y.
优缺点:优点是可以跨平台使用;缺点是停机时间长,停机时间为从exp到网络传输到新库,再加上imp的时间。
5.2 Storage存储迁移
Storage存储迁移这种情况下,数据文件、控制文件、日志文件、spfile都在存储上(一般情况下是裸设备),我们可以直接把存储挂到新机器上,然后在新机器上启动数据库。
操作方法
- 找到原库pfile、tnsnames.ora,listener.ora,密码文件,并拷贝到新的环境中上;
- 将存储切至新机,或者用文件拷贝或dd的方式复制数据文件;
- 启动数据库
Storage存储迁移优点是该迁移方式非常简单,主要的工作是主机工程师的工作,dba只需配合即可,停机时间为停库、切存储、起库的时间;缺点是要求新老库都是同一平台,是相同的数据库版本。
5.3 利用data guard迁移
DataGuard是Oracle的一种高可用性数据库方案,主要用于数据容灾和读写分离。
Data Guard常用数据库语句:
--启停数据库 shutdown immediate; startup mount; alter database open; --查询数据库角色和保护模式 select database_role,switchover_status from v$database; --切换备库为主库(切换后,主库为mount状态) --TO PRIMARY alter database commit to switchover to primary; --SESSIONS ACTIVE alter database commit to switchover to primary with session shutdown; --切换主库为备库(切换后,备库为shutdown状态) --TO STANDBY alter database commit to switchover to physical standby; --SESSIONS ACTIVE alter database commit to switchover to physical standby with session shutdown; --查询数据库打开模式 select open_mode from v$database; --开启数据同步(mount模式执行READ ONLY,open模式执行READ ONLY WITH APPLY) alter database recover managed standby database using current logfile disconnect from session; --关闭数据同步(必须先关闭,才可以执行alter database open打开数据库) alter database recover managed standby database cancel; --主库异常无法恢复时,异常切换时备库需执行下列命令 alter database recover managed standby database finish; alter database recover managed standby database finish force; --查询数据库保护模式 select protection_mode from v$database; --更改数据库保护模式 alter database set standby database to maximize protection; --最大保护 alter database set standby database to maximize performance; --最高性能 alter database set standby database to maximize availability; --最高可用
主库切换为备库sql语句:
--1.查询主库状态为TO STANDBY或SESSIONS ACTIVE select database_role,switchover_status from v$database; --2.切换主库角色为备库 alter database commit to switchover to physical standby; alter database commit to switchover to physical standby with session shutdown; --3.重启数据库到open模式 startup --4.开启redo同步 alter database recover managed standby database using current logfile disconnect from session; --5.查询数据库状态已经是TO PRIMARY(主库成功切换为备库) select database_role,switchover_status from v$database; --6.查询数据库打开模式为READ ONLY WITH APPLY(读写分离,redo实时同步) select open_mode from v$database;
备库切换为主库sql语句
--1.查询备库状态为TO PRIMARY或SESSIONS ACTIVE select database_role,switchover_status from v$database; --2.切换备库角色为主库 alter database commit to switchover to primary; alter database commit to switchover to primary with session shutdown; --3.打开数据库(切换完后为mount状态) alter database open; --4.查询数据库状态为TO STANDBY(表示切换完成) select database_role,switchover_status from v$database;