oracle通过数据泵导出导入数据

xiaoxiao2021-02-28  32

1,创建表空间,创建用户的时候指明用户所在的表空间。

create tablespace TEST datafile 'H:/work/database/myoracle/oradata/test/testdb.dbf' size 2048M autoextend on next 100 maxsize unlimited;

执行修改表空间命令如下:alter tablespace TEST rename to TEST1; 注:可连续对多个表空间进行重命名

授权给用户sys表空间test

grant read,write on directory test to sys;

2,创建逻辑目录,此文件夹下面放需要插入的或者导出的数据库(通常数据是从一个服务器到另外一个服务器,所以创建表空间需要两次,可能原来的服务器就有表空间,不需要创建了,可以进行查询) 

create directory test as 'H:\work\database\myoracle\admin\test\dpdump'

查询逻辑目录select * from dba_directories;或者select * from all_directories;

select * from all_directories where directory_name = 'TIAN';   目录文件名要大写,严格区分大小写

 

删除directory用户

drop directory tian; 必须有分号(;)

3,通过impdp导入数据库

impdp casei/casei DIRECTORY=test DUMPFILE=test.dmp SCHEMAS=test;

从不同版本的oracle导入的时候可能需要这两个参数

1.remap_tablespace=test:test

2.remap_schmas=test:test

如果报错ORA-39083: Object type TABLE failed to create with error:ORA-00959: tablespace 'EAS_D_HPRPRD001_STANDARD' does not existFailing sql is:CREATE TABLE "HPRTST140811"."T_CSL_INTERCHECKSOLUTIONENTRY" ("FID" VARCHAR2(44 BYTE) NOT NULL ENABLE, "FTEMGROUP" NVARCHAR2(240), "FTEMNUMBER" NVARCHAR2(240), "FTEMNAME" NVARCHAR2(240), "FDIFFMODE" NVARCHAR2(160), "FITEMID" NVARCHAR2(160),"FITEMNAME" NVARCHAR2(160), "FDATAELEMENT" NVARCHAR2(160), "FONLOANDIRECTION" NVARCHAR2(160), "FCHECKSOLUTIONID" VARCHAR2(44 BYTE) N

ORA-39083: Object type TABLE failed to create with error:

类似这样子的:我这里是tablespace 不存在,可实际上,我是新建了表空间,确实是存在的,以为是没有授权给当前的用户,导致了这个表空间不能使用,通过各种方法,始终没有将这个权限授权给当前用户,拥有者依然是sys,后来我把表空间的名字换了,加了个db,结果就好了。

当然了,大家碰到了这样的问题,不一定是由于我这样的原因,可能是其他的,那就一个一个的实验嘛,总会有机会发现的。

4,通过empdp导出数据库

expdp test/test@orcl DIRECTORY=test_dir  dumpfile=casei.dmp exclude=table:\"in('SYS_ACHIVE')\"(一定注意最后的不需要加“;”,加了这个会报错),如果有双引号,在windows系统中需要加“\”转义字符。

5,exclude与include

包含与不包含的关系。排除不需要的或者只取其中一部分表。

6.关于表空间转移的问题:

  可以通过alter方法,将一个表移动到另外一个表空间中: sql: alter table spaceOne.tablename move tablespace spaceTwo; 解释:以上语句就是把tablename表从spaceOne移动到spaceTwo中。 备注一: 当前的用户必须对spaceTwo、spaceOne都有操作权限才可以。 备注二: 其实如果对两个表空间都有权限的话,可以通过 create spaceTwo.tablename as select * from spaceOne.tablename; 之后再删除spaceOne中tablename表的间接方式也能实现。 sql: alter table spaceOne.tablename move tablespace spaceTwo; 解释:以上语句就是把tablename表从spaceOne移动到spaceTwo中。 备注一: 当前的用户必须对spaceTwo、spaceOne都有操作权限才可以。 备注二: 其实如果对两个表空间都有权限的话,可以通过 create spaceTwo.tablename as select * from spaceOne.tablename; 之后再删除spaceOne中tablename表的间接方式也能实现。

grant read,write on directory tian to system; 

 

 

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-1650291.html

最新回复(0)