Linux服务器下利用expdb/impdb来导入/导出Oracle数据

参考自:https://blog.csdn.net/qq_33204709/article/details/82592197

一.使用Xshell链接Linux

准备工作:首先用Xshell连接到Linux服务器,并切换至oracle账号,

注意'-'后面有个空格
[root@localhost ~]# su - oracle

Last login: Fri Jul 21 13:49:22 CST 2018 on pts/1    (成功切换)

[oracle@localhost ~]$

二.使用数据泵导出Linux服务器上的数据

expdp SEAS05/Neusoft#123@orcl schemas=SEAS05 directory=DATA_PUMP_DIR dumpfile=SEAS05lyx20190103_11.dmp version=11.2.0.1.0 

注意如果是导出本地的数据库不要加@orcl

1.创建逻辑目录

创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等数据库管理员创建。(这个逻辑目录指定了导出文件的保存位置)
此处使用的是数据库默认的逻辑目录DATA_PUMP_DIR,可以使用 select * from dba_directories;查看这个逻辑目录所代表的具体位置
当然也可以自己创建一个逻辑目录,指定他的具体位置:
本例当中使用的是默认的DATA_PUMP_DIR逻辑目录

create directory dpdata1 as '/home/oracle';
expdp SEAS02/Neusoft#123@orcl schemas=SEAS02 directory=dpdata1 dumpfile=SEAS02bzq20190529.dmp version=11.2.0.1.0 

2.查看导出的数据库

select * from dba_directories;
查找出导出时使用的逻辑目录所对应的具体位置(本例当中是DATA_PUMP_DIR),在里面即是导出的数据库。

三.导入数据库到本地数据库

1.创建表空间

Oracle数据库当中用户的概念有点像是mysql当中的数据库的概率,在Oracle当中,每个用户都有一个默认的表空间,也可以修改默认的表空间,

Oracle数据库:是一个文件系统,是物理概念。
实例:在Oracle的数据库中可有多个实例,通常我们只用一个实例
用户:一个实例下有多个用户。
表空间:一个实例下有多个表空间,表空间是逻辑概念,一个表空间对应着一个或者多个物理存储文件(.dbf,.ora)
用户和表空间的关系:一个用户有一个默认的表空间,一个表空间可以为多个用户作为默认表空间,用户和用户之间的数据是隔离,数据不会混。
********************************************************************************************************

可以通过
select * from  dba_data_files;
查询出表空间对应文件的位置。

*******************************************************************************************************
--创建表空间  
create tablespace seas_data datafile 'G:\ORACLEDATA\DPDATA\SEAS_DATA' size 100M  autoextend on;

2.创建用户指定表空间,赋权限

--2.建用户  
create user SEAS02 identified by Neusoft#123 default tablespace seas_data;  
  
--3.赋权(可以对其他用户下的表进行操作)  
grant connect,resource to SEAS02;  
grant create any sequence to SEAS02;  
grant create any table to SEAS02;  
grant delete any table to SEAS02;  
grant insert any table to SEAS02;  
grant select any table to SEAS02;  
grant unlimited tablespace to SEAS02;  
grant execute any procedure to SEAS02;  
grant update any table to SEAS02;  
grant create any view to SEAS02;  
grant dba to SEAS02;

3.查看当前要导入的用户的表空间和原先导出用户的表空间是否一致

在导入导出时要注意的是,导入导出的表空间一定要一!!!,如果表空间不一致可以使用一下的方法进行操作

--查看当前用户的表空间
select username,default_tablespace from user_users;
--方法一:更改当前用户的表空间
alter tablespace USERS rename to seas_data;
--方法二:在导入数据库的时候,末尾加上remap_tablespace=sourse:target
sourse:导出dmp文件的表空间
target:导入数据的表空间

4.执行导入语句

impdp SEAS02/Neusoft#123 directory=dpdata1 dumpfile=SEAS02bzq20190529.dmp
此处 directory是我们在本地创建的逻辑目录,dumpfile是逻辑目录所在具体目录的位置(里面存放的是要导入的数据)

5.导入表失败

如果导入失败,则必须要删除用户名和用户下的数据后再重新导入,记得后面要加cascade,SQL如下:

drop user SEAS02 cascade;

四.expdb/impdb需要注意的事项

1.导入导出的表空间用户要相同

impdp命令只可导入expdp导出的dmp文件。expdp导出的时候,需要创建 DIRECTORY,如不创建也可以使用原有的

导出什么表空间,导入也要什么表空间。

导出什么用户,导入也要什么用户。

2.在导出时指定版本和要导入的数据库版本一致

查看版本:
show parameter compatible;

报错:ORA-39001,ORA-39142 解决办法,指定版本一致


捕获2.PNG

3.更多错误解决方案:https://www.linuxidc.com/Linux/2013-09/90592.htm

你可能感兴趣的:(Linux服务器下利用expdb/impdb来导入/导出Oracle数据)