如今有一个场景需求,须要把在一台服务器上某个用户的对象所有迁移到另外一台服务器。有如下几个状况:html
一、原用户下的表分属于不一样的表空间(因为维护人员在过程当中修改过用户的默认表空间)数据库
二、原用户的数据库量过大,导出慢。服务器
三、迁出、迁入的oracle版本为11goracle
针对以上状况,迁移方法步骤以下:ide
一、因为用户下的数据库过大,故建议使用expdp方式来进行导出,须要先去创建一个DIRECTORY,用于放置导出的文件位置工具
二、因为是要导出某个用户下的所有对象,语句写法参考以下:post
expdp PNC_GAS/PNC_GAS@ORCL schemas=PNC_GAS dumpfile=ncgas20180116.dmp DIRECTORY=dbbackup
三、因为被导出的用户下的表可能分属于不一样表空间,故须要先查询原用户的表到底分属哪些表空间,查询语法以下:网站
select distinct tablespace_name 所使用表空间 from user_tables;
须要注意的是,以上语句是须要先登陆到原用户后再去执行命令查询url
四、而后在被迁入的服务器上创建一个新用户,创建一个新的表空间并指定为新用户的默认表空间(这里新建的用户名能够和原用户保持一致)spa
五、新定义的表空间须要注意被导入的数据占据的空间大小,最好留足足够空间。如下命令为新建一个最大为32G,当数据增长时默认以10m的大小扩张
CREATE TABLESPACE GAS DATAFILE 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\GAS.DBF' SIZE 32768M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED LOGGING ONLINE EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON;
建议使用toad for oracle工具去建用户和表空间,可视化操做很方便
六、创建完新用户和新表空间后,须要执行导入命令。如下命令支持将同一个用户不一样表空间的数据导入至同一用户的同一表空间
IMPDP GAS/GAS@ORCL DIRECTORY=dbbackup schemas=GAS dumpfile=YAGAS20180116.dmp REMAP_TABLESPACE=USERS:YA_GAS_WEB REMAP_TABLESPACE=SYSTEM:YA_GAS_WEB REMAP_TABLESPACE=GAS:YA_GAS_WEB REMAP_TABLESPACE=YAN_GAS:YA_GAS_WEB
以上命令把原用户下4个表空间下的对象所有导入至新用户的同一表空间下
七、最后,须要验证新用户下的这个表空间下的表及数量是否与原用户下不一样表空间的表及数量和相同。查询各个表空间的表语句以下:
select table_name 表名 ,tablespace_name 所使用表空间 from user_tables where tablespace_name='您要查询的表空间名'
须要注意的是:该命令也是在登陆了所要查询的用户以后去执行的。查询的是当前登陆用户的某个表空间下的表信息
我在经历了以上步骤后,验证了新旧用户及表空间下的表及其余对象,发现数据未出现丢失,经实际验证以上步骤操做有效!
补充:以上步骤是基于对数据导出及导入的理解探索式获得结果,过程当中遇到了一些错误,在这里作下分享:
一、导入命令时,默认导入表的表空间大小不足,会报如下错误,当把表空间改大之后命令会继续执行起走。
如下错误是我在没有指定命名空间的状况下出现的,可参考语句:
expdp PNC_GAS/PNC_GAS@ORCL schemas=PNC_GAS dumpfile=ncgas20180116.dmp DIRECTORY=dbbackup
二、expd命令默认会把原用户与新用户相同表空间的对象导入过去:意思是在不特殊指定表空间状况下,参考如下语句
IMPDP YA_ZC/ya_zc@ORCL DIRECTORY=dbbackup schemas=YA_ZC dumpfile=yazc201801162144.dmp REMAP_TABLESPACE=GAS:YAN_GAS
该语句把原用户表空间为GAS下的对象迁移到新用户的YAN_GAS表空间下;
该语句同时会把原用户自己在表空间名为YAN_GAS下的对象自动导入到新用户下的YAN_GAS表空间中;执行了以上命令后,再去执行如下命令
IMPDP YA_ZC/ya_zc@ORCL DIRECTORY=dbbackup schemas=YA_ZC dumpfile=yazc201801162144.dmp REMAP_TABLESPACE=YAN_GAS:YAN_GAS
会出现如下截图的警告:
这就是由于上一个命令已经把原表空间YAN_GAS下的对象已迁移到了新表空间YAN_GAS之下了。