导出操作(源库):
- 创建以供存储导出数据库文件的文件夹(源数据库服务器操作)
- root用户下创建数据泵文件目录并赋予权限
创建文件
mkdir <文件目录>
赋与Oracle权限与rwx权限
chown -R oracle:oinstall <文件目录>
chmod -R <rwx> <文件目录>
- 创建数据泵目录(源数据库服务器操作)
- 在DBA账号下创建数据泵并赋权
登陆并创建数据泵
su - oracle
sqlplus / as sysdba
create or replace directory <数据泵名称> as '<数据泵文件目录>';
查看所有数据泵及数据泵文件目录
select * from dba_directories;
赋予该用户的读写权限
grant read, write on directory <数据泵名称> to <Oracle用户>;
- id检查当前用户,在Oracle用户下导出数据文件
cd <数据泵文件目录>
nohup expdp \"/ as sysdba\ " directory=<数据泵名称> dumpfile=<生成的文件名.dmp> logfile=<日志名.log> TABLES=<需要导出的表名> version=<Oracle版本号> &
tail -f nuhup.out
参数说明:
nohup ... & 可后台执行,并输出日志文件
directory 数据泵名称
dumpfile 生成的dmp文件(导出文件)
logfile 数据泵导出日志
TABLES 表名,可以写多个用,隔开
version Oracle版本号
full=y 表示全库导入导出(选填)
cluster=N 告知是集群,个别数据库版本需要加
tail -f nuhup.out 查看输出日志
- 传输到目标库(或将目录通过存储层面直接挂载至目标主机),将接收文件夹权限改为777,无免密访问提示输入密码
scp -r <文件或目录> user@0.0.0.0:<接收目录>
例:scp -r /data root@127.0.0.1:/data
也可以从目标主机去取源库文件
例:scp -rp root@127.0.0.1:/data /data
导入操作(目标库):
- 从目标主机检查传输过来的数据文件权限
chown -R oracle:oinstall <目录>
chmod -R 777 <目录>
- 目标库建立数据泵
su - oracle
sqlplus / as sysdba
create or replace directory <数据泵名称> as '<数据泵文件目录>';
查看所有数据泵及数据泵文件目录
select * from dba_directories;
指定公有,也可以指向某一用户
grant read, write on directory <数据泵名称> to public;
- 导入目标数据库(full=y,表示全库导入导出)
nohup impdp <Oracle用户>/<密码> directory=<数据泵名称> dumpfile=<导入文件名>.dmp TABLE_EXISTS_ACTION=REPLACE logfile=<日志名>.log cluster=N full=y &
也可以使用多进程执行导入,但是可能多进程执行时会报主外键关系错误
nohup impdp <Oracle用户>/<密码> directory=<数据泵名称> dumpfile=<导入文件名>.dmp TABLE_EXISTS_ACTION=REPLACE logfile=<日志名>.log cluster=N parallel=4 full=y &
参数说明:
nohup ... & 可后台执行,并输出日志文件
directory 数据泵名称
dumpfile 生成的dmp文件(导入文件)
logfile 数据泵导出日志
parallel 进程数(应小于cpu核心数)
TABLE_EXISTS_ACTION 指定表存在的处理方式
version Oracle版本号
full=y 表示全库导入导出(选填)
cluster=N 告知是集群,个别数据库版本需要加
tail -f <日志名> 查看输出日志
REMAP_SCHEMA=<源用户>:<目标用户> 指定导入用户
remap_tablespace=<源表空间>:<目标表空间> 指定导入表空间
其他:
- 问题:
ORA-01157: cannot identify/lock data file 1029 - see DBWR trace file
原因:数据库数据字典还记录临时表空间TEMP的信息,但是其对应的数据文件已经不存在
- 解决:
创建一个临时的临时表空间
create temporary tablespace temp00 tempfile '+DATA' size 1G autoextend on;
将数据库临时表空间调整未新建的临时表空间
alter database default temporary tablespace temp00;
删除原有的临时表空间以及其对应的数据文件
drop tablespace temp including contents and datafiles;