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/mesn123@mes 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可以支持空表,可以屏蔽字符集的差异自动进行字符集转换