解决oracle两个的数据库之间数据迁移方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决oracle两个的数据库之间数据迁移方法相关的知识,希望对你有一定的参考价值。

优缺点都是什么?
只是把里面的数据移到令一个库里

1.exp/imp:可针对整个数据库对象、用户对象、指定表等进行。(需控制重复对象,数据表停用状态下进行)
2.sqlldr:对某个或几个表的特定资料导出为文本文件,再用sqlldr导入。(文本格式要正确,控制较复杂,效率低)
3.建立两个数据库间链接,直接用insert或copy语句迁移,也是针对少数表进行。(可在数据库使用状态下进行)
参考技术A 迁移?
整库迁移的话建议exp/imp导出导入。
否者会很很多不必要的麻烦。
参考技术B 用工具 数据结构不同的可以手工导入本回答被提问者采纳 参考技术C 个人建议 exp/imp 简单实用。 参考技术D 我感觉建立个连接就可以了。什么dblink之类的

深入理解Oracle的imp/exp 和各版本之间的规则

Oracle数据中IMP/EXP工具可用于对数据进行迁移。IMP命令用于把Dmp文件从本地导入到远程数据库服务器,而EXP命令则是把数据从远程数据库服务器导出到本地的Dmp文件。其功能相当于Oracle数据库的备份与还原。利用IMP/EXP工具可以轻松的实现对数据库的迁移工作,甚至是跨平台的数据库迁移。

exp/imp:

 

  这也算是最常用最简单的方法了,一般是基于应用的owner级做导出导入。

 

  操作方法为:在新库建立好owner和表空间,停老库的应用,在老库做exp user/pwd owner=XXX file=exp_xxx.dmp log=exp_xxx.log buffer=6000000,传dmp文件到新库,在新库做imp user/pwd fromuser=XXX touser=XXX file=exp_xxx.dmp log=imp_xxx.log ignore=y.

 

  优缺点:优点是可以跨平台使用;缺点是停机时间长,停机时间为从exp到网络传输到新库,再加上imp的时间。 

 

Oracle的imp/exp组件是我们常用的工具,它的一个操作原则就是向下兼容。下面是据此总结的几个使用规则和相关测试:

 规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务器

规则2:高版本exp出的dmp文件,低版本无法imp(无法识别dmp文件)

规则3:低版本exp出的dmp文件,高版本可以imp(向下兼容)

规则4:从Oracle 低版本的Export数据可以ImportOracle高版本中,但限于Oracle的相邻版本

 

 

 

规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务器

 

--1.1 使用9i客户端通过imp连接到10g数据库

C:Documents and Settingsyuechaotian>exp userid=hdtest/test@s67 tables=(ab01) rows=n file=d:x.dmp

 

Export: Release 9.2.0.1.0 - Production on 星期三 2月 20 10:09:55 2008

 

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

 

 

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

: 将不会导出表数据(行)

 

即将导出指定的表通过常规路径 ...

. . 正在导出表 AB01

在没有警告的情况下成功终止导出。

 

 

--1.2 使用10g客户端通过imp连接9i数据库:连接失败(而不是导出失败)

C:Documents and Settingsyuechaotian>exp userid=hbjb_kf_hd/test@s46 owner=hdtest file=d:x.dmp

 

Export: Release 10.2.0.1.0 - Production on 星期三 2月 20 09:57:22 2008

 

Copyright (c) 1982, 2005, Oracle. All rights reserved.

 

 

EXP-00056: 遇到 ORACLE 错误 6550

ORA-06550: 第 1 行, 第 41 列:

PLS-00302: 必须说明 ‘‘SET_NO_OUTLINES‘‘ 组件

ORA-06550: 第 1 行, 第 15 列:

PL/SQL: Statement ignored

EXP-00000: 导出终止失败

 

规则2:高版本exp出的dmp文件,低版本无法imp(无法识别dmp文件)

--2.1 使用10g客户端exp10g的数据

C:Documents and Settingsyuechaotian>exp userid=test/test@orcl owner=test file=d:10g.dmp

 

Export: Release 10.2.0.1.0 - Production on 星期三 2月 20 11:16:39 2008

 

Copyright (c) 1982, 2005, Oracle. All rights reserved.

 

 

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

服务器使用 AL32UTF8 字符集 (可能的字符集转换)

 

即将导出指定的用户...

……

导出成功终止, 但出现警告。

 

C:Documents and Settingsyuechaotian>

 

--2.2 使用9i客户端imp上面所导出的dmp文件到10g:可以连接到10g中,但无法识别文件

C:Documents and Settingsyuechaotian>imp userid=test/test@s10g fromuser=test touser=test file=d:10g.dmp

 

Import: Release 9.2.0.1.0 - Production on 星期三 2月 20 11:20:33 2008

 

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

 

 

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

 

IMP-00010: 不是有效的导出文件,标题验证失败

IMP-00000: 未成功终止导入

 

C:Documents and Settingsyuechaotian>

 

规则3:低版本exp出的dmp文件,高版本可以imp(向下兼容)

-- 3.1 使用9i客户端exp9i中的数据

C:Documents and Settingsyuechaotian>exp userid=test/test@s9i owner=test file=d:9i.dmp

 

Export: Release 9.2.0.1.0 - Production on 星期三 2月 20 11:25:04 2008

 

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

 

 

连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

 

即将导出指定的用户...

……

在没有警告的情况下成功终止导出。

 

C:Documents and Settingsyuechaotian>

 

-- 3.2 使用10g客户端imp10g数据库中

C:Documents and Settingsyuechaotian>imp userid=test/test@orcl fromuser=test touser=test file=d:9i.dmp

 

Import: Release 10.2.0.1.0 - Production on 星期三 2月 20 11:28:46 2008

 

Copyright (c) 1982, 2005, Oracle. All rights reserved.

 

 

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

 

经由常规路径由 EXPORT:V09.02.00 创建的导出文件

已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入

导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)

. . 正在导入表 "AUDIT_ACTIONS"导入了 144 行

……

成功终止导入, 但出现警告。

 

C:Documents and Settingsyuechaotian>

 

规则4:从Oracle 低版本的Export数据可以ImportOracle高版本中,但限于Oracle的相邻版本,如从Oracle 7 到 Oracle 8。对于两个不相邻版本间进行转换,如从Oracle 6 到 Oracle 8,则应先将数据输入到中间版本—Oracle 7,再从中间数据库转入更高版本。

--我使用10g的imp功能,可以将由817导出的dmp文件直接导入10g中,这与该规则的介绍不同。(该规则出自高道强的《Oracle导入导出工具实现数据库移植》)

C:Documents and Settingsyuechaotian>imp userid=test/test fromuser=scott touser=test file=d: yc.dmp

 

Import: Release 10.2.0.1.0 - Production on 星期三 2月 20 14:03:33 2008

 

Copyright (c) 1982, 2005, Oracle. All rights reserved.

 

 

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

 

经由常规路径由 EXPORT:V08.01.07 创建的导出文件

 

警告: 这些对象由 SCOTT 导出, 而不是当前用户

 

已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入

导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)

导出服务器使用 ZHS16GBK NCHAR 字符集 (可能的 ncharset 转换)

. 正在将 SCOTT 的对象导入到 TEST

. . 正在导入表 "ACCOUNT"导入了 5 行

. . 正在导入表 "BONUS"导入了 0 行

. . 正在导入表 "DEPT"导入了 4 行

. . 正在导入表 "EMP"导入了 14 行

. . 正在导入表 "RECEIPT"导入了 1 行

. . 正在导入表 "SALGRADE"导入了 5 行

即将启用约束条件...

成功终止导入, 没有出现警告。

 

C:Documents and Settingsyuechaotian>

 

--以上操作,对于OracleXE的10g版本同样适用:

C:Documents and Settingsyuechaotian>imp userid=test/test fromuser=scott touser=test file=d: yc.dmp

 

Import: Release 10.2.0.1.0 - Production on 星期三 2月 20 14:15:51 2008

 

Copyright (c) 1982, 2005, Oracle. All rights reserved.

 

 

连接到: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

 

经由常规路径由 EXPORT:V08.01.07 创建的导出文件

 

警告: 这些对象由 SCOTT 导出, 而不是当前用户

 

已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入

导出服务器使用 ZHS16GBK NCHAR 字符集 (可能的 ncharset 转换)

. 正在将 SCOTT 的对象导入到 TEST

. . 正在导入表 "ACCOUNT"导入了 5 行

. . 正在导入表 "BONUS"导入了 0 行

. . 正在导入表 "DEPT"导入了 4 行

. . 正在导入表 "EMP"导入了 14 行

. . 正在导入表 "RECEIPT"导入了 1 行

. . 正在导入表 "SALGRADE"导入了 5 行

即将启用约束条件...

成功终止导入, 没有出现警告

以上是关于解决oracle两个的数据库之间数据迁移方法的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库部分迁至闪存存储方案

oracle历史数据迁移

如何将ORACLE的数据迁移到MYSQL

异构环境oracle数据库迁移——export和import

Python 进行 Oracle 与 Mysql 不同数据库类型之间的数据 diff

Oracle 从 varray 更改列数据类型