`
itling
  • 浏览: 4256 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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

阅读更多
原文出处:http://asword.itpub.net/post/7923/231847
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 权限。
分享到:
评论

相关推荐

    oracle9i的EXP和IMP

    **EXP(Export)**是Oracle数据库的导出工具,它允许用户将数据库对象如表、视图、存储过程、用户权限等信息从一个数据库中导出到一个可执行的二进制文件或文本文件中。这个过程被称为导出或者备份。EXP在生成的导出...

    oracleClient安装包exp和imp文件.zip

    综上所述,"oracleClient安装包exp和imp文件.zip"提供了一个完整的Oracle客户端环境,结合EXP和IMP工具,用户可以高效地管理和迁移数据库数据,这对于数据库管理员和开发者来说是非常有价值的资源。

    imp与exp的注意事项

    在传输表空间时,可能需要以`SYSDBA`身份运行`exp`和`imp`。但如前所述,这种方式需要特别小心,并且通常只在必要时使用。 总结来说,`exp`和`imp`操作需要注意以下几个方面: 1. 权限管理:确保用户具有足够的角色...

    Imp和Exp命令详解

    Oracle数据库中的Imp和Exp命令是用于数据导入和导出的工具,它们是逻辑备份的重要组成部分。在Oracle环境中,这些命令对于数据迁移、备份和恢复操作至关重要。 **Exp(Export)命令**用于将数据库对象如表、索引、...

    Oracle11G导入导出(imp和exp)少表解决方法.docx

    2. **修改 deferred_segment_creation 参数**:默认情况下,这个参数的值为 TRUE,意味着只有在表有数据时才会分配 segment。将其更改为 FALSE,将使所有表(无论是否为空)在创建时就分配 segment。执行 `alter ...

    ORACLE导入数据文件到指定的表空间

    通过IMP,我们可以控制导入数据时的许多参数,如表空间、用户、模式等。 描述中提到的博客链接可能提供了具体的操作步骤,但在这里我会提供一个通用的流程: 1. **准备工作**:确保你有权限访问目标表空间,并知道...

    Oracle创建用户,并授权DBA权限

    - **`DATAFILE`**:指定存放表空间数据文件的位置及文件名。 - **`SIZE`**:设置初始大小。 - **`EXTENTMANAGEMENT LOCAL`**:表示使用本地管理方式管理表空间的空间分配。 - **`SEGMENTSPACEMANAGEMENT AUTO`**:...

    Oracle数据库逻辑增量备份之exp/imp

    通过exp/imp的增量备份恢复功能,数据库管理员能够灵活地管理和保护Oracle数据库,以应对各种数据丢失情况。理解并熟练掌握这些方法对于确保业务连续性和数据完整性至关重要。在实际操作中,应该根据业务需求和资源...

    Oracle11G导入导出(imp和exp)少表解决方法

    Oracle 11G 导入导出(imp 和 exp)少表解决方法 Oracle 11G 是一个功能强大且复杂的数据库管理系统,它提供了多种方式来导入和导出数据。然而,在使用 Oracle 11G 时,用户可能会遇到一些问题,例如无法导出空表...

    imp_exp示例

    这是因为Oracle的安全策略限制了数据跨用户间的直接导入,除非操作者本身拥有DBA权限。 ### 总结 Oracle的imp和exp命令是数据库管理员的重要工具,它们提供了灵活的数据管理方案,无论是数据备份、恢复还是迁移,...

    Oracle expimp,备份或导入时注意的事项

    如果试图将A用户的数据导入到B用户下,A用户必须拥有足够的权限,如`imp_full_database`。否则,imp操作可能无法完成。 对于大表的导入,尤其是在存储空间有限的情况下,可能遇到存储分配失败的问题。这是因为exp...

    Oracle中如何使用imp语句导入不同表空间?

    在实际工作中,有时需要将exp导出的历史备份dmp文件进行恢复,若之前的建表语句及表空间名无法找到,则直接用imp语句进行导入的话可能报错表空间不存在,且导入数据占用空间可能会非常大。使用本文方法可将exp导出的...

    oracle命令 exp&imp命令详解

    2. 表空间:导入数据时,需要确保目标数据库有足够的表空间来容纳新数据。 3. 范围控制:通过指定`tables`参数,可以控制只导出特定的表或视图,避免不必要的数据迁移。 4. 一致性:为了确保数据一致性,通常在导出...

    exp imp命令详细介绍

    但在特定情况下,如用户为SYS或SYSTEM时,仍可执行增量导出导入。 - 完全增量导出:`$exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=complete` - 增量型增量导出:`$exp user/pwd file=/dir/xxx.dmp log=...

    exp/imp2导入导出

    通过对 Oracle 表空间创建命令的分析以及对 exp/imp2 导入导出工具的介绍,我们可以看到,在 Oracle 数据库管理中,合理配置表空间属性和灵活运用备份恢复工具对于保障数据的安全性和可靠性至关重要。希望本文能帮助...

    oracle导入时表空间不一致解决方法

    如果在导入数据时遇到用户没有足够的表空间权限的情况,还需要进行以下操作: 1. **撤销无限表空间权限**: ```sql revoke unlimited tablespace from ; ``` 2. **设置默认表空间和配额**: ```sql alter ...

    exp转换表空间

    ### Oracle EXP/IMP 表空间转换详解 #### 一、背景与目的 在数据库管理过程中,经常需要通过Oracle的导出(EXP)和导入(IMP)工具来迁移数据。这一过程中,表空间的转换是非常常见的一项操作。对于不包含特定复杂...

    oracle导入导出(imp,exp本机或异机恢复)-详细笔记文档总结

    Oracle 导入导出(imp,exp 本机或异机恢复) Oracle 的数据库导入导出(imp/exp)是数据库管理员经常使用的两个命令,它们分别用于数据库的导出和导入。本文档总结了 Oracle 数据库的完全导入导出、imp 和 exp 命令...

Global site tag (gtag.js) - Google Analytics