EXP/IMP迁移案例,IMP遭遇导入表的表空间归属问题

生产环境:

源数据库: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确认数据库字符集


SQL> select userenv(‘language‘) from dual;

USERENV(‘LANGUAGE‘)
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

2.2确认需要迁移的表数量


SQL> show user
User is "cssf"

SQL> select count(*) from user_tables;

COUNT(*)
----------
141

2.3确认当前表都存储在哪些表空间


SQL> select distinct tablespace_name from user_tables;

TABLESPACE_NAME
------------------------------
DBS_CSSF
DBS_CSSF_HUB

3.迁移

3.1源数据库局域网内11.2.0.1客户端导出(导出文件压缩后传到目标数据库所在地局域网内):


C:\Users\Alfred>exp cssf/[email protected]192.168.1.10/bj owner=cssf file=‘E:\jingyu\css
f.dmp‘ log=‘E:\jingyu\cssf.log‘ direct=y

3.2目标数据库建立表空间,创建用户并赋权


create tablespace DBS_CSSF_GT datafile ‘/home/oradata/JYZHAO/datafile/DBS_CSSF_GT.dbf‘ size 30G;
create user cssf_gt identified by cssf_gt default tablespace DBS_CSSF_GT;
grant dba to cssf_gt;

3.3目标数据库所在局域网内的web服务器上导入文件


C:\Users\Administrator>imp cssf_gt/[email protected]192.168.10.10/sh file=‘D:\jingyu
\cssf.dmp‘ log=‘D:\jingyu\impcssf.log‘ full=y

Import: Release 11.2.0.1.0 - Production on 星期四 5月 22 17:45:30 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Produc
tion
With the Partitioning, OLAP, Data Mining and Real Application Testing options

经由常规路径由 EXPORT:V11.02.00 创建的导出文件

警告: 这些对象由 CSSF 导出, 而不是当前用户

已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 CSSF 的对象导入到 CSSF_GT
. . 正在导入表 "CFG_DISTRICT"导入了 189 行
...
. . 正在导入表 "WF_H_WORKITEM"导入了 0 行
即将启用约束条件...
成功终止导入, 没有出现警告。

C:\Users\Administrator>

3.4检查目标数据库导入的表信息


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修改表的表空间归属


select ‘alter table ‘||table_name||‘ move tablespace dbs_cssf_gt;‘ from user_tables;

查询得到的sql复制执行即可。

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:


. . 正在导入表          "CSSF_INFC_SH_SUSPEND"导入了           0 行
IMP-00017: 由于 ORACLE 错误 959, 以下语句失败:
"CREATE TABLE "CSSF_INTERFACE_ERROR_LOG" ("LOG_ID" VARCHAR2(40) NOT NULL ENA"
"BLE, "FAULT_ID" VARCHAR2(50), "WF_SN" VARCHAR2(50), "CITY_ID" VARCHAR2(50),"
" "ACCEPT_NUM" VARCHAR2(50), "ERROR_MSG" VARCHAR2(500), "EXCEPTION_CONTENT" "
"CLOB, "DISPATCH_CONTENT" CLOB, "CREATETIME" DATE, "CURRENTTASKID" VARCHAR2("
"50), "CURRENTNEXTID" VARCHAR2(50), "INTERFACETYPE" VARCHAR2(20), "ISREPAIR""
" VARCHAR2(2), "REPAIRTIME" DATE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS"
" 255 STORAGE(INITIAL 65536 NEXT 8192 MINEXTENTS 1 FREELISTS 1 FREELIST GROU"
"PS 1 BUFFER_POOL DEFAULT) TABLESPACE "DBS_CSSF" LOGGING NOCOMPRESS LOB ("EX"
"CEPTION_CONTENT") STORE AS BASICFILE (TABLESPACE "DBS_CSSF" ENABLE STORAGE"
" IN ROW CHUNK 8192 RETENTION NOCACHE LOGGING STORAGE(INITIAL 65536 NEXT 1"
"048576 MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)) LOB"
" ("DISPATCH_CONTENT") STORE AS BASICFILE (TABLESPACE "DBS_CSSF" ENABLE STO"
"RAGE IN ROW CHUNK 8192 RETENTION NOCACHE LOGGING STORAGE(INITIAL 65536 NE"
"XT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))"
IMP-00003: 遇到 ORACLE 错误 959
ORA-00959: 表空间 ‘DBS_CSSF‘ 不存在
. . 正在导入表 "CSSF_JCS_BHSYNC_RECORD"导入了 4 行

这是因为这些表包含了clob字段,解决方案有以下几种:

a.导入后根据日志将这些表单独建立

b.建立好所有需要的表空间,重新导入,导入后参照4.1做move操作,然后删掉新建的无用表空间。

6.总结:

------------------------------------------------------------------------------------

免责声明:为保证商业安全,本案例涉及的相关IP地址和名称已做特殊处理。

时间: 2024-11-13 09:43:06

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

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

一.环境配置 1.执行环境: exp/imp可以在客户端执行也可以在服务器端执行,在客户端执行需要先安装有oracle的客户端,如果是linux系统,就是以oracle用户登录,在控制台下执行.建议在服务器端执行exp,备份速度快. 2.如果没有配置oracle的exp/imp命令的环境变量,则进入到oracle的bin目录: # cd /opt/oracle_11/app/oracle/product/11.2.0/dbhome_1/bin 3.配置临时环境变量: # export ORACL

EXP/IMP迁移数据

迁移数据 注意事项: Log= 加这个是为了看有没有导入成功.这个导入导出是会100%丢失数据的.这个只能当迁移,不能做为备份. Buffer=把这个放大,一般10M,这个是为了提速的 Rows=n 不导数据 字体集NLS 这个是必须要设置的. 数据坏了显示方式:??列宽度不够,这个是立刻报错的.我就知道迁移失败了 Select * from v$nls_database_parameters; Exp  system/sys  file=/oracle/qyl.dmp  owner=qyl  

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

exp/imp三种模式——完全.用户.表    原文地址http://www.2cto.com/database/201305/214019.html ORACLE数据库有两类备份方法.第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库:第二类备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备. 数据库逻辑备份方法 ORACLE数据库

几个数据库的小案例(一):将文本文件中的信息导入数据库的表中

从文本文件添加到数据库用户表的记录(有两个文件:frmMain.cs  SqlHelper.cs  ) //FrmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo

【ORACLE】 11g 数据库表导出再导入10g 时空表不能导出的问题

问题:ORACLE 11g 将某用户自带表用 EXP 命令导出再IMP导入 10g 时 发现空表不能到导出 原因:11g 开始建表时,默认不分配 segment ,以节省空间,当表插入第一条数据时,再分配 segment 解决方法3个途径:1:向空白插入一条数据,再删除掉,就分配空间了(空表比较少).2:修改系统参数alter system set deferred_segment_create=false;   (对以后新增的表系统会分配 segment),重启数据库.3:批量对现有的空表分配

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

    在用PLSQL导入.dmp文件到Oracle时出现的问题如下: Import started on 2015/11/18 10:42:44E:\oracle\product\10.2.0\db_1\bin\imp.exe log=C:\Users\lrb\AppData\Local\Temp\plsimp.log file=E:\Work\DOC\2015-0~1\2015-09-11.dmp userid=LRB/[email protected] buffer=30720 commi

linux下导入oracle数据表

提前说明:这个是默认oracle已经安装好切数据库默认表空间已经创建好.之后将数据表dmp文件直接导入到默认表空间里(默认表空间不用再指定,因为创建数据库时已经指定默认表空间) linux命令如下: [[email protected] ~]$ imp test/test file=/home/oracle/tm_bus_passenger_updown.dmp ignore=y full=y //用户名和密码已经暗含默认表空间 文档结构如下 原文地址:https://www.cnblogs.c

mysql数据库存储过程数据迁移案例与比较

cursor 与 insert ...select 对比: cursor:安全,不会造成死锁,可以在服务运行阶段跑,比较稳定. insert...select :速度快,但是可能造成死锁,相比cursor能够成倍提升,在服务停止的情况下迁移,速度快 数据迁移案例: 首先数据的迁移绝对不是一朝一夕能够快速迁移完成的 ,如果可以很快完成的 dump便可以搞定,没必要大费周折了. 既然不是一朝一夕能完成的,那么有关键的日志记录表能够良好的反应数据迁移的过程 迁移日志表脚本: DROP TABLE IF

mysql中把一个表的数据批量导入另一个表中(不同情况)

mysql中把一个表的数据批量导入另一个表中 不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL某个表的数据批量导入到另一个表的情况,甚至有时还需要指定导入字段. 本文就将以MySQL数据库为例,介绍如何通过SQL命令行将某个表的所有数据或指定字段的数据,导入到目标表 中. 类别一. 如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法:(此方法只适合导出两表在同一database) INSERT INTO 目标表 SELECT * FROM 来源表;