参考自: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 解决办法,指定版本一致