Oracle数据泵导入导出是日常工作中常用的基本技术之一,我们使用oracle数据库数据泵导入(impdp)导出(expdp)进行数据库备份,数据库迁移等数据库维护工作。本文主要说明oracle数据库导入导出的命令。
天下英雄出我辈,一入江湖岁月催
我是爱生活的「无间行者」,努力把实践过的解决方案分享给大家
如果这篇文章对你有用,一个赞、一个评论、一个关注,我都很开心,给点鼓励吧,让我知道你在看。
在工作中,涉及到的Oracle数据库迁移,备份,还原等,可以使用本教程数据泵导入导出来解决。欢迎补充指导。
Oracle数据库被划分成称作为表空间的逻辑区域——形成Oracle数据库的逻辑结构。
一个Oracle数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。
表空间是Oracle数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。
每个Oracle数据库均有SYSTEM表空间,这是数据库创建时自动创建的。
SYSTEM表空间必须总要保持联机,因为其包含着数据库运行所要求的基本信息(关于整个数据库的数据字典、联机求助机制、所有回退段、临时段和自举段、所有的用户数据库实体、其它Oracle软件产品要求的表)。
--准备工作EXPNC_DIR路径创建 --查询数据库路径表 select * from DBA_DIRECTORIES; --查询数据库用户表 select * from DBA_USERS; --查询数据库表空间 select * from DBA_TABLESPACES; --查询数据库数据文件信息表 select * from DBA_DATA_FILES; 123456789
--创建逻辑路径 create directory EXPNC_DIR as 'E:\oracletablespace\expnc'; --命令行执行 expdp操作 cmd->[导出语法] 12345
需要在命令行中执行
--1)按用户导 expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1 --2)并行进程parallel expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3 --3)按表名导 expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1 --4)按查询条件导 expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20' --5)按表空间导 expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example --6)导整个数据库 expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y 1234567891011121314151617
--创建表空间 create tablespace "user_new" DATAFILE 'd:\oracle_tablespace\user_new' size 500M AUTOEXTEND on next 100M maxsize unlimited logging extent management local segment space management auto; --是否提前创建用户设置默认表空间 create user users2 IDENTIFIED BY 123 default tablespace "user_new"; grant connect,resource to users2; --命令行执行 impdp操作 cmd->[导入语法] 1234567891011121314
需要在命令行中执行
--1)导到指定用户下 impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott; --2)改变表的owner impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system; --3)导入表空间 impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example; --4)导整个数据库 impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y; --5)追加数据 impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION 1234567891011121314
我们一般使用Oracle是以用户对象为单位的数据库表空间。
本次实战内容为
用system管理员登录,创建表空间
C:\Users\Administrator>sqlplus SQL*Plus: Release 11.2.0.1.0 Production on 星期一 5月 6 13:08:55 2019 Copyright (c) 1982, 2010, Oracle. All rights reserved. 请输入用户名: system 输入口令: 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> create SMALLFILE tablespace "user" DATAFILE 'E:\oracletablespace\user' size 500M AUTOEXTEND on next 100M maxsize unlimited logging extent management local segment space management auto; 表空间已创建。 1234567891011121314151617181920
创建users用户,设置表空间,并授权
SQL> create user users IDENTIFIED BY 123 default tablespace "user"; 用户已创建。 SQL> grant connect,resource to users; 授权成功。 1234
退出并切换到users用户
创建student表
SQL> create table student( 2 id varchar2(32 BYTE), 3 name varchar2(32 BYTE), 4 phone varchar2(16 BYTE), 5 email varchar2(64 BYTE) 6 ); 表已创建。 SQL> insert into student values('1','赵大','123','123@qq.com'); 已创建 1 行。 SQL> insert into student values('2','钱二','234','234@qq.com'); 已创建 1 行。 SQL> insert into student values('3','李三','345','345@qq.com'); 已创建 1 行。 1234567891011121314
EXPNC_DIR目录创建
SQL> create directory EXPNC_DIR as 'E:\oracletablespace\expnc'; 目录已创建。 --如果是expdp users/123@orcl 这个用户是普通用户,需要读写授权 SQL> grant read,write on directory EXPNC_DIR to users; 授权成功。 12345
执行 数据泵(expdp )导出
cmd> expdp system/password@orcl schemas=xhs dumpfile=expdp_users.dmp DIRECTORY=EXPNC_DIR 1
EXPNC_DIR目录下文件已产生
此时我们再往users用户的student表中再插入两条数据,以此区别两个用户表中的数据
SQL>insert into student values('4','刘四','444','444@qq.com'); 已创建 1 行。 SQL>insert into student values('5','王五','555','555@qq.com'); 已创建 1 行。 1234
使用system管理员创建新的用户users2
执行 数据泵(impdp )导入
cmd>impdp system/password@orcl DIRECTORY=EXPNC_DIR DUMPFILE=expdp_users.dmp REMAP_SCHEMA=users:users2 1
操作成功完成,但是出现了错误【ORA-31684: 对象类型已存在
】这是因为impdp执行的时候会去主动创建一个users2用户,而我们已经提前创建过用户了
我们查看一下导入之后的结果,发现两个用户的student表是不同的
删除复制好的users2,此次导入不提前创建用户来规避错误【ORA-31684: 对象类型已存在
】
SQL> drop TABLESPACE "user_new" INCLUDING CONTENTS AND DATAFILES; 表空间已删除 SQL> drop user users2 cascade; 用户已删除。 1234
执行 数据泵(impdp )导入
cmd>impdp system/password@orcl DIRECTORY=EXPNC_DIR DUMPFILE=expdp_users.dmp REMAP_SCHEMA=users:users2 1
不再提示错误【ORA-31684: 对象类型已存在
】
导入1和导入2的区别:
这里要说一下,
一个数据库可以有多个实例,
一个实例可以有多个用户(不同实例下允许相同名字的用户存在),
一个用户只能分配一个表空间(不同用户下允许相同名字的表存在),
一个表空间可以给 n 个用户使用。
不理解oracle数据库_实例_用户_表空间之间的关系
可以参考
备注:该博客仅为学习交流之用,欢迎大家提出意见和建议,不得用于商业用途,如有转载请标明出处,谢谢合作!