第八章:Oracle数据库的迁移

点击数:1978发布日期:2020-04-19 14:56:50 来源:老鹰

第八章:Oracle数据库的迁移

8.1概述

    在日常工作中,常常会遇到数据迁移的需求。例如:搭建测试环境,更换新的硬件设备,版本的升级,在不同类别的数据库间迁移等等情况。需求不同,制定的方案也不同,但迁移的方法就这么几种,再多种的需要,最后无外乎使用这些方法。

8.2常用的数据库适移方法

u  数据量比较小的情况下,可以直接利用数据库工具expimp

u  数据量较大时。可以利用Oracle expimp结合操作系统pipe管道技术并发多个进程进行导出导入。

u  数据库大时。可以利用建立数据库链link。按表在旧库select,在新库insert append的方式。此方式比expimp速度上快。

u  使用RMAN在源数据库上备份,在目标数据库上实现恢复,实现迁移的目的。

u  将spfile,数据文件,控制文件,redo日志拷贝至新配置的环境,实现迁移。

u  利用ASM加盘减盘技术实现数据库迁移,对于更换存储是特别好的方案。

u  利用第三方厂商技术进行数据复制,如DSGSharePlex

u  使用存储级的复制裸设备或数据文件实现迁移。

u  使用DataGuard,或GoldenGate实现数据无缝割接迁移。

u  使用SQL loader工具。

u  使用外部表,将少量数据加载到数据库中。

u  使用convert database to platform 'Linux 64-bit for AMD'实现不同平台迁移。







8.3迁移方案一

8.3.1概述

    为适应目前日益增长的数据量,及确保数据库的稳定正常运行,应北京樱澍科技有限公司的邀请,我方充分调研了运行现状,了解了具体状况,并给出关于Oracle数据库的迁移和升级方案。

现计划将1、樱澍集团管控平台2、集团合并报表3、集团协同办公平台这三个数据库迁移整合到一个RAC数据库。其中1、3应用在节点一运行,2应用在节点二运行。

8.3.2编写目的

    解决目前数据库运行不稳定的问题,实现集中管理,节约硬件成本,减少运维支出,目前有数据库运行在windows上。windows操作系统本身的稳定性远远低于AIX ,给数据库造成潜在宕机或丢失数据库的危险。迁移到新环境升级改造完成后会明显的降低数据量对各个环节的压力,给应用提供稳定的后台保障。

8.3.3迁移时间

    确定停机时间。安排6小时停机时间,从19:00-01:00。因升级需停监听器,关闭应用服务。迁移时间安排在事务量较小的周六进行。

8.3.4数据库迁移规划方案

根据对此次迁移环境的了解决定使用逻辑的导入导出(expdp/impdp)完成此次数据库迁移

这种方式适用于小数据量的数据迁移,使用数据泵直接导出数据结构和数据,速度较快,简单方便。而且逻辑的导入导出可以跨操作系统平台和数据库版本,本次的迁移就牵扯到操作系统平台和数据库版本,这种方式恰好可以满足需求,但是这种方式需要一定的停机时间,按照现有生产数据库的数据量大概需要4小时的时间(时间还受网络带宽和服务器性能的影响),安排6小时停机,把工作量不能安排的太紧。


8.3.5迁移前准备

搭建新环境

u    稳定优化的新环境,是数据库迁移后正常运行的重要保证。

u    系统规划是长期稳定运行的一个重要条件,实施前一定要规划好,不能在无方案的情况下实施,边干边改。具体要注意的事项参见规划实施章节。

u    本次的新环境为AIX 操作系统,AIX6.1 的操作系统补丁一定要打全,最好补丁升级到最新的补丁。以保障操作系统的稳定性,也减少了再次升级补丁给数据库带来隐患。同时也建议参考操作系统专家的建议。

搭建过程

u    连接硬件,安装操作系统,配置IP,配置主机名等。

u    安装Oracle数据库 11.2.0.4.7 for AIX。详见数据库的安装章节。

u    在support.oracle.com上找到相应的版本升级补丁并打齐。

u    dbca创建数据库,创建相关表空间,创建index表空间,创建所需要的业务用户,例如以下命令;

create tablespace data

datafile '+DGDATA'

size 6000m 

autoextend off;


create tablespace index

datafile '+DGDATA'

size 6000m 

autoextend off;


create user orcl identified by oracle 

default tablespace data 

temporary tablespace temp

quota unlimited on index;


关闭新建数据库的归档模式

alter database noarchivelog;

创建expdp/impdp目录

源端数据库实例:create directory exp_dp as '/backup /expdp';

新数据库实例:create directory exp_dp as '/ backup /impdp ';

调整源端数据库系统的JOB

调整源端数据库JOB自动运行时间,以免在导出数据过程中JOB自动运行;

8.3.6迁移过程

停止源端数据库服务

周六19点整,停止源端数据库应用和监听;重启数据库实例;检查objects

lsnrctl stop

srvctl stop database -d ysdb

srvctl start database -d ysdb

检查有没有业务的定时任务

select * from dba_jobs;

检查当前应用用户user_objects以便迁移完成检查对象个数

select count(*) from user_objects;

select count(*) from user_objects where object_type='TABLE';

select count(*) from user_objects where object_type='INDEX';

select count(*) from user_objects where object_type='VIEW';

select count(*) from user_objects where object_type='MATERIALIZED VIEW';

select count(*) from user_objects where object_type='TRIGGER';

select count(*) from user_objects where object_type='SEQUENCE';

select count(*) from user_objects where object_type='PROCEDURE';

select count(*) from user_objects where object_type='DATABASE LINK';

select count(*) from user_objects where object_type='LOB';

源端数据库导出

nohup expdp system/****** dumpfile=expdp.dmp schemas=****,****,*****  logfile=expd.log directory=exp_dp  parallel=4 &

导出成功后,关闭数据库

srvctl stop database -d db

检查impdp.log日志中是否有警告和错误

将导出的dump文件传到新环境/backup/impdp;

sftp> get expdp.dmp

在新环境导入数据;

nohup impdp system/**** directory=exp_dp dumpfile=expdp.dmp logfile=impdp.log schemas=****,****,***** &

检查impdp.log日志中是否有警告和错误

检查JOB是否成功导入;

     select *from dba_jobs;

检查user_objects个数;

select count(*) from user_objects;

select count(*) from user_objects where object_type='TABLE';

select count(*) from user_objects where object_type='INDEX';

select count(*) from user_objects where object_type='VIEW';

select count(*) from user_objects where object_type='MATERIALIZED VIEW';

select count(*) from user_objects where object_type='TRIGGER';

select count(*) from user_objects where object_type='SEQUENCE';

select count(*) from user_objects where object_type='PROCEDURE';

select count(*) from user_objects where object_type='DATABASE LINK';

select count(*) from user_objects where object_type='LOB';

打开数据库归档

alter database archivelog;

关注迁移后的性能状况。关注表的统计信息。

图文推荐