==============================================================================
只导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. 7款外观迷人的HTML5/CSS3 3D按钮特效

    1.CSS3超酷3D弹性按钮 按钮实现非常简单 今天我又要向大家分享一款实现超级简单的CSS3 3D弹性按钮,它在鼠标按下时不仅从视觉上感受到3D立体的效果,而且更有弹性的动画特效,非常可爱. 在线演 ...

  2. POJ 2837 Til the Cows Come Home

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 45515   Accepted: 15434 Description Bes ...

  3. 查看某个模块的Tables

    在SE11 中 关于table的F4 help 有一个筛选条件是Package 同时由于不同的模块放在不同的Package中 很容易根据这个条件 获得某个模块的所有Tables     亲测有效  1 ...

  4. ABAP OO与ALV结合方式探索(2)

    接上篇 一开始设计的BO 类是为了实现功能而实现功能 从类的单一职责的角度而言 先把这个BO对象拆分   这里又有一个需要考虑的点:   如何传递内表数据到ALV 如果引入一个中间变量,数据就会被do ...

  5. [windows phone开发]新生助手的开发过程与体会一

    功能需求分析: 1.  为到达学院的新生指路,给出所有路线,并给出必要提示: 2.  对学院建筑进行介绍: 3.  对学院周边环境(交通.购物.银行等)进行介绍: 4.  必要的应用设置 总体设计: ...

  6. html5圆角

    以下是代码片段:#roundCornerI{   font-family: Arial;   border: 5px solid #dedede;   -moz-border-radius-tople ...

  7. [转]浅析AD Exchange——RTB模式

    在上一篇文章中,我们了解了程序化购买,并且知道程序化购买的最基本的一种RTB的竞价模式,了解了DSP.SSP.Ad Exchange等概念,不清楚的同学可以看看上一篇文章<程序化购买>. ...

  8. PHP学习之数组的定义和填充

    数组就是把一组数据按顺序放在一起.PHP的数组和其它的语言数组有一点点不同:第一,保存的数据是可以是任何类型的:第二,数组的索引可以是数字,也可以是字符串. PHP的数组,说白了,就是关联数据每一条数 ...

  9. Sending Email from mailx Command in Linux Using Gmail’s SMTP

    The mailx or mail command in Linux is still providing service for guys like me, especially when we n ...

  10. js读取json数据(php传值给js)

    <?php $array =array('fds','fdsa','fdsafasd');  // json_encode($array); ?> <html> <hea ...