Oracle数据库数据迁移完整解决步骤

 更新时间:2024年02月23日 16:50:04   作者:程序员储物箱  
我们常常需要对数据进行迁移,迁移到更性能配置更高级的主机OS上、迁移到远程的机房、迁移到不同的平台下,这篇文章主要给大家介绍了关于Oracle数据库数据迁移的相关资料,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

问题描述:

oracle数据库的所有表结构、数据、索引等需要需从测试库迁移到正式库。

解决步骤:

oracle数据库迁移,主要通过expdp从测试库所在的源服务器将指定的数据表或数据源导出为一个或多个数据文件(.dmp文件),导出的数据可以在正式库中通过impdp数据导入工具进行导入。

前提:服务器为linux系统。

1、源服务器操作

(1)创建目录

在源服务器上创建一个目录对象,用于指定导入数据文件的路径。可以使用以下命令创建目录对象:

# su - oracle
# sqlplus / as sysdba
SQL> create or replace directory tmpDir as '/tempFile'

tmpDir是目录对象的名称,/tempFile是导入数据文件的路径。

(2)使用expdp导出数据表

# su - oracle
# expdp username/password@Ip:port/database schemas=dbTest directory=tmpDir dumpfile=export.dmp logfile=export.log
  • username/password@Ip:port/database:指定要导出的数据库用户及其密码、数据库ip、端口、数据库名称;如果执行命令的服务器就是该数据库的服务器,则ip地址和数据库默认端口可以省略。
  •  schemas=dbTest:指定要导出的数据库用户名称;
  •  directory=tmpDir:指定导出的数据文件路径,这里的tmpDir是预先定义的一个目录对象;
  • dumpfile=export.dmp:指定导出的数据文件名称,这里的export.dmp是数据导出时生成的数据文件;
  • logfile=export.log:指定导出日志文件名称。

扩展:

导出单个表的语句:

# expdp username/password@Ip:port/database directory=tmpDir dumpfile=export.dmp tables=student,school,teacher 

其中,tables是要导入的数据表名称,多个数据表之间使用逗号分隔

(3)复制dmp文件到目标服务器

# scp -P 2222 /tempFile/export.dmp name@xxx.xxx.xxx.xxx:/home/tempFile

输入目标服务器密码,按回车,文件就会自动传输到目标服务器中指定的文件夹中。

其中,name@xxx.xxx.xxx.xxx中name为目标服务器登陆账号,xxx.xxx.xxx.xxx为目标服务器ip地址。2222是目标服务器的端口号。

如果目标服务器部署22端口或者目标服务器与源服务器端口不一致,则需要用【-P 端口】指定目标服务器端口。

2、目标服务器操作

(1)创建目录

在目标服务器上创建一个目录对象,用于指定导入数据文件的路径。可以使用以下命令创建目录对象:

# su - oracle
# sqlplus / as sysdba
SQL> create or replace directory tmpDir as '/tempFile'

tmpDir是目录对象的名称,/tempFile是导入数据文件的路径。

(2)使用impdp导入数据表

# su - oracle
# impdp username/password@Ip:port/database schemas=dbTest directory=tmpDir dumpfile=export.dmp job_name=myjob
  • username/password@Ip:port/database:指定要导入的数据库用户及其密码、数据库ip、端口、数据库名称;
  • schemas=dbTest:指定要导入的数据库用户名称;
  • directory=tmpDir:指定导入的数据文件路径,这里的tmpDir是预先定义的一个目录对象;
  • dumpfile=export.dmp:指定导入的数据文件名称,这里的export.dmp是数据导出时生成的数据文件;
  • job_name=myjob:指定导入任务的名称,这里的myjob是自定义的任务名称。

如果源表对象和目标表对象不一致则需要用remap_schema,重新对应迁移原表对象和目标表对象。

# impdp username/password@Ip:port/database remap_schema=dbTest:oprection directory=tmpDir dumpfile=export.dmp job_name=myjob

注意:

remap_schema=dbTest:oprection中格式为dmp文件所在的schema:目标服务器数据库的schema。

扩展

(1)单表导入:

# impdp username/password@Ip:port/database directory=tmpDir dumpfile=export.dmp tables=student,school,teacher

需要注意的是,在导入数据表时,如果目标数据库中已经存在同名的数据表,需要使用REMAP_TABLE选项将数据表重新映射到新的表名或者新的表空间中,例如:

# impdp username/password@database_schema tables=table1,table2 directory=tmpDir dumpfile=export.dmp logfile=import.log REMAP_TABLE=table1:new_table1,table2:new_table2

替换已存在的表需加上:table_exists_action=replace

报错处理:

1、权限问题

导入的dmp文件需要设置下权限,然后重新进行导入操作。

#  chmod 777 /home/tempFile/export.dmp

2、expdp命令导出报错UDE-00010:multiple job modes requested, schema and tables

当使用expdp命令导出单个数据表时,需要指定TABLES选项来指定要导出的表名,同时也需要指定SCHEMAS选项来指定要导出的数据库用户。如果同时指定了TABLES和SCHEMAS选项,可能会出现UDE-00010错误,提示“multiple job modes requested, schema and tables”。

解决这个问题,可以在导出命令中只指定TABLES选项,不指定SCHEMAS选项。例如:

#  expdp username/password@database_schema tables=table_name directory=data_pump_dir dumpfile=export.dmp

如果需要导出多个表,可以在TABLES选项中使用逗号分隔多个表名

3、主键插入失败

导出测试库的时候数据在更新,导致了dmp文件中设备主键的值有重复的,需要删除数据后,手动新建主键。

总结

到此这篇关于Oracle数据库数据迁移完整解决步骤的文章就介绍到这了,更多相关Oracle数据迁移内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • linux系统oracle数据库出现ora12505问题的解决方法

    linux系统oracle数据库出现ora12505问题的解决方法

    这篇文章主要介绍了linux系统oracle数据库出现ora12505问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Oracle 11g如何清理数据库的历史日志详解

    Oracle 11g如何清理数据库的历史日志详解

    这篇文章主要给大家介绍了关于Oracle 11g如何清理数据库历史日志的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-07-07
  • Linux一键部署oracle安装环境脚本(推荐)

    Linux一键部署oracle安装环境脚本(推荐)

    这篇文章主要介绍了Linux一键部署oracle安装环境脚本,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • oracle数据库的基本使用教程(建表,操作表等)

    oracle数据库的基本使用教程(建表,操作表等)

    这篇文章主要给大家介绍了关于oracle数据库的基本使用(建表,操作表等)的相关资料,包含了Oracle创建表(create table as)使用方法、操作技巧、实例演示和注意事项,需要的朋友可以参考下
    2024-01-01
  • Oracle Connect to Idle Instance解决方法

    Oracle Connect to Idle Instance解决方法

    本文将介绍Oracle如何解决Connect to Idle Instance问题,需要了解的朋友可以参考下
    2012-11-11
  • Oralce中VARCHAR2()与NVARCHAR2()的区别介绍

    Oralce中VARCHAR2()与NVARCHAR2()的区别介绍

    这篇文章主要给大家详细介绍了关于Oralce中VARCHAR2()与NVARCHAR2()的区别,文中先通过翻译官方的介绍进行区别总结,然后由一个实战示例代码进行演示,相信对大家的理解会很有帮助,有需要的朋友们下面来跟着小编一起看看吧。
    2016-12-12
  • Oracle数据库恢复教程之resetlogs操作

    Oracle数据库恢复教程之resetlogs操作

    这篇文章主要给大家介绍了关于Oracle数据库恢复教程之resetlogs操作的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Oracle数据库具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Oracle 创建监控账户 提高工作效率

    Oracle 创建监控账户 提高工作效率

    有很多Oracle服务器,需要天天查看TableSpace,比较麻烦了。
    2009-10-10
  • Oracle也有注入漏洞

    Oracle也有注入漏洞

    Oracle也有注入漏洞...
    2007-03-03
  • Oracle触发器用法实例详解

    Oracle触发器用法实例详解

    这篇文章主要介绍了Oracle触发器用法,结合实例形式详细分析了Oracle触发器的概念,功能,语法及相关使用技巧,需要的朋友可以参考下
    2016-03-03

最新评论

?


http://www.vxiaotou.com