1.导出dmp文件

导出数据库命令:

---本地120服务器 导出到DATA_PUMP_DIR 
expdp njchecker/password@192.168.0.120/orcl dumpfile=njchecker2021120701_120.dmp DIRECTORY=DATA_PUMP_DIR version=12.2.0.1.0;

---上传到39数据库 DATA_PUMP_DIR 39服务器(12.2.0.1.0)
impdp njchecker/password@39.105.28.72/pdb1 directory=DATA_PUMP_DIR dumpfile=njchecker2021120701_120.dmp remap_tablespace=NJCHECKER_DATA:NJCHECKER_DATA remap_schema=njchecker:njchecker full=y table_exists_action=REPLACE version=12.2.0.1.0 ;

( 解释:expdp 用户名/密码@ip/实例名 dumpfile=dmp文件 DIRECTORY=DATA_PUMP_DIR version=指定导到某个版本的数据库)

查询dba的常用默认目录。
SQL> select * from dba_directories;
#或者 find / -name *.dmp

在这里插入图片描述

2. 新建用户njchecktest2

su - oracle

2.登录sqlplus,使用sysdba登录

sqlplus / as sysdba

4.查询表空间存储位置(/u01/app/oracle/oradata/orcl/)

SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/qhchecker_temp.dbf
/u01/app/oracle/oradata/orcl/QHCHECKER2019_temp.dbf
/u01/app/oracle/oradata/orcl/njchecker2019_temp.dbf
/u01/app/oracle/oradata/orcl/njchecker2019fk_temp.dbf
/u01/app/oracle/oradata/orcl/kdchecker_temp.dbf

5、在/u01/app/oracle/oradata/orcl/下 创建临时表空间

create temporary tablespace TMP_NJCHECKERTEST2 tempfile '/u01/app/oracle/oradata/orcl/njcheckertest2_temp.dbf' size 2G reuse autoextend on next 20m maxsize unlimited;

6、创建数据表空间

create tablespace DATA_NJCHECKERTEST2 datafile '/u01/app/oracle/oradata/orcl/njcheckertest2_data.dbf' size 100M reuse autoextend on next 40M maxsize unlimited;

7、创建索引表空间

create tablespace IDX_NJCHECKERTEST2 logging datafile '/u01/app/oracle/oradata/orcl/njcheckertest2_index.dbf' size 100m autoextend on next 32m maxsize 2048m extent management local;

8、创建用户:njcheckertest2,密码:password 并分配 表空间:DATA_NJCHECKERTEST2

create user njcheckertest2 identified by password default tablespace DATA_NJCHECKERTEST2 temporary tablespace TMP_NJCHECKERTEST2;

9、赋权dba给用户(重要步骤,否则该用户不能导入dmp)

grant dba to njcheckertest2;

3.导入dmp文件

10、创建临时存放文件的目录
create directory DATA_DIR as ‘/home/oracle/temp’;
11、给用户赋文件目录的读写权限,把导出的数据库文件njchecker20211106.dmp,暂放这个目录
grant read,write on directory DATA_DIR to system;

[oracle@centos ~]$ cd /home/oracle/temp/
[oracle@centos temp]$ ll
total 137380
-rw-r--r-- 1 oracle oinstall     65986 Nov  3 11:38 exdp_njcheckertest2.log
-rw-r----- 1 oracle oinstall 140607488 Nov  3 11:36 njchecker20211106.dmp

普通方式:同名同库同空间的

impdp njchecker/password@orcl directory=DATA_DIR  dumpfile=njchecker20211106.dmp
#directory  不写默认:DATA_PUMP_DIR 

特殊情况①:不同名,不同表空间,不同用户

impdp njcheckertest2/password@192.168.0.120/orcl directory=DATA_DIR dumpfile=njchecker20211106.dmp remap_tablespace=njchecker:njcheckertest2 remap_schema=njchecker:njcheckertest2 logfile=exdp_njcheckertest2.log table_exists_action=REPLACE;

(impdp 用户名/密码@ip/实例名 directory=DATA_PUMP_DIR dumpfile=导出的那个dmp文件 table_exists_action=REPLACE )

(
注释: remap_tablespace=source_tablespace:target_tablespace remap_schema=source_schema:target_schema table_exists_action=REPLACE
table_exists_action选项:{skip 是如果已存在表,则跳过并处理下一个对象;append是为表增加数据;truncate是截断表,然后为其增加新数据;replace是删除已存在表,重新建表并追加数据;
辅助记忆: 从source>>导入>>target

特殊情况② 跨数据库版本导数据 (从高到低版本需要指定版本;低版本向高版本迁移无需指定。)
如: 12C==>11g
在12C中备份出来时,应指定版本信息,例如我要导进11g的库(具体版本为11.2.0.1.0,打开sqlplus就能看到),则version=11.2.0.1.0
导出:expdp njcheckert/password@192.168.0.120/orcl dumpfile=njchecker20211106.dmp remap_tablespace=njchecker:DATA_NJCHECKERTEST2 remap_schema=njchecker:njcheckertest2 DIRECTORY=DATA_PUMP_DIR version=11.2.0.1.0
导入:impdp njcheckertest2/password@192.168.0.120/orcl directory=DATA_PUMP_DIR dumpfile=njchecker20211106.dpdmp full=y table_exists_action=REPLACE version=11.2.0.1.0

4.更新序列

--生成删除序列脚本(NJCHECKER用户下,目标数据库)
SELECT 'drop sequence NJCHECKER.' || SEQUENCE_NAME || ' ;' 
  FROM DBA_SEQUENCES 
WHERE SEQUENCE_OWNER = 'NJCHECKER';

--生成创建序列脚本(NJCHECKER用户下,源数据库)
SELECT 'create sequence NJCHECKER.' || SEQUENCE_NAME || ' minvalue ' || 
       MIN_VALUE || ' maxvalue ' || MAX_VALUE || ' start with ' || 
       LAST_NUMBER || ' increment by ' || INCREMENT_BY || ' cache ' || 
       CACHE_SIZE || ' ;' 
  FROM DBA_SEQUENCES 
WHERE SEQUENCE_OWNER = 'NJCHECKER';

5.常见问题

1. oracle14460,oracle impdp导入数据库报ora-14460错误解决方法:

在impdp命令加transform=segment_attributes:n参数即可

impdp username/password directory=impdp_dir dumpfile=*.dmp transform=segment_attributes:n

以上语句表示在导入时不导入任何表的已有存储属性

说明:transform_name有四个选项:segment attributes,storage,oid,pctspace

--segment attributes:段属性包括物理属性、存储属性、表空间和日志。

--storage:可以使用storage=y(默认)说明只取对象的存储属性作为导入作业的一部分。

--oid:如果指定oid=Y(默认),则在导入过程中将分配一个新的oid给对象表。

--pctspace:通过提供一个正数作为该转换的值,可以增加对象的分配尺寸,并且数据文件尺寸等于pctspace的值(按百分比)

value:transform_name的值,transform_name为segment attributes,storage,oid时值可为Y/N,pctspace为数值

object_type的值可以表、索引、表空间、类型、集群、约束等对象。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐