Oracle imp 导入数据到另一个表空间

来源:互联网 发布:域名投资入门 编辑:程序博客网 时间:2024/05/16 16:19
很多人在进行数据迁移时,希望把数据导入不同于原系统的表空间,在导入之后却往往发现,数据被导入了原表空间。

本例举例说明解决这个问题:
如果缺省的用户具有DBA权限,那么导入时会按照原来的位置导入数据,即导入到原表空间,下面通过演示导入不同表空间。
 
[oracle@testsvr3 orcl]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 3月 28 19:09:40 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到: 
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> CREATE TABLESPACE TESTSPACE 
DATAFILE '/var/oracledata/orcl/TEST01.dbf' size 120M 
EXTENT MANAGEMENT local;  2    3 
表空间已创建。
SQL> disc
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options 断开
SQL> conn ms/ms
已连接。
SQL> create table test_objects tablespace TESTSPACE as select * from dba_objects;
表已创建。
SQL> create index ind_object_type on test_objects(OBJECT_TYPE) tablespace TESTSPACE;
索引已创建。
SQL> set linesize 200
SQL> col segment_name for a50
SQL> select segment_name,segment_type from dba_segments where tablespace_name='TESTSPACE';
SEGMENT_NAME                                       SEGMENT_TYPE
-------------------------------------------------- ------------------
TEST_OBJECTS                                       TABLE
IND_OBJECT_TYPE                                    INDEX
SQL> quit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options 断开
 
上面创建了一个新的表空间,并在表空间上新建了一个表。
 
下面备份这个表。
[oracle@testsvr3 orcl]$ exp ms/ms file=test_objects.dmp tables=test_objects log=exptab.log
Export: Release 10.2.0.1.0 - Production on 星期一 3月 28 19:19:08 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径...
. . 正在导出表                    TEST_OBJECTS导出了       53433 行
成功终止导出, 没有出现警告。
 
备份后,删除刚才的表空间:
SQL> drop tablespace TESTSPACE INCLUDING CONTENTS;
表空间已删除。
 
创建要导入的新用户:
SQL> CREATE USER test IDENTIFIED BY test
    PROFILE DEFAULT
    DEFAULT TABLESPACE USERS 
    TEMPORARY TABLESPACE TEMP 
    ACCOUNT UNLOCK;  2    3    4    5 
用户已创建。
SQL> grant connect,resource,dba to test;
授权成功。
 
回收用户unlimited tablespace权限,这样就可以导入到用户缺省表空间:
SQL> revoke unlimited tablespace from test;
撤销成功。
SQL> alter user test quota 0 on USERS;
用户已更改。
SQL> alter user test quota unlimited on USERS;
用户已更改。
重新导入数据
[oracle@testsvr3 orcl]$ imp test/test file=test_objects.dmp fromuser=ms touser=test
Import: Release 10.2.0.1.0 - Production on 星期一 3月 28 19:26:32 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
警告: 这些对象由 MS 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 MS 的对象导入到 TEST
. . 正在导入表                  "TEST_OBJECTS"导入了       53433 行
成功终止导入, 没有出现警告。
[oracle@testsvr3 orcl]$
 
[oracle@testsvr3 orcl]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 3月 28 19:26:48 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到: 
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> select segment_name,segment_type,tablespace_name from dba_segments where segment_name='TEST_OBJECTS';
SEGMENT_NAME
--------------------------------------------------------------------------------
SEGMENT_TYPE       TABLESPACE_NAME
------------------ ------------------------------
TEST_OBJECTS
TABLE              USERS
 
发现该表已经成功导入了test用户默认表空间USERS中。
0 0