`
scnu_lts
  • 浏览: 19513 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用dba用户导出表空间产生的问题(转)

 
阅读更多

转载自http://blog.csdn.net/kai27ks/article/details/7522355

 

今天在常态作业表空间移库时,发现新导入的表空间的B的数据全部到表空间A里面去了。表现状况是:B空间的数据文件未增长,而A空间增长迅猛。问题比较严重:当你想把A空间设为只读时,影响到了B空间(也被只读了,因为数据放到了A空间中);

  这是产生的原因:使用导出的用户A权限为DBA 而导入的库中存在同名用户。

  解决方法: revoke unlimited tablespace from USERA;

 以下为转载内容:

 

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

ORACLE公司来培训BIEE,带了一个DEMODMP文件,其导出用户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) 回收QCUIunlimited 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 掉,否则数据将被直接存放到了那个同名表空间中,而不是导入用户缺省的表空间中;如果没有同名表空间,则无需进行revokeoracle 会自动将数据存放在导入用户的缺省表空间中。
最后一个需要注意的问题就是DBA授权问题,个人建议,一个数据库中除了systemsys用户以外,最好严格控制DBA权限的授予,尤其是不要随便赋予应用系统schema的owner以这个权限。目前国内的软件开发以及项目管理的能力还很薄弱,绝大多数项目中,不会设立专门的数据库管理角色,又为了图方便,往往赋予应用系统schema的owner以DBA权限,这样一来,在一个几十人或者上百人的团队中,其中任何一个开发人员或是运维人员一个随意的对DB的操作,对DB而言也许将会是灾难性的。因此,当导入数据后,应及时revoke DBA 权限。


分享到:
评论

相关推荐

    Oracle数据库创建表空间、建立用户、授权、还原备份.docx

    ### Oracle数据库创建表空间、建立用户、授权及备份恢复详解 #### 一、创建与管理表空间 在Oracle数据库中,表空间是物理空间分配的基本单位。为了有效地管理和使用存储资源,合理地创建和配置表空间是非常重要的...

    sql建表及表空间

    ### SQL建表及表空间...以上内容详细介绍了如何使用SQL命令创建临时表空间、数据表空间、用户以及给用户授权,并且简要说明了数据导出和导入的基本步骤。这些步骤对于数据库管理员来说是非常基础也是必不可少的操作。

    oracle创建临时表空间文档及工具

    Data Pump提供了一种高效且灵活的数据传输方式,可以快速地导出整个数据库、用户、表空间或者单个表的数据,并将它们导入到另一个数据库中。 使用Data Pump导出数据的命令如下: ```bash expdp username/password ...

    Oracle导出数据结构文档.rar

    1. **表(Tables)**:包括表的名称、创建日期、存储空间、主键信息以及字段列表等。 2. **字段(Columns)**:每个字段的名称、数据类型、长度、精度、是否可为空(NULLABLE)以及默认值等。 3. **索引(Indexes)*...

    oracle 导入导出操作

    如果添加`full=y`参数,导出将包含整个数据库,但可能产生非常大的文件,因此在一般情况下不推荐使用。 导入数据的步骤相对复杂,包括创建表空间、用户以及授权,最后执行导入命令。以下是具体操作: 1. **创建表...

    oracle数据库导入导出命令

    这两个命令都支持多种数据导出和导入方式,包括表空间级别的导出和导入、表级别的导出和导入等。 ##### 2. exp 和 imp - **exp**:是较旧版本的导出工具,使用时需要注意其限制。 - **imp**:是较旧版本的导入工具...

    oracle常用语句

    根据提供的文件信息,本文将详细解释Oracle数据库中的几个常用语句及操作,这些知识点包括了数据导入导出、临时表空间创建、表空间创建以及用户创建与授权等关键概念。 ### 一、数据导入导出 #### 导出数据 在...

    oracle数据库

    **原因**:执行完整数据库或表空间导出需要DBA权限。 **操作指南**: - **联系数据库管理员**:要求数据库管理员执行完整数据库导出。 #### 25. EXP-00024 导出试图没有安装,请通知您的DBA **原因**:必要的导出...

    Oracle数据库整理表碎片

    - **使用SHRINK命令**:从10g开始,Oracle引入了更为简便的SHRINK命令,它允许用户通过简单的命令来整理表碎片,而且无需重建索引。具体操作如下: - **整理表,不影响DML操作**: ```sql alter table TABLE_...

    Oracle数据库错误消息.pdf

    24. EXP-00023: 必须是一 DBA 执行完整数据库或表空间导出 - 同上,全库导出需要DBA权限。 25. EXP-00024: 导出试图没有安装 - 必要的导出视图缺失,需要DBA安装。 处理这些错误时,重要的是理解错误信息并根据...

    oracle手册

    本Oracle手册涵盖了数据库管理中的几个关键方面,包括表空间创建、用户管理、权限分配以及数据导入导出等操作。以下将详细解释这些知识点。 #### 表空间创建 表空间是Oracle数据库中用来组织数据文件的一种逻辑...

    Oracle数据库管理员技术指南

    3.3.4 分开导出转储文件、数据表空间、 回退段和联机重做日志文件 3.3.5 最小化检查点 3.3.6 单独创建索引 3.3.7 设置大的初始化参数 SORT_AREA _SIZE 3.3.8 使用大的导入缓冲区 3.3.9 最小化数据库提交次数 ...

    快速Java和Oracle集成SSH开发注意问题.pdf

    - 使用`exp`命令可以将表空间、表等对象导出到一个二进制文件中: ```bash exp bacon/bacon@orcl file=D:\bacon_user.dmp tablespaces=(demo) ``` - **导入(IMP)** - 将之前导出的数据文件重新导入到数据库...

    oracle 10g数据还原

    4. **创建用户**:创建新的用户,并指定其默认表空间及临时表空间。例如: ```sql CREATE USER sa IDENTIFIED BY sa DEFAULT TABLESPACE "xxxx" TEMPORARY TABLESPACE temp; CREATE USER xjerp IDENTIFIED BY ...

    Oracle数据库错误消息

    - **错误描述**:普通用户试图执行完整数据库或表空间级别的导出。 - **解决方案**:联系数据库管理员,由具备相应权限的DBA执行导出操作。 ### EXP-00024 导出试图没有安装,请通知您的DBA - **错误描述**:执行...

    oracle数据库导入

    该表空间用于存储导入过程中产生的临时数据,以提高数据处理效率。具体参数设置如下: - ` tempfile 'D:\app\oracleData\tempData\zhzf_tempSpaces.dbf'`:指定临时表空间的数据文件位置。 - `size 32M`:设定初始...

Global site tag (gtag.js) - Google Analytics