Oracle数据迁移方案
分类: Oracle
数据迁移通俗的说就是将数据从一个地方转移到另一个地方。主要使用场景有:根据正式系统搭建测试环境、从内网复制到外网、数据库服务器硬件升级等。根据需要迁移的数据量大小、系统架构,可采取不同的迁移方法。
注:以下所说方法,不考虑数据的增量更新、不考虑数据的实时同步、不考虑数据的逻辑转换。如果有这些需求,建议使用第三方ETL工具或使用Oracle的其他数据同步技术。
一、常用示例
1.1 如何在客户现场搭建测试环境?
常规方案,使用imp/exp工具,先在源库执行直接路径导出操作,然后在目标库执行导入操作。IMP/EXP的执行速度主要受限于磁盘及网络。
数据量:1.5G
导出用时:5分钟
导入用时:23分钟
导出文件大小:641M
导出导入环境:单CPU,700M内存。为力求最大速度,使用直接路径导出、设置最大I/O缓冲、导入导出文件都放在服务器上执行。
1.2 还有没有更快的办法?
有,仍然使用impdp/expdp。只是不再将数据导出后导入,而是直接将数据从源库导入到目的库。
CMD> Impdp testi@目标库 directory=DMPDIR schemas=TESTI
network_link=源库dblink remap_schema=TESTI:TESTA
上面语句的操作是将源库的TESTI用户的数据,导入到目标库的TESTA用户下。
这个操作是局域网内迁移数据最方便的工具,不过也可能是速度最慢的工具。
1.3 有没有还快一点的方法?
有,换用impdp/expdp。同样在源库执行导出,在目标库执行导入。操作速度能得到极大提升。IMPDP/EXPDP速度主要受限于磁盘,与网络无关。
原数据大小:1.5G
expdp导出操作用时:5分钟
impdp导入操作用时:22分钟
导出文件大小:588M
导出导入环境:单CPU,700M内存,并行度 = 1
??你不是说这个会更快么?为什么速度跟1.1的imp/exp差不多啊?
请看第四部分总结的解释。
1.4 你还敢再快一点么?
使用表空间迁移。将表空间的元数据导出,和数据文件一起,复制到新库。执行元数据导入。一般来说,整个导入导出的数据量不到5M。速度相当快,但使用限制比较多。
导出时间:1分钟
导入时间:3分钟
导出文件:60M + 数据文件1.5G
1.5 如何将数据从linux环境转到windows环境?
查看v$transportable_platform,如果数据编码一致,可尝试直接复制数据文件。否则使用rman或impdp/expdp或imp/exp。
1.6 如果你有一个excel格式的数据表,需要远程更新到客户数据库上,怎么更新?
使用pl/sql developer,复制、粘贴、提交。
1.7 如果你需要将正式库的几张表,迁移到测试库来,怎么弄快些?
用dblink+脚本,或者使用impdp远程导入。
二、局部数据的迁移
2.1、广域网的迁移
2.1.1 pl/sql developer
广域网下小数据量的迁移,常用pl/sql developer工具来完成。
在本地打开excel文件,复制数据。然后通过“远程桌面”,到远程服务器的pl/sql界面上粘贴,就可以了。操作简单方便。
第一步:在本地复制数据
第二步:打开远程桌面
第三步:在远程机器的pl/sql里面粘贴数据
第四步:保存数据
这种方法在小数据量下很好用。大数据量时,一个表一个表的粘贴比较麻烦,且一粘贴可能就卡在那里了,得等10来分钟。
2.1.2 imp/exp
广域网内大数据量的迁移,通常使用imp/exp工具。先在源库上使用exp工具,导出数据压缩包,通过网络发送到目标数据库。在目标数据库上再imp。
第一步:本机连接到源库上,执行exp
Exp一般使用直接路径导出,速度可以达到常规路径导出的3倍以上。
参数解释:
Parfile:指定导出的参数配置文件
Log:导出日志输出到哪个文件
recordlength=65535:设置最大I/O缓冲为64K(该参数最大64K)
Direct=y:数据经直接路径导出,不再经SGA导出
Owner=testi:仅导出用户testi的数据。
第二步:本机连接到目标库上,执行imp
Parfile:指定导入的参数配置文件
Log:导入日志输出到哪个文件
Feedback=1000:每导入1000行,在屏幕上输出一个”.”
Buffer=10000000:设置导入缓冲区大小
Fromuser=testi:仅导入testi用户的数据
Touser=testi:将数据导入到新用户testi下。
2.2、局域网内迁移
局域网内的数据迁移,方案比较灵活。常用的方法有:imp/exp、impdp/expdp、dblink+脚本、表空间迁移。
其中imp/exp在2.1.2已有介绍,这里主要介绍其他方法:
2.2.1 dblink+脚本
2.2.1.1 基本介绍
通过dblink将多个分布式数据库连接起来,对外提供统一的服务。可以实现在一个数据库上,访问多个分布式数据库。使用“dblink+脚本”的方法来转移数据,配置灵活,但脚本写起来比较麻烦。需要为每张表单独写脚本。
2.2.1.2 实施方案
主要配置分两步:
1) 创建数据库连接
create database link LINKNAME connect to DBUSER identified by password
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.9)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME =ORCL)
)
)';
2) 执行抽取脚本
如:将表B的数据抽取到表A中。
Create table A as select * from B@LINKNAME;
对每张需要同步的表分别写脚本。
2.2.2 impdp/expdp
2.2.2.1 基本介绍
Impdp/expdp就是imp/exp的升级版,在Oracle 10g开始引入。
其主要加强功能如下:
1) 性能优化,导入导出速度明显提升
2) 提供并行执行的能力,加快导入导出速度
3) 提供交互式界面,可随时暂停导入导出操作
4) 提供多种表加载策略,如:追加、替换、跳过等
5) 提供数据库对象间的直接交换功能。
6) 提供导出文件大小估计功能
7) 提供导入、导出进度查看功能
8) 自动在导出文件目录下生成导入、导出日志文件。
但impdp/expdp也有比较明显的限制。
1) 与imp/exp工具生成的数据包不兼容
2) 能远程调用,但导入导出文件必须放到服务器上
总体来说,impdp/expdp优势还是很明显的,所以能使用impdp/expdp时,尽量不使用imp/exp。
2.2.2.1 实施方案
Impdp/expdp的使用,主要分为三步:
1) 创建目录映射
在数据库上,创建到操作系统目录的映射:
Create directory DMPDIR as‘c:\oracle\dump\’;
授予用户USER01对该目录的读写权限:
Grant read ,write on directoryDMPDIR toUSER01;
2) 执行导出脚本
导出:
参数解释:
Directory:数据文件导出到哪个路径下,这里是指定第一步创建的directory。
Dumpfile:导出文件名
Logfile:日志文件名
Parallel:设置导出job的并行度,如果对导出速度有较高要求,可设置CPU数 - 1
Job_name:为导出job命名
SCHEMAS:指定导出哪个用户的数据。
3) 执行数据导入脚本
首先仿照第一步,在目标库上创建操作系统目录映射。然后将第二步的导出文件拷贝到目标数据库对应目录下。然后执行以下脚本:
参数解释:
Directory:导入文件所在的路径
Dumpfile:导入文件名
Logfile:指定生成日志文件的存放位置
Parallel:指定操作并行度
job_name:指定导入job名称
SCHEMAS:指定要导入的用户名
REMAP_SCHEMA =TESTI:TESTB:指定将TESTI用户的数据,导入到TESTB用户下
TABLE_EXISTS_ACTION=REPLACE:如果要导入的表已经存在,直接替换。
2.2.2.3 界面介绍
1) 导出界面
可看到整个导出文件,约需要749.5M的存储空间。当然,expdp也支持只评估空间,不导出数据。
2) 状态查看界面
如果想要查看数据导入进度,新开一个窗口,执行以下脚本:
>expdp test@target ATTACH=TESTIMP
> status
2.2.3 表空间迁移
2.2.3.1 基本介绍
表空间迁移,相当于将一个数据库的文件,直接用U盘拷贝到另一个数据库使用。虽然这个原理简单,但操作复杂。
这个操作限制比较多:
1) 原数据库与目标数据库数据库字符集相同、国家字符集必须相同。可查看视图v$nls_parameters确认;
2) 源库与目标数据库最好是同一Oracle版本;
3) 不能搬移SYS和SYSTEM用户对象所在表空间。
2.2.3.2 实施方案
表空间的迁移,可以用imp/exp或impdp/expdp来完成,主要分3步:
1) 完成表空间集的自包含检查
SQL> exec dbms_tts.transport_set_check(‘TBS1’,true);
执行完成后,查询:select * from v$transport_set_violations;
如果没查出数据,表明可以执行表空间迁移。否则根据查询结果采取其他方法。
2) 执行表空间导出
SQL>alter tablespace users read only;
CMD>expdp test@orcl directory=DMPDIR dumpfile=tbs_dmp.dmp
transport_tablespace= USERS
3) 执行表空间导入
将第二步生成的tbs_dmp.dmp文件、表空间USERS对应的数据文件USER01.DBF通过U盘,拷贝到目标库,在目标库上执行导入:
CMD> impdp test@orcl directory=DMPDIR dumpfile=tbs_dmp.dmp
transport_tablespace=y tablespaces=USERS transport_datafiles=’c:\...\USER01.DBF’
SQL> alter tablespace users read write;
2.2.3.3 界面介绍
表空间传输,只是导出表空间的元数据,插入到新库中,因此速度很快。
三、整库迁移
整库迁移,一般用于环境的第一次搭建过程中。就是将整个数据库原封不动的挪到别的机器上。比较适合搭建独立的测试环境时使用。
整库迁移也可以使用前面介绍的imp/exp、impdp/expdp工具,但是速度奇慢,且经常报错。不如下面的方法好用。
3.1 冷备迁移
冷备迁移,就是将源数据库关闭,然后将数据文件拷贝到新机器的相同位置,直接打开新库就可以了。这个迁移过程,操作相对来说简单一些,也比较好控制,但有其局限性:不能跨操作系统硬件平台及数据库大版本。
Windows下的迁移步骤大致如下:
1) 关闭源数据库
2) 根据源库数据文件地址,在新机器上建立相应的操作系统目录
3) 将源库的数据文件、控制文件、参数文件、密码文件等拷贝到新库所在机器
4) 启动源数据库
5) 创建控制文件中记录的其他目录
6) 使用oradim创建实例
7) 启动目标数据库
8) 执行utlrp.sql脚本,编译所有无效对象。
3.2 RMAN迁移
用RMAN做整库迁移,比较方便,主要优点是可以跨操作系统硬件平台。
下面是一个将linux系统迁移到wimdows系统的具体实施步骤(当然在32位linux和32位windows之间,可以直接复制数据文件,无需这么麻烦,此处为举例演示):
1) 以read only模式打开数据库
SQL>startup open read only;
2) 转换数据文件
CMD> RMAN target /
RMAN> run{
convert database transport script '/home/Oracle/temp/transcript.sql'
on target platform convert script '/home/oracle/temp/convert.sql'
to platform 'Microsoft Windows IA (32-bit)'
db_file_name_convert('/oracle/oradata/orcl','/home/oracle/temp');
};
3) 将参数文件、数据文件、转换脚本,拷贝到windows平台上
4) 在windows平台上建立数据库实例,然后依次执行脚本convert.sql、transcript.sql
5) 打开数据库,执行utlrp.sql,编译无效数据库对象。
四、总结
4.1 如何选择迁移方案
不同的迁移方案,所花费的时间可能在10分钟+到10小时+之间波动……..
方案选对了,你可以分分钟搞定,否则就得熬夜加班了。
总的来说,如果你要迁移数据,考虑工具的优先顺序如下:
把本文档从后往前看,就得到下面这顺序了……..
1) 如果迁移整个数据库,首选冷备迁移和RMAN迁移。否则首选表空间迁移
2) impdp/expdp
3) imp/exp
4) dblink+脚本
具体选择哪种方案,要根据实施环境而定。也许你谋划很久的方案,环境并不支持。但总有一种适合你。
4.2 impdp/expdp与imp/exp到底有什么区别?
Impdp/expdp = imp/exp + direct mor + parallel
Impdp/expdp比imp/exp快,最主要就是因为它具有并行执行的特性,且默认是直接路径导出。
除了性能优势外,impdp/expdp还提供了几个比较诱人的功能:
1) 提供并行执行的能力,加快导入导出速度
2) 提供交互式界面,可随时暂停导入导出操作
3) 提供多种表加载策略,如:追加、替换、跳过等
4) 提供数据库对象间的直接交换功能。
5) 提供导出文件大小估计功能
6) 提供导入、导出进度查看功能
7) 自动在导出文件目录下生成导入、导出日志文件。
回到最开始的问题,为什么imp/exp和impdp/expdp的导入导出速度差不多?
因为本次测试使用impdp/expdp工具时,设置的并行度为1。丧失了最主要的特性,能快的起来么。
既然这个并行度这么重要,那设置多少合适呢?设置太高,服务器CPU直接飙升至100%,导入速度还得不到提升。设置太低,完全看不到提速的效果。推荐设置:等于服务器CPU数,但不要高于dmp文件的个数。
相关推荐
Oracle数据迁移方案
去年年底做了不少系统的数据迁移,大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移,有一些心得体会,与大家分享。 首先说说迁移流程,在迁移之前,写好方案,特别是实施的方案步骤一定...
详解了sqlserver和oracle数据库之间的数据迁移
ORACLE数据库迁移方案,单机迁移到rac
oracle数据迁移项目实施方案 项目实施经典案例 擦考价值大
"Oracle至PostgreSQL数据库迁移方案" Oracle至PostgreSQL数据库迁移方案是使用Ora2PG工具实现的,该工具是一个Perl语言编写的开源工具,用于将Oracle或MySQL数据库迁移到PostgreSQL数据库。下面是该方案的详细知识...
Oracle数据迁移技巧和优化思路.pdf
带有oracle数据库的数据迁移方案说明.pdf带有oracle数据库的数据迁移方案说明.pdf带有oracle数据库的数据迁移方案说明.pdf带有oracle数据库的数据迁移方案说明.pdf带有oracle数据库的数据迁移方案说明.pdf
Oracle 10g->11g XTTS迁移方案 Oracle 9i至11g exp迁移 Oracle数据库三种迁移方案 Oracle DataGuard方式迁移数据库 数据库迁移升级最佳实践9i-10g-11g Oracle ASM扩容&数据迁移文档 06使用XTTS技术进行U2L跨平台数据...
Oracle数据迁移技术与方案.docxOracle数据迁移技术与方案.docxOracle数据迁移技术与方案.docxOracle数据迁移技术与方案.docxOracle数据迁移技术与方案.docxOracle数据迁移技术与方案.docxOracle数据迁移技术与方案....
Oracle数据迁移技术与方案.pdfOracle数据迁移技术与方案.pdfOracle数据迁移技术与方案.pdfOracle数据迁移技术与方案.pdfOracle数据迁移技术与方案.pdfOracle数据迁移技术与方案.pdfOracle数据迁移技术与方案....
oracle expdp impdp 分区表重映射导出导入 数据迁移方案,以SI01用户为例子,将用户分区表导出后,将分区表重映射到新的表空间,完成数据迁移和检查。照方案例子按步去做,一定能成功。
2 数据迁移 2.1 数据准备 2.1.1 生产数据备份 2.1.2 导入机还原备份文件 2.2 Oracle SQL Developer配置连接 2.2.1 连接本机mysql数据库 2.2.2 连接生产oracle数据库 2.3 执行迁移 2.3.1 关联移植资料档案库 2.3.2 ...
Oracle Data Guard RAC TO RAC 迁移方案 本文档旨在提供一个基于 RMAN 备份的 Oracle Data Guard RAC TO RAC 迁移方案,以便帮助 DBA schnell 和可靠地完成数据库迁移任务。该方案适用 Oracle 11g 版本,文档版本为...
本文将详细介绍将Oracle数据完整迁移到DM数据库的过程,包括分析待移植系统、数据迁移、PL/SQL移植、移植结果校验、应用系统移植、测试和优化等几个方面的工作。 一、分析待移植系统 在开始移植之前,需要对待移植...
Oracle 11.2.0.4 到 Oracle 19.3 PDB XTTS 迁移方案测试 Oracle 11.2.0.4 到 Oracle 19.3 PDB XTTS 迁移方案测试是将 Oracle 11.2.0.4 版本迁移到 Oracle 19.3 PDB XTTS 环境中的一个迁移项目。该项目的目的是将表...
DB2到Oracle的数据迁移,使用export完成DB2的数据导出,然后用SQLLoader完成Oracle的数据导入。
本文档介绍关系数据库中海量数据迁移方案。
Oracle10g的数据迁移方案