当前位置:数据库 > Oracle >>

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:指定要导入的用户
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,