==============================================================================
只导dmp文件中的几个表数据,解决导入时tablespace
doesnot exist
imp SYSTEM/SYSTEM@TESTA file=D:\TEST.dmp
fromuser=TEST
touser=NEWTEST
TABLES=(TABLE1,TABLE2,TABLE3)
buffer=100000000
ignore=y;

==============================================================================
关于IMP由有DBA权限的用户EXP数据时,数据存放表空间的几种情况(IMP-00013)

ORACLE公司培训BIEE,带了一个DEMO的DMP文件,其导出用户DBO具有DBA权限,缺省表空间是USERS。
做导入时,另外创建了一个用户BIEE,其缺省表空间是TS_BIEE
,授予DBA权限。
结果数据没有按预期导入到表空间TS_BIEE中,而是导入到了表空间USERS中。
因为忘了revoke unlimited
tablespace 的权限造成的。

由拥有DBA权限的用户EXP的数据时,IMP数据存放表空间有两种情况:以下测试数据库均为
ORACLE 9.2.0.4
?
第一种情况:
目标数据库中存在与导出用户的缺省表空间同名的表空间。此时,一定要将导入用户的unlimited
tablespace权限revoke掉;否

则数据将全部被导入到那个同名的表空间中,而不是导入用户的缺省表空间中。
1.从源数据库中导出数据
(1)
授予导出用户DBA权限
SQL> connect system@njgajhpt

Connected to Oracle9i Enterprise Edition Release
9.2.0.4.0
Connected as system
SQL> grant dba
to sh;
Grant succeeded

SH的缺省表空间是EXAMPLE
SQL> select username,default_tablespace from
dba_users
2 where username = 'SH';

USERNAME DEFAULT_TABLESPACE

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

SH
EXAMPLE
(2)导出数据
C:Documents and Settingscuiqing>exp sh/sh@njgajhpt
file='d:tempsh.dmp' tables=customers direct=y
Export: Release 9.2.0.1.0 -
Production on 星期四 11月 16 16:36:31 2006
即将导出指定的表通过直接路径 ...
. . 正在导出表
CUSTOMERS 50000 行被导出
在没有警告的情况下成功终止导出。
2.导入目标数据库
(1) 创建表空间
SQL>
create tablespace ts_qcui
2 datafile
'D:\ORACLEORADATAJWPTZJKts_qcui.ora'
3 size 20M autoextend on
next 8M maxsize 1024M;
Tablespace created
(2)
创建用户
SQL> create user qcui identified by qcui
2 default
tablespace ts_qcui;
User created
SQL> grant
connect,resource to qcui;
Grant succeeded
(3)
导入数据
C:Documents and Settingscuiqing>imp qcui/qcui@jwptzjk fromuser=sh
touser=qcui file='d:tempsh.dmp' constraints=n
Import: Release 9.2.0.1.0 -
Production on 星期四 11月 16 16:43:00
2006
经由直接路径导出由EXPORT:V09.02.00创建的导出文件
IMP-00013: 只有 DBA 才能导入由其它 DBA
导出的文件
IMP-00000: 未成功终止导入
(4) 授予导入用户DBA权限
SQL> grant dba to
qcui;
Grant succeeded
(5) 授权后重新导入
C:Documents
and Settingscuiqing>imp qcui/qcui@jwptzjk fromuser=sh touser=qcui
file='d:tempsh.dmp' constraints=n
经由直接路径导出由EXPORT:V09.02.00创建的导出文件
警告:
此对象由 SH 导出, 而不是当前用户
. . 正在导入表 "CUSTOMERS" 50000行被导入
成功终止导入,但出现警告。
(6)
检查数据存放的表空间。数据没有按预期存放在QCUI的缺省表空间TS_QCUI中
SQL> select
table_name,tablespace_name from dba_tables
2 where owner =
'QCUI';
TABLE_NAME
TABLESPACE_NAME
------------------------------
------------------------------

CUSTOMERS EXAMPLE
(7) 回收QCUI的unlimited
tablespace权限
SQL> revoke unlimited tablespace from qcui;
*********
Revoke succeeded
SQL> alter user
qcui quota unlimited on ts_qcui;
*********
User altered
(8) 回收权限后重新导入
SQL>
drop table qcui.customers;
Table
dropped
C:Documents and Settingscuiqing>imp qcui/qcui@jwptzjk fromuser=sh
touser=qcui file='d:tempsh.dmp'
constraints=n
经由直接路径导出由EXPORT:V09.02.00创建的导出文件
警告: 此对象由 SH 导出,
而不是当前用户
. . 正在导入表 "CUSTOMERS" 50000行被导入
成功终止导入,但出现警告。
(9)
检查数据存放的表空间。数据存放在QCUI的缺省表空间TS_QCUI中
SQL> select table_name,tablespace_name
from dba_tables
2 where owner =
'QCUI';
TABLE_NAME
TABLESPACE_NAME
------------------------------
------------------------------
CUSTOMERS
TS_QCUI

第二种情况:
目标数据库中没有与导出用户的缺省表空间同名的表空间,这种情况下,并不需要将导入用户的unlimited
tablespace权限 revoke 掉。
1.从源数据库中导出数据
(1)创建表空间
SQL> create tablespace
ts_candy
2 datafile
'D:ORACLEORADATANJGAJHPTts_candy.ora'
3 size 20M autoextend on
next 8M maxsize 1024M;
Tablespace created
(2)
创建用户,缺省表空间是 ts_candy
SQL> create user candy identified by
candy
2 default tablespace ts_candy;

User created
SQL> grant dba to candy;
Grant succeeded
(3)
创建表
SQL> connect candy/candy@njgajhpt
SQL> create table
candy_tables
2 as
3 select * from
all_tables;
Table created
(4) 导出数据
C:Documents
and Settingscuiqing>exp candy/candy@njgajhpt file='d:tempcandy.dmp'
direct=y
即将导出指定的表通过直接路径 ...
. . 正在导出表 CANDY_TABLES 991
行被导出
在没有警告的情况下成功终止导出。
2.导入目标数据库
(1) 目标数据库中没有与 ts_candy同名的表空间
SQL>
select tablespace_name from dba_tablespaces
2 where
tablespace_name = 'TS_CANDY';

TABLESPACE_NAME
------------------------------
(2) 导入数据(导入用户qcui
已授予DBA权限,并且具有 unlimited tablespace权限)
SQL> select grantee,privilege from
dba_sys_privs
2 where grantee =
'QCUI';
GRANTEE
PRIVILEGE
------------------------------
----------------------------------------
QCUI
UNLIMITED TABLESPACE
C:Documents and Settingscuiqing>imp qcui/qcui@jwptzjk
fromuser=candy touser=qcui file='d:tempcandy.dmp'
constraints=n
经由直接路径导出由EXPORT:V09.02.00创建的导出文件
警告: 此对象由 CANDY 导出,
而不是当前用户
已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
. . 正在导入表 "CANDY_TABLES"
919行被导入
成功终止导入,但出现警告。
(3) 检查数据存放的表空间。数据存放在QCUI的缺省表空间TS_QCUI中
SQL>
select table_name,tablespace_name from dba_tables
2 where owner
= 'QCUI';
TABLE_NAME
TABLESPACE_NAME
------------------------------
------------------------------
CUSTOMERS
TS_QCUI
CANDY_TABLES
TS_QCUI

小结:当拿到由拥有DBA权限的用户导出的数据时,最好问清楚其缺省表空间,如果目标数据库中存在与导出数据库同名的表空间时,这种情况需要特别注意。
我们往往在一看到“IMP-00013:
只有 DBA 才能导入由其它 DBA 导出的文件”
这个错误信息后,就立刻给导入用户授予DBA权限,但却忽略了DBA的角色是拥有对数据库中所有表空间unlimit的权限,造成花费很长时间import结束后,却发现没有导入到预期的表空间中。
简而言之,如果有同名表空间存在的话,必须将导入用户的
unlimited tablespace的权限 revoke
掉,否则数据将被直接存放到了那个同名表空间中,而不是导入用户缺省的表空间中;如果没有同名表空间,则无需进行revoke,oracle
会自动将数据存放在导入用户的缺省表空间中。
最后一个需要注意的问题就是DBA授权问题,个人建议,一个数据库中除了system和sys用户以外,最好严格控制DBA权限的授予,尤其是不要随便赋予应用系统schema的owner以这个权限。目前国内的软件开发以及项目管理的能力还很薄弱,绝大多数项目中,不会设立专门的数据库管理角色,又为了图方便,往往赋予应用系统schema的owner以DBA权限,这样一来,在一个几十人或者上百人的团队中,其中任何一个开发人员或是运维人员一个随意的对DB的操作,对DB而言也许将会是灾难性的。因此,当导入数据后,应及时revoke掉
DBA 权限。

IMP不到指定的表空间的更多相关文章

  1. IMP数据到指定的表空间

    IMP数据到指定的表空间 当我们通过imp导入dmp文件时,默认的情况下,数据会导入到exp出的dmp文件所对应的表空间里面. 比如:通过orcl_dev用户,exp数据,用orcl_test用户im ...

  2. oracle RAC调整数据文件大小并移动表到指定的表空间

    一.Oracle RAC 调整表空间数据文件大小 1.先查找出表空间对应的数据文件路径: select file_name,tablespace_name from dba_data_files ; ...

  3. EXPDP/IMPDP与EXP/IMP在不同用户和表空间之间迁移数据的实现方法

    1. EXPDP/IMPDP方式 SQL> create user zlm identified by zlm; User created. SQL> grant connect,reso ...

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

    生产环境: 源数据库:Windows Server + Oracle 11.2.0.1 目标数据库:SunOS + Oracle 11.2.0.3 1.确认迁移需求:源数据库cssf 用户所有表和数据 ...

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

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

  6. Oracle如何把数据库表迁移到指定表空间

     问题描述: 将测试数据库中的表结果导入到正式数据库.需要在正式库中建立独立的表空间存放新导入的表,以避免和正式库中原来的表混淆. 处理步骤: 1. 在命令行中用exp指令导出测试库中指定表到指定 ...

  7. 移动lob类型索引到指定表空间

    WWWNEWSAD 为表名 USERS 为原表空间 CONTENT 为lob类型的字段 DATA_INDEX_WXZJ 指定的表空间 ALTER TABLE WWWNEWSAD MOVE TABLES ...

  8. 19C imp 导入合并表空间

    因为项目需要从9i 导数据到18C,所以发现如下特性 1.18C imp 导入数据,如果表空间在目标库没有,会将表导入到用户默认表空间 2.18C imp 导入数据,如果表空间在目标库有,但缺少权限. ...

  9. oracle创建表空间、用户

    创建表空间 create tablespace '<数据库名>' datafile '<存储路径>' size 500M default storage (initial 20 ...

随机推荐

  1. BoneCP主要配置参数

    二.BoneCP主要配置参数 1.jdbcUrl 设置数据库URL 2.username 设置数据库用户名 3.password 设置数据库密码 4.partitionCount 设置分区个数.这个参 ...

  2. 关联表映射 Association Table Mapping

    把关联保存为一个表,存储关联表的外键 在对象中,使用集合作为域值,来处理多值域. 而在DB中,只能有单值域. 外键映射的核心,是在关联关系的单值端使用外键来维持联系. 而在多对多的关联关系中,已经不存 ...

  3. 8款效果惊艳的HTML5 3D动画

    1.HTML5 WebGL水面水波荡漾特效 之前已经向各位分享过一款很逼真的HTML5水波荡漾特效,效果还算不错.今天再向大家分享一款更加给力的HTML5水波动画,画面上是一个大水池,水池底部是一颗大 ...

  4. JS函数式编程【译】2.1 函数式编程语言

  5. Linux下mysql的安装和使用(C语言)

    1 mysql的安装 我使用的ubuntu在线安装,非常简单,命令为: sudo apt-get install mysql-client mysql-server 2 mysql命令集合 网络太多了 ...

  6. PHP利用socket_bind函数切换IP地址采集数据

    在利用PHP进行数据采集的过程中,通常会遇到IP被屏蔽或出现验证码的情况:为了能够继续采集,我们需要切换不同的ip,每访问一次,随机切换一个IP.当然也可以通过收集大量代理,通过切换代理的方式进行采集 ...

  7. LLVM language 参考手册(译)(2)

    调用约定(Calling Conventions) LLVM functions, calls and invokes 可以带有一个可选的调用约定来指明调用方式.每一对 caller/callee(调 ...

  8. 《PHP和MySQL Web开发》精彩的地方收录

    1.用SESSION来做的购物车,做成数组,用isbn对应书的数量作为二维数组保存 $new GET传值加入购物车,submit是修改数量,提交后的表单,通过历遍原来的数组,对应isbn修改最新的数量 ...

  9. Oracle RAC中的一台机器重启以后无法接入集群

          前天有个同事说有套AIX RAC的其中一台服务器重启了操作系统以后,集群资源CSSD的资源一直都在START的状态,检查日志输出有如下内容: [    CSSD][1286]clssnmv ...

  10. Quartz.net 的开源任务管理平台

    Quartz.net 的开源任务管理平台 前面总结了很多,关于Quartz.net 的文章,介绍了如何使用Quartz.net.不清楚的朋友,可以看我之前的系列文章,http://www.cnblog ...