Oracle exp/imp匯入不同的資料表空間____Oracle

來源:互聯網
上載者:User

    我們在做Oracle資料庫表遷移時,通常會有這種需求,在開發階段,可能所有使用者的資料都放在一個資料表空間中,比如users資料表空間,但是在生產中,我們希望將每個使用者的資料分別放到不同資料表空間中,此時直接使用exp/imp是不具備選擇資料表空間功能的(expdp/impdp可以),這裡我們提供了一種方法來實現這種功能。


    正常情況下,我們使用exp匯出,再用imp匯入,它會將資料匯入到原來資料表空間中。


   這裡我測試建立了一個使用者test01,三張表t1、t2、t3,預設資料表空間為users

   

SQL> select table_name,TABLESPACE_NAME from dba_tables where owner='TEST01';TABLE_NAME       TABLESPACE_NAME------------------------------ ----------------------------------------T1       USERST2       USERST3       USERS

此時我們使用exp匯出

exp system/oracle file=test01.dmp owner=test01 buffer=10240 log=test01.log
在匯出檔案中,裡面會包含建表語句,而語句中會包含資料表空間資訊,這裡截取一部分
strings test01.dmp |grep TABLESPACECREATE TABLE "T1" ("OWNER" VARCHAR2(30) NOT NULL ENABLE, "TABLE_NAME" VARCHAR2(30) NOT NULL ENABLE, "TABLESPACE_NAME" VARCHAR2(30), "CLUSTER_NAME" VARCHAR2(30), "IOT_NAME" VARCHAR2(30), "STATUS" VARCHAR2(8), "PCT_FREE" NUMBER, "PCT_USED" NUMBER, "INI_TRANS" NUMBER, "MAX_TRANS" NUMBER, "INITIAL_EXTENT" NUMBER, "NEXT_EXTENT" NUMBER, 
"MIN_EXTENTS" NUMBER, "MAX_EXTENTS" NUMBER, "PCT_INCREASE" NUMBER, "FREELISTS" NUMBER, "FREELIST_GROUPS" NUMBER, "LOGGING" VARCHAR2(3), 
"BACKED_UP" VARCHAR2(1), "NUM_ROWS" NUMBER, "BLOCKS" NUMBER, "EMPTY_BLOCKS" NUMBER, "AVG_SPACE" NUMBER, "CHAIN_CNT" NUMBER, "AVG_ROW_LEN" NUMBER, 
"AVG_SPACE_FREELIST_BLOCKS" NUMBER, "NUM_FREELIST_BLOCKS" NUMBER, "DEGREE" VARCHAR2(20), "INSTANCES" VARCHAR2(20), "CACHE" VARCHAR2(10), 
"TABLE_LOCK" VARCHAR2(8), "SAMPLE_SIZE" NUMBER, "LAST_ANALYZED" DATE, "PARTITIONED" VARCHAR2(3), "IOT_TYPE" VARCHAR2(12), "TEMPORARY" VARCHAR2(1),
 "SECONDARY" VARCHAR2(1), "NESTED" VARCHAR2(3), "BUFFER_POOL" VARCHAR2(7), "ROW_MOVEMENT" VARCHAR2(8), "GLOBAL_STATS" VARCHAR2(3), 
"USER_STATS" VARCHAR2(3), "DURATION" VARCHAR2(15), "SKIP_CORRUPT" VARCHAR2(8), "MONITORING" VARCHAR2(3), "CLUSTER_OWNER" VARCHAR2(30),
 "DEPENDENCIES" VARCHAR2(8), "COMPRESSION" VARCHAR2(8), "DROPPED" VARCHAR2(3))  PCTFREE 10 PCTUSED 40 INITRANS 1 
MAXTRANS 255 STORAGE(INITIAL 393216 NEXT 1048576 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS


所以此時我們做imp匯入時,即使建立使用者指定了預設資料表空間,也很會匯入到原來的資料表空間中(除非原來預設的資料表空間已經被刪除掉了,否則即便換使用者也不行)


此時我們提供另一種方式來更改資料表的資料表空間,假設使用者為test01,步驟如下:


1、建立使用者,注意一定要加預設資料表空間

create user test01 identified by test01 default tablespace test01;

2、賦予許可權,注意不要賦予dba許可權,如果實在需要可以匯入後再賦權,當然匯入操作可以用system來做

GRANT CONNECT TO test01;
GRANT IMP_FULL_DATABASE TO test01;
GRANT RESOURCE TO test01;

3、收回使用者test01無限制資料表空間許可權

revoke unlimited tablespace from test01;

4、將原來資料表空間的許可權收回

alter user test01 quota 0 on USERS;

5、賦予新資料表空間許可權

alter user test01 quota unlimited on test01;


需要注意的是,假如users資料表空間可以刪除,則可以直接匯入到新的預設資料表空間test01中


此時我們直接匯入,發現表全部在新的預設空間中

imp system/oracle file=test01.dmp fromuser=test01 touser=test01 buffer=10240 commit=y log=imptest01.log


TABLE_NAME       TABLESPACE_NAME------------------------------ ------------------------------------------------------------------------------------------T1       TEST01T2       TEST01T3       TEST01
















聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.