Oracle数据库迁移(expdp/impdp工具)
Oracle数据库利用数据泵技术进行数据库迁移、备份。
数据泵技术是Oracle Database 10g 中的新技术,它比原来导入/导出(imp,exp)技术快15-45倍。速度的提升源于使用了并行技术来读写导出转储文件。数据泵的导入/导出(impdp,expdp)模式主要包括三种:
1. 按表导入/导出
2. 按用户导入/导出
3. 全库导入/导出
本文实验环境的源数据库是oracle 12c 安装在操作系统win 10,目的数据库是oracle 11g 部署在rac集群中操作系统为redhat 6.9 ,分别按用户和按全库导入/导出,从开发环境win 10中将数据库迁移到模拟生产环境rac集群中。
数据库迁移过程记录如下:
全库导出/导入操作记录
一、在需要导出的数据库执行expdp操作
1. 先在资源管理器创建dump_dir目录
dump目录位置没有限制,路径中最好不要有中文名字(以免不必要的问题)。
2. 为Oracle数据库创建dump_dir目录并授权
sqlplus中执行如下命令:
创建数据导出目录dump_dir,位于C:\app\HP\dump_dir文件夹。
create directory dump_dir as ‘C:\app\HP\dump_dir’;
查询目录创建是否成功。
select owner,directory_name,directory_path from dba_directories;
赋予用户对dump_dir目录的读写权限。
grant read,write on directory dump_dir to 用户名;
赋予用户全库导出的权限。
grant datapump_exp_full_database to 用户名;
3. 在cmd命令行下执行指令
expdp 用户名/密码@orcl directory=dump_dir dumpfile=full.dmp full=y version=11.2.0.4.0
dumpfile 参数为导出的数据文件文件名,可任意设定。
full=y 参数表示全库导出。
version 参数用于限定需要导入数据的oracle数据库版本,若导出导入的数据库版本一致,该参数可以省略。
导出成功后可以在dump_dir目录下看到FULL.DMP文件和日志文件export.log。
二、在需要导入的数据库执行impdp操作
1. 在两个rac节点分别创建dump_dir目录
cd /u01/app/oracle
mkdir -p dump_dir
chown -R oracle:oinstall /u01/app/oracle/dump_dir
chmod -R 775 /u01/app/oracle/dump_dir
2. 将FULL.DMP文件分别上传到两个节点的dump_dir目录下
3. 使用dbca工具重新建库,关闭归档模式
4. drop清空asm磁盘组DATA和FRA后再重新创建
5. 为Oracle数据库创建dump_dir目录并授权
在其中一个rac节点中sqlplus执行如下命令:
create directory dump_dir as ‘/u01/app/oracle/dump_dir’;
查询目录是否创建成功。
select owner,directory_name,directory_path from dba_directories;
赋予用户对dump_dir目录的读写权限。
grant read,write on directory dump_dir to 用户名;
赋予用户全库导入的权限。
grant datapump_imp_full_database to 用户名;
6. 在command环境下执行指令:
impdp 用户名/密码 directory=dump_dir dumpfile=FULL.DMP full=y
remap_datafile= "C:\APP\HP\PRODUCT\12.1.0\DBHOME_2\DATABASE\X5DOC.DBF":"+DATA/orcl/datafile/X5DOC_DATA", "C:\APP\HP\PRODUCT\12.1.0\DBHOME_2\DATABASE\X5SYS.DBF":"+DATA/orcl/datafile/X5SYS_DATA"
remap_datafile 参数用于重新映射表空间的datafile的位置,一般在全库导出/导入时使用。本实验源数据库安装在win,目的数据库安装在linux,文件路径命名方式不同,需要该参数来进行映射。具体说明详见官方文档。
7. 导入完成后可通过查询表的行数方式来测试是否导入成功
三、遇到的报错及处理
ORA-39083
ORA-01917 用户不存在
尝试手动添加用户后再重新impdp导入,导入成功。
ORA-31684 对象已经存在
该报错不需要处理,没有影响本实验中数据库的导入。
按用户导出/导入操作记录
一、在需要导出的数据库执行expdp操作
1. 先在资源管理器创建dump_dir目录
dump目录位置没有限制,路径中最好不要有中文名字(以免不必要的问题)。
2. 查找要导出的用户名下的表空间
sqlplus中执行如下命令:
select distinct tablespace_name from dba_segments where owner='用户名';
3. 为Oracle数据库创建dump_dir目录并授权
sqlplus中执行如下命令:
创建数据导出目录dump_dir,位于C:\app\HP\dump_dir文件夹。
create directory dump_dir as ‘C:\app\HP\dump_dir’;
查询目录创建是否成功。
select owner,directory_name,directory_path from dba_directories;
赋予用户对dump_dir目录的读写权限。
grant read,write on directory dump_dir to 用户名;
4. 在cmd命令行下执行命令:
expdp 用户名/密码@orcl directory=dump_dir dumpfile=xx.dmp schemas=用户名 version=11.2.0.4.0
dumpfile 参数为导出的数据文件文件名,可任意设定。
version 参数用于限定需要导入数据的oracle数据库版本,若导出导入的数据库版本一致,该参数可以省略。
schema 参数为要导出的schema,设置为要导出的用户名。
导出成功后可以在dump_dir目录下看到XX.DMP文件和日志文件export.log。
二、在需要导入的数据库执行impdp操作
1. 在两个rac节点分别创建dump_dir目录
cd /u01/app/oracle
mkdir -p dump_dir
chown -R oracle:oinstall /u01/app/oracle/dump_dir
chmod -R 775 /u01/app/oracle/dump_dir
2. 将XX.DMP文件分别上传到两个节点的dump_dir目录下
3. 使用dbca工具重新建库,关闭归档模式
4. drop清空asm磁盘组DATA和FRA后再重新创建
5. 在目的数据库创建用户的表空间:
查询表空间的文件名命名方式。
select file_name from dba_data_files;
在目的数据库上创建源数据库上查出的表空间,名字与源数据库的表空间名一致,表空间文件的存储路径为asm磁盘组+DATA/ORCL/DATAFILE/xxx
create tablespace 表空间名 datafile '表空间文件路径' size 32M autoextend on next 32M maxsize unlimited;
6. 创建用户:
create user 用户名 identified by 密码 default tablespace 表空间名 temporary tablespace temp;
为用户授权。
grant dba to 用户名;
grant connect,resource to 用户名;
7. 为Oracle数据库创建dump_dir目录并授权
在其中一个rac节点中sqlplus执行如下命令:
create directory dump_dir as ‘/u01/app/oracle/dump_dir’;
查询目录是否创建成功。
select owner,directory_name,directory_path from dba_directories;
赋予用户对dump_dir目录的读写权限。
grant read,write on directory dump_dir to 用户名;
8. 在command环境下执行指令:
impdp 用户名/密码 directory=dump_dir dumpfile=XX.DMP SCHEMAS=用户名
9. 导入完成后可通过查询表的行数方式来测试是否导入成功
三、 遇到的报错及处理
ORA-39002;ORA-39070;ORA-29283;ORA-06512;ORA-29283
dump_dir目录没有创建成功,检查资源管理器中是否有该目录,在oracle数据库中是否配置成功。
ORA-39001 ORA-39000 ORA-31640 ORA-27037
文件名称大小写问题.dmp文件上传到linux后会自动改为大写字母,需要注意。
更多推荐
所有评论(0)