Oracle imp 匯入資料到另一個表空間

xz43發表於2011-03-18
很多人在進行資料遷移時,希望把資料匯入不同於原系統的表空間,在匯入之後卻往往發現,資料被匯入了原表空間。

本例舉例說明解決這個問題:
如果預設的使用者具有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中。
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-689891/,如需轉載,請註明出處,否則將追究法律責任。

相關文章