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的值可以表、索引、表空间、类型、集群、约束等对象。