天天看点

Oracle数据库迁移(expdp与impdp)

1、 原数据库备份,备份为dmp文件

1.1、sqlplus以dba 方式进入,创建逻辑目录,该命令不会再硬盘中创建真正的目录,使用dba账户创建:(需要在D盘先将目录建好)

create or replace directory dmp as ‘d:/dmp’

1.2查看是否正确创建(硬盘中也要有这个目录,Oracle并不关心该目录是否真的存在,如果不存在会报错):

select * from dba_directories;

1.3目录创建好之后,就可以把读写权限授予特定用户

grant read,write on directory dmp to mesn;

1.4 把expdp和impdp的权限授予特定用户

grant imp_full_database,exp_full_database to mesn;

grant connect,resource,dba to mesn;

1.5 expdp备份原数据库(Window命令行下)

expdp mesn/[email protected] schemas=mesn dumpfile=mes.dmp version=12.2.0.1.0 directory=dmp tables=CBO%

说明:

A、 expdp命令需要在window命令行下,而不是sqlplus命令行下;

B、 可以通过version指定到导出的数据库版本,比如原数据库为12.2.0.1.0版本导入到11.2.0.1.0数据库中;

C、 通过schemas 可以限定需要导出哪个用户的表;

D、 通过tables可以限定需要导出哪些表,多个表之间用逗号隔开,也支持通配符的形式;

E、 语句后边不带分号

2、 需要导入数据库,将dmp文件导入到数据库

2.1相同用户导入

如果想往同名用户中导入数据,比如想要做数据的更新,需要删除原来的用户操作

2.1.1删除原来mesn账户及账户下面的表

drop user tophrs cascade;

2.1.2重新创建mesn账户(与原来账户使用同样的表空间,没有表空间需要进行创建),并分配权限

查看临时表空间SQL:(该数据为执行时需要的,非必须)

select * from database_properties where property_name=’DEFAULT_TEMP_TABLESPACE’;

查看表空间

SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size

FROM dba_tablespaces t, dba_data_files d

WHERE t.tablespace_name = d.tablespace_name

GROUP BY t.tablespace_name;

create user tophrs identified by hrs123456 default tablespace USERS temporary tablespace TEMP;

2.2进行数据库的导入

2.2.1-2.2.4同1.1-1.4操作

2.2.5 impdp命令,进行数据库导入(Window命令下)

impdp tophrs/hrs123456 dumpfile=HRSBACK.dmp directory=dmp table_exists_action=append REMAP_SCHEMA=TopHrs:tophrs remap_tablespace=TOPHRS:USERS

说明:

A. impdp命令需要在window命令行下,而不是在sqlplus命令行下;

B. 语句后边不带分号

C.

D. table_exists_action

{skip 是如果已

存在表,则跳过并处理下一个对象;

append是为表增加数据;

truncate是截断表,然后为其增加新数据;

replace是删除已存在表,重新建表并追加数据}

C、通过remap_schema来指定原数据库的用户,与导入数据库的用户

D、通过remap_tablespace来指定原数据库的表空间,与导入数据库的表空间

E、expdp、impdp可以支持空表,可以屏蔽字符集的差异自动进行字符集转换