当前位置: 首页 > news >正文

使用数据泵(Data Pump)迁移Oracle数据库数据

目的

将一个oracle数据库实例数据复制给另一个实例

注意事项

sqlplus(即在本机linux环境下执行sql)、expdp、impdp等命令一般需要切换到oracle用户才能执行
如果你当前是linux的root用户,请切换用户

su - oracle
//一般在oracle账号下才能显示echo $ORACLE_HOME的结果

正式迁移步骤

1.确定导出数据的目录
不仅要创建文件夹,而且要创建对应数据库对象
路径可以随意,比如我打算放在$ORACLE_HOME+/dbs/old这样一个路径下

mkdir /u01/app/oracle/product/19.3.0/dbhome_1/dbs/old

2.登录sqlplus去创建export_dir对象

sqlplus 账号/密码@你的SID

注意如果密码中带有@符号,请改成如下方式
巨坑! Oracle TNSPING 正常但sqlplus报错ORA-12154: TNS:could not resolve the connect identifier specified

sqlplus '账号/"密码"'@你的SID
SQL> CREATE DIRECTORY export_dir AS '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/old';Directory created.

export_dir命名随意
产生结果可以通过如下sql查找

SELECT * FROM dba_directories

3. 使用expdp 命令导出数据
请务必在操作系统的命令行界面中执行 expdp 命令,而不是在 SQL*Plus 环境中执行。注意别用sys,用其它有dba角色的账号。

expdp '账号/"密码"'@你的SID schemas=用户1,用户2,用户3 directory=export_dir dumpfile=export.dmp logfile=export.log
  • username/password@old_instance 是连接到旧实例的用户名和密码。
  • schemas=user1,user2 指定要导出的用户列表,用逗号分隔。
  • directory=export_dir 指定导出文件的目录。
  • dumpfile=export.dmp 指定导出文件的名称。
  • logfile=export.log 指定导出过程的日志文件。

4.在新机器或者新实例上创建import_dir对象和对应目录
记得切换oracle用户后登录sqlplus

SQL> CREATE DIRECTORY import_dir AS '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/new';
Directory created.

import_dir名字随意

mkdir /u01/app/oracle/product/19.3.0/dbhome_1/dbs/new

5.将export.dmp复制到new目录下
6.使用impdp命令导入数据

impdp username/password@new_instance directory=import_dir dumpfile=export.dmp logfile=import.log remap_schema=user1:new_user1 remap_schema=user2:new_user2
  • username/password@new_instance 是连接到新实例的用户名和密码。
  • directory=import_dir 指定导入文件的目录。
  • dumpfile=export.dmp 指定要导入的导出文件。
  • logfile=import.log 指定导入过程的日志文件。
  • remap_schema=user1:new_user1 和 remap_schema=user2:new_user2 可选,用于重新映射用户,如果在新实例中用户名称不同于旧实例。

7.可能出现的问题
ORA-39087: directory name IMPORT_DIR is invalid
可能是权限问题,确保执行导入操作的用户对 IMPORT_DIR 目录有读写权限。可以登录高权限账号使用以下命令授予权限:

GRANT READ, WRITE ON DIRECTORY IMPORT_DIR TO 执行导入的用户;

ORA-31631: privileges are required
。ORA-39122: Unprivileged users may not perform REMAP_SCHEMA remappings.

表明当前用户没有执行 REMAP_SCHEMA 操作所需的权限。

GRANT IMP_FULL_DATABASE TO 执行导入的用户;

http://www.mrgr.cn/news/35532.html

相关文章:

  • 【Linux】进程的概念
  • MQ集群
  • 各种环境换源教程
  • sql文件
  • Go:文件输入输出以及json解析
  • C# Winform--SerialPort串口通讯(ASCII码发送)
  • 针对国产化--离线安装Nginx rpm包下载 ARM64(.aarch64.rpm) 版本下载
  • CSS样式的4种引入方法
  • 洛谷P2571.传送带
  • 【VUE3.0】动手做一套像素风的前端UI组件库---Message
  • RabbitMQ简介
  • 《操作系统 - 清华大学》1 -2:操作系统概述 —— 什么是操作系统
  • 【C++取经之路】红黑树封装set
  • 关于养育孩子的一点想法
  • MATLAB算法实战应用案例精讲-【数模应用】路径规划
  • C++核心编程和桌面应用开发 第六天(this指针 友元)
  • Vue3中使用Pinia(封装并统一导出)
  • C++_CH19_继承
  • Make breakpoint pending on future shared library load
  • 【初阶数据结构】排序——插入排序
  • 阴影的基本原理
  • Linux驱动开发初识
  • mysql学习教程,从入门到精通,SQL RIGHT JOIN语句(24)
  • Robot Operating System——多边形数据
  • [大语言模型-论文精读] Diffusion Model技术-通过时间和空间组合扩散模型生成复杂的3D人物动作
  • Thread , ThreadLocal , ThreadLocalMap , Entry 之间的关系?