==============================================================================
只导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. UI1_应用的程序的生命周期

    // // AppDelegate.m // UI1_应用的程序的生命周期 // // Created by zhangxueming on 15/6/29. // Copyright (c) 201 ...

  2. HTML5/jQuery动画应用 3D视觉效果

    今天我们要来分享几款很酷的HTML5/CSS3动画应用,虽然不是HTML5 3D应用,但也有3D的视觉效果.HTML5结合jQuery,让网页应用变得更加强大了.一起来看看这些HTML5/jQuery ...

  3. GDAL读取tiff文件/C++源码

    // gdal_geotiff.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "gdal_priv.h&quo ...

  4. C++ Priority Queues(优先队列) and C++ Queues(队列)

    C++优先队列类似队列, 但是在这个数据结构中的元素按照一定的断言排列有序. empty() 如果优先队列为空,则返回真 pop() 删除第一个元素 push() 加入一个元素 size() 返回优先 ...

  5. 求单链表倒数第m个结点

    问题:求单链表倒数第m个结点,要求不准求链表的长度,也不许对链表进行逆转 解:设置两个指针p和q,p.q指向第一个结点.让p先移动到链表的第m个结点,然后p和q同时向后移动,直到p首先到达尾结点.此时 ...

  6. 使用struct实现面向对象编程的封装

    虽然C是面向过程的语言,但是这不代表C不能使用面向对象的思想,本质上说语言只是一种手段而已,一种外在的表现形式,支持面向对象的语言只是通过设计的特定的关键字更好的表现了面向对象编程而已.C中也可以使用 ...

  7. sublime text3的配置(整理)

    一.代码片段 开发人员很多时候是在做一些重复的工作. 针对不同数据表的增删改查都差不多,重复来重去的.很久不写程序了,利用十一假期在家看看书,写写程序. 最近一直很喜欢使用Sublime Text,发 ...

  8. 创建SQL数据库指定文件路径

    create database b2c on  primary  -- 默认就属于primary文件组,可省略(/*--数据文件的具体描述--*/    name='b2c',  -- 主数据文件的逻 ...

  9. Oracle varchar2 4000

    关于oracle varchar2 官方文档的描述 VARCHAR2 Data Type The VARCHAR2 data type specifies a variable-length char ...

  10. 编写php拓展实例--slime项目(用户登录会话类)

      最近公司换了yaf框架,突然对用c实现php拓展感兴趣了,如果一个功能已经很稳定很成熟而且用的地方很多,那么我们就可以尝试用拓展实现(不一定每种情况都可以写成拓展),写成拓展后就不用每次用都包含一 ...