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

ORACLE公司来培训BIEE,带了一个DEMO的DMP文件,其导出用户DBO具有DBA权限,缺省表空间是USERS。
 
我做导入时,另外创建了一个用户BIEE,其缺省表空间是TS_BIEE ,授予DBA权限,结果数据没有按预期导入到表空间TS_BIEE中,而是导入到了表空间USERS中,当然这是因为忘了revoke unlimited tablespace 的权限造成的。
 
对IMP 由拥有DBA权限的用户EXP的数据时,数据存放表空间有两种情况,现在花点时间来做个整理吧。
 
以下测试数据库均为 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

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

 
第二种情况:
目标数据库中没有与导出用户的缺省表空间同名的表空间,这种情况下,并不需要将导入用户的 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由拥有DBA权限的用户EXP数据时,数据存放表空间的几种情况(IMP-00013) -1的更多相关文章

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

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

  2. 使用sql语句创建 表空间 和用户,以及如何彻底删除表空间和用户,使用命令导出和导出数据库

    创建表空间有很多种方式,在安装好oracle 11g 后在网站上 https://localhost:1158/em 手动创建也可以,但是没有sql直接生成方便,下面介绍下如何用sql语句直接生成表空 ...

  3. oracle imp导入数据到另一个表空间

    http://blog.163.com/darlingchenlin@126/blog/static/7156283420100531431855/ 1.在第一个数据库导出数据:qlyg_xs_db_ ...

  4. oracle 表空间,用户的创建及授权,表空间基本操作

    参考地址:https://www.cnblogs.com/zhaideyou/articles/5845271.html Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可 ...

  5. ubuntu命令行添加拥有管理员权限新用户

    最近买了个服务器,只有一个root用户,天天登录挺不方便的,所以想要新建用户;之前在本地都是用界面话新建的用户,这次记录一下学习命令行新建用户的过程: 第一步 : # sudo adduser zhq ...

  6. IMP不到指定的表空间

    ==============================================================================只导dmp文件中的几个表数据,解决导入时ta ...

  7. oracle 创建用户和imp指定表空间

    创建用户: 1,sqlplus sys/pwd as sysdba; 2, create user username identified by password; 3, grant dba,conn ...

  8. oracle imp导入库到指定表空间

    1.创建表空间 create tablespace example_tablespace datafile 'e:\****.dbf' size 10m reuse autoextend on nex ...

  9. oracle创建表空间、创建用户、授权、夺权、删除用户、删除表空间

    表空间定义 表空间是为了统一ORACLE物理和逻辑上的结构而专门建立的,从物理上来说,一个表空间是由具体的一个或多个磁盘上数据文件构成的(至少1对1,可以1对多),从逻辑上来说一个表空间是由具体的一个 ...

随机推荐

  1. [图形学] 结束 [Unity Shader] 开始

    历时4个月,终于把<计算机图形学 with OpenGL>啃完了.如果边上班边看,即使一年应该都看不完. 虽然书里用到的GLUT库应该已经废弃,但并不影响用它去理解图形学的内容,我只把它当 ...

  2. vijos1062题解

    题目: 交谊舞是2个人跳的,而且一男一女 -____-||||. 由于交谊舞之前的节目安排,所有的表演者都站成了一排.这一排人的顺序满足2点: ①对于一对舞伴男生站在女生的左边. ②任何一对舞伴之间, ...

  3. 关于STM32单片机的IAP实现

    基于STM32F103单片机的IAP实现(虽然该篇文章不会详细写出实现细节,但是会从一个全局的角度讲述,实际的实现细节只需根据datasheet即可完成). 一.基础概念 什么是IAP?IAP即在应用 ...

  4. Linux - iostat命令详解

    简介 iostat可以提供更丰富的IO性能状态数据,iostat命令有两个用途: 输出CPU的统计信息 输出设备和分区的I/O统计信息 命令语法及参数说明 语法: iostat [ -c | -d ] ...

  5. DotNetCore跨平台~服务总线_事件总线的重新设计

    理论闲话 之前在.netFramework平台用的好好的,可升级到.net core平台之后,由于不再需要二进制序列化,导致咱们的事件机制遇到了问题,之前大叔的事件一直是将处理程序序列化后进行存储的, ...

  6. oracle默认用户名及密码

    oracle默认用户名及密码(网摘) (1)user:           internal           password   :oracle     (2)user:           s ...

  7. U盘发现器

    U盘发现器 package com.lx.io; import java.io.File; import java.io.IOException; import java.util.ArrayList ...

  8. nopCommerce 3.9 大波浪系列 之 汉化-中文语言

    一.导入语言包 nop官网下载中文语言文件,下载后是一个xml文件. 打开xml文件我们可以看到LocaleResource节点Name属性为资源名称,Value节点为资源值. 后台[Confignu ...

  9. 前端十万个为什么(之一):我们为什么需要npm?

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } span ...

  10. ibatis 参数和结果的映射处理

    SqlMapClient对象 这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作.这个类是我们使用iBATIS的最主要的类.它是线程安全的.通常,将它定义为单例. ...