关于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. Egret的项目结构

    这是我新建的一个Egret EUI项目 .wing文件夹是项目的配置文件 bin-debug 文件夹,项目编译和运行的debug目录 libs 文件夹,存放库文件,包括 Egret 核心库,其他扩展库 ...

  2. 恐怖的ifdown eth0;0

    下午闲的蛋疼,随手给测试机配了个浮动地址eth0:0. ping了下OK,内网访问没问题. 准备收手的时候,瞄了一眼ifcfg-eth0:0的配置,发现广播地址BROADCAST写成了BOADCAST ...

  3. dashDB - Creating a table with CLOB column type

    In order to create a table with clob column type, the table has to be created with "ORGANIZE BY ...

  4. C#字典转换成where条件

    where 1=1 and Dictionary[key1]=Dictionary[value1] and Dictionary[key2]=Dictionary[value3].... /// &l ...

  5. C# TSC打印二维码和条形码

    效果图 开发.使用环境说明 安装TSC_7.3.8_M-3.exe打印机驱动,安装时选择对应的ttp 244 pro 将TSCLIB.dll复制到C:\Windows\system 驱动安装说明 选择 ...

  6. 决策树(C4.5)原理

    决策树c4.5算法是在决策树ID3上面演变而来. 在ID3中: 信息增益 按属性A划分数据集S的信息增益Gain(S,A)为样本集S的熵减去按属性A划分S后的样本子集的熵,即 在此基础上,C4.5计算 ...

  7. 大数据与Java的关系

    随着2017年大数据各种应用的发展,大数据的价值得以充分的发挥,大数据已在企业.社会各个层面都成为重要的手段,数据已成为新的企业战略制高点,也是各个企业争夺的新焦点.那么我们一直在说着的大数据究竟是什 ...

  8. 【chrome】 chrome 开发者工具

    1. 常用控制台工具 console.log  console.info  console.error  console.warn console.assert console.count conso ...

  9. 【Django】django 的request和response(转)

    当请求一个页面时,Django 把请求的 metadata 数据包装成一个 HttpRequest 对象,然后 Django 加载合适的 view 方法,把这个 HttpRequest 对象作为第一个 ...

  10. 【LeetCode题解】动态规划:从新手到专家(一)

    文章标题借用了Hawstein的译文<动态规划:从新手到专家>. 1. 概述 动态规划( Dynamic Programming, DP)是最优化问题的一种解决方法,本质上状态空间的状态转 ...