生产环境:
源数据库:Windows Server + Oracle 11.2.0.1

目标数据库:SunOS + Oracle 11.2.0.3

1.确认迁移需求:源数据库cssf 用户所有表和数据迁移到目标数据库新建用户cssf_gt下,表空间为dbs_cssf_gt。
网络情况:数据库之间网络不通畅,不适合dblink应用场景。
数据量:小数据量级别,10G以下。
数据库字符集:两库相同。
采用方案:exp/imp一次迁移,导出的中间文件压缩后传输到目标端。
 
2.查看源数据库相关信息:
2.1确认数据库字符集
  1. SQL> select userenv('language') from dual;
  2.  
  3. USERENV('LANGUAGE')
  4. ----------------------------------------------------
  5. SIMPLIFIED CHINESE_CHINA.ZHS16GBK
2.2确认需要迁移的表数量
  1. SQL> show user
  2. User is "cssf"
  3.  
  4. SQL> select count(*) from user_tables;
  5.  
  6. COUNT(*)
  7. ----------
  8. 141
2.3确认当前表都存储在哪些表空间
  1. SQL> select distinct tablespace_name from user_tables;
  2.  
  3. TABLESPACE_NAME
  4. ------------------------------
  5. DBS_CSSF
  6. DBS_CSSF_HUB
3.迁移
3.1源数据库局域网内11.2.0.1客户端导出(导出文件压缩后传到目标数据库所在地局域网内):
  1. C:\Users\Alfred>exp cssf/cssf@192.168.1.10/bj owner=cssf file='E:\jingyu\css
  2. f.dmp' log='E:\jingyu\cssf.log' direct=y
 
3.2目标数据库建立表空间,创建用户并赋权
  1. create tablespace DBS_CSSF_GT datafile '/home/oradata/JYZHAO/datafile/DBS_CSSF_GT.dbf' size 30G;
  2. create user cssf_gt identified by cssf_gt default tablespace DBS_CSSF_GT;
  3. grant dba to cssf_gt;
 
3.3目标数据库所在局域网内的web服务器上导入文件
  1. C:\Users\Administrator>imp cssf_gt/cssf_gt@192.168.10.10/sh file='D:\jingyu
  2. \cssf.dmp' log='D:\jingyu\impcssf.log' full=y
  3.  
  4. Import: Release 11.2.0.1. - Production on 星期四 5 ::
  5.  
  6. Copyright (c) , , Oracle and/or its affiliates. All rights reserved.
  7.  
  8. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3. - 64bit Produc
  9. tion
  10. With the Partitioning, OLAP, Data Mining and Real Application Testing options
  11.  
  12. 经由常规路径由 EXPORT:V11.02.00 创建的导出文件
  13.  
  14. 警告: 这些对象由 CSSF 导出, 而不是当前用户
  15.  
  16. 已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
  17. . 正在将 CSSF 的对象导入到 CSSF_GT
  18. . . 正在导入表 "CFG_DISTRICT"导入了
  19. ...
  20. . . 正在导入表 "WF_H_WORKITEM"导入了
  21. 即将启用约束条件...
  22. 成功终止导入, 没有出现警告。
  23.  
  24. C:\Users\Administrator>
 
3.4检查目标数据库导入的表信息
  1. select distinct tablespace_name from user_tables;
    select table_name, tablespace_name from user_tables;
发现虽然上面显示已经成功终止导入,且创建用户时已经指定默认表空间为DBS_CSSF_GT,但由于目标数据库本来有DBS_CSSF表空间,导致源数据库此表空间的表在目标数据库的表空间也是DBS_CSSF,而不是期望的DBS_CSSF_GT,不符合本次迁移要求。
 
4.解决思路:
4.1可以直接alter table修改表的表空间归属
  1. select 'alter table '||table_name||' move tablespace dbs_cssf_gt;' from user_tables;
查询得到的sql复制执行即可。
move操作后一定要记得要重建表的索引。
  1. select 'alter index '||index_name||' rebuild tablespace dbs_cssf_gt online;' from user_indexes where status = 'UNUSABLE' order by index_name;

这里move 遇到了一些问题,涉及篇幅较多,后期会单独发布一篇随笔。

4.2关注imp其他参数
没有找到适合的参数。 
 
5.延伸:
在我的测试环境中(RHEL 6.4 + oracle 11.2.0.3),没有DBS_CSSF表空间的情况下,同样步骤用3.3的导入语句导入,大部分表会自动将表空间归属变更为DBS_CSSF_GT,但过程中部分表导入出现报错IMP-00017,IMP-00003,ORA-00959:
  1. . . 正在导入表 "CSSF_INFC_SH_SUSPEND"导入了
  2. IMP-: 由于 ORACLE 错误 , 以下语句失败:
  3. "CREATE TABLE "CSSF_INTERFACE_ERROR_LOG" ("LOG_ID" VARCHAR2(40) NOT NULL ENA"
  4. "BLE, "FAULT_ID" VARCHAR2(50), "WF_SN" VARCHAR2(50), "CITY_ID" VARCHAR2(50),"
  5. " "ACCEPT_NUM" VARCHAR2(50), "ERROR_MSG" VARCHAR2(500), "EXCEPTION_CONTENT" "
  6. "CLOB, "DISPATCH_CONTENT" CLOB, "CREATETIME" DATE, "CURRENTTASKID" VARCHAR2("
  7. "50), "CURRENTNEXTID" VARCHAR2(50), "INTERFACETYPE" VARCHAR2(20), "ISREPAIR""
  8. " VARCHAR2(2), "REPAIRTIME" DATE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS"
  9. " 255 STORAGE(INITIAL 65536 NEXT 8192 MINEXTENTS 1 FREELISTS 1 FREELIST GROU"
  10. "PS 1 BUFFER_POOL DEFAULT) TABLESPACE "DBS_CSSF" LOGGING NOCOMPRESS LOB ("EX"
  11. "CEPTION_CONTENT") STORE AS BASICFILE (TABLESPACE "DBS_CSSF" ENABLE STORAGE"
  12. " IN ROW CHUNK 8192 RETENTION NOCACHE LOGGING STORAGE(INITIAL 65536 NEXT 1"
  13. "048576 MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)) LOB"
  14. " ("DISPATCH_CONTENT") STORE AS BASICFILE (TABLESPACE "DBS_CSSF" ENABLE STO"
  15. "RAGE IN ROW CHUNK 8192 RETENTION NOCACHE LOGGING STORAGE(INITIAL 65536 NE"
  16. "XT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))"
  17. IMP-: 遇到 ORACLE 错误
  18. ORA-: 表空间 'DBS_CSSF' 不存在
  19. . . 正在导入表 "CSSF_JCS_BHSYNC_RECORD"导入了
这是因为这些表包含了lob字段,解决方案有以下几种:
a.导入后根据日志将这些表单独建立,重新导入。
b.建立好所有需要的表空间,重新导入,导入后参照4.1做move操作,然后删掉新建的无用表空间。
 
6.总结:
EXP/IMP迁移,如果迁移的表在源数据库和目标数据库表空间不一样,需要注意这些表是否包含lob字段,如果有,先在目标数据库创建这些表,再执行导入操作。
同样的,对于分区表、分区索引等也是这样。
如果采用EXPDP/IMPDP迁移,则可以利用remap_tablespace参数轻松解决上述问题。
 
------------------------------------------------------------------------------------
免责声明:为保证商业安全,本案例涉及的相关IP地址和名称已做特殊处理。

EXP/IMP迁移案例,IMP遭遇导入表的表空间归属问题的更多相关文章

  1. Laravel学习笔记(五)数据库 数据库迁移案例2——创建数据结构,数据表,修改数据结构

    默认假设 所有的列在定义的时候都有默认的假设,你可以根据需要重写. Laravel假定每个表都有一个数值型的主键(通常命名为”id”),确保新加入的每一行都是唯一的.Laravel只有在每个表都有数值 ...

  2. linux 下使用exp/imp 或者expdp/impdp导出导入oracle数据表数据

    一.环境配置 1.执行环境: exp/imp可以在客户端执行也可以在服务器端执行,在客户端执行需要先安装有oracle的客户端,如果是linux系统,就是以oracle用户登录,在控制台下执行.建议在 ...

  3. exp和imp导入导出时表空间问题【未完】

    准备工作 第一步: 创建教师和学生用户 教师用户/密码 TEACHER/t123456 学生用户/密码 STUDENT/s123456 参考链接 http://www.cnblogs.com/what ...

  4. (转)oracle使用expdp、impdp和exp、imp导入导出表及表结构

    使用expdp.impdp和exp.imp时应该注重的事项: 1.exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. 2.expdp和impdp是服务端的工具程序,他们只能在 ...

  5. exp/imp三种模式——完全、用户、表

    ORACLE数据库有两类备份方法.第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库:第二类备份方式为逻辑 ...

  6. mysql 案例 ~ 表空间迁移数据与数据导入

    一  简介:mysql5.6+的表空间传输二 目的:复制数据到另一个表三 步骤   1 create table b like a ->创建一个空表   2 alter table b disc ...

  7. 【Oracle 数据迁移】环境oracle 11gR2,exp无法导出空表的表结构【转载】

    今天做数据迁移,但是发现有些空表无法exp,后来找到问题所在. [原文]:http://www.cnblogs.com/wenlong/p/3684230.html 11GR2中有个新特性,当表无数据 ...

  8. 【EXP】导出数据库dmp文件,只有几张表有数据,剩下的所有表只有表结构没有数据

    导出一个dmp,指定的表中有数据,其他的表只有表结构, 有数据的表只有几张,分别是A,B,C三张表,剩下的表都没有数据 思路: 导出一个111.dmp,所有的表都只是表结构 将111.dmp导入到新创 ...

  9. PLSQL 导入表到Oracle------》从一个表空间导入到其它表空间

        在用PLSQL导入.dmp文件到Oracle时出现的问题如下: Import started on 2015/11/18 10:42:44E:\oracle\product\10.2.0\db ...

随机推荐

  1. HDU--洗衣服

    洗衣服 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  2. jQuery中事件与动画的总结

       1.加载DOM     1.1.window事件 window.onload=function(){}.... 时机:其他资源都加载完毕后,再执行   $(function(){}) ……:只是 ...

  3. pyserial 16进制显示与发送

    pyserial 16进制显示与发送 http://www.centoscn.com/python/2013/0817/1320.html 十六进制显示的实质是把接收到的字符诸葛转换成其对应的ASCI ...

  4. Hbuilder开发HTML5 APP之向导页制作

    研究了下,向导页的制作还是比较简单的,主要使用的是mui控件中的”图片轮播“组件,组件的标签写法手册中有,中间发现个有趣的东西,如果要作全屏,可以加个样式mui-fullscreen 滑动图片时会自动 ...

  5. 尝试解决在构造函数中同步调用Dns.GetHostAddressesAsync()引起的线程死锁

    (最终采用的是方法4) 问题详情见:.NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长 看看在 Linux 与 Windows 上发生线程死锁的后果. Linux: Microsoft ...

  6. Python黑帽编程2.7 异常处理

    Python黑帽编程2.7 异常处理 异常是个很宽泛的概念,如果程序没有按预想的执行,都可以说是异常了.遇到一些特殊情况没处理会引发异常,比如读文件的时候文件不存在,网络连接超时.程序本身的错误也可以 ...

  7. MySQL 启动原理剖析

    200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要从查看MySQL的启动命令的代码来详细了解MySQL的启动过程,内容 ...

  8. SQL Server 查询分解

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/查询步骤 概述 查询步骤是很基础也挺重要的一部分,但是我还是在周围发现有些人虽然会语法,但是对于其中的步骤不是很清楚,这里就来分解 ...

  9. 干货!表达式树解析"框架"(3)

    最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 这应该是年前最后一篇了,接下来的时间就要陪陪老婆孩子了 关于表达 ...

  10. 可扩容分布式session方案

    分布式session有以下几种方案: 1. 基于nfs(net filesystem)的session共享 将共享服务器目录mount各服务器的本地session目录,session读写受共享服务器i ...