(最終更新日:02年07月20日)

IMPORT時に、EXPORT時と違う表領域へIMPORTする方法


1.説明

通常、IMPORTする場合、EXPORT時の表領域へIMPORTされてしまいます。これを別の表領域へIMPORTする方法はについて説明します
例えば、ユーザー SCOTT(テーブルは表領域USER_DATAに作成されている)のデータをEXPORTし、ユーザー SCOTT3(デフォルト表領域はSCOTT3)にIMPORTすると、IMPORTしたテーブルはユーザー SCOTT3 のデフォルト表領域SCOTT3ではなく元の表領域USER_DATAに作成されます。

これは、ユーザーを作成する際にRESOURCE/DBAロールを付与した場合、RESOURCE/DBAロールに含まれる「UNLIMITED TABLESPACE」権限が効いてしまい、ユーザーのデフォルト表領域ではなく元の表領域にテーブルが作成されるためです。対策として、IMPORTする前にこの「UNLIMITED TABLESPACE」権限を取り消します。「UNLIMITED TABLESPACE」権限を取り消すと、ユーザーはどの表領域にも表領域にも領域獲得ができなくなるためデフォルト表領域に対し領域獲得権(QUOTA)を与えます。

-- UNLIMITED TABLESPACE権限の取消
REVOKE UNLIMITED TABLESPACE FROM <username>;

-- 領域獲得権(QUOTA)を付与
ALTER USER <username> QUOTA UNLIMITED ON <default_tablespace>;

2.実習

1. ユーザー SCOTT のデータをEXPORT

MS-DOS プロンプト
G:\Work>EXP80 SCOTT/TIGER FILE=SCOTT.DMP

2. ユーザー SCOTT3 を作成

Oracle SQL*Plus
SQL> -- 表領域の作成
SQL> CREATE TABLESPACE SCOTT3
  2    DATAFILE 'F:\orawin95\database\SCOTT3.ORA' SIZE 1M
  3    AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
  4    DEFAULT STORAGE(INITIAL 1M NEXT 1M
  5      MINEXTENTS 1 MAXEXTENTS 100 PCTINCREASE 0);

表領域が作成されました。
SQL> --  ユーザー作成
SQL> CREATE USER SCOTT3 IDENTIFIED BY TIGER
  2    DEFAULT TABLESPACE SCOTT3
  3    TEMPORARY TABLESPACE USER_TEMP;

ユーザーが作成されました。

SQL> --  権限付与
SQL> GRANT CONNECT, RESOURCE TO SCOTT3;

権限付与が成功しました。

SQL> 

3. 定義情報の確認

DBA_USERS を参照しユーザーの定義情報を確認します。SCOTT の DEFAULT_TABLESPACE は USER_DATA 、SCOTT3 の DEFAULT_TABLESPACE は SCOTT3 になっていることを確認してください。

Oracle SQL*Plus
SQL> -- ユーザー情報保確認
SQL> SELECT * FROM DBA_USERS WHERE USERNAME IN('SCOTT', 'SCOTT3');

USERNAME                         USER_ID PASSWORD
------------------------------ --------- ------------------------------
ACCOUNT_STATUS                   LOCK_DAT EXPIRY_D DEFAULT_TABLESPACE
-------------------------------- -------- -------- ------------------------------
TEMPORARY_TABLESPACE           CREATED  PROFILE
------------------------------ -------- ------------------------------
EXTERNAL_NAME
----------------------------------------------------------------------------------------------------
SCOTT3                                72 32520D2855793B9C
OPEN                                               SCOTT3
USER_TEMP                      02-07-20 DEFAULT


SCOTT                                 20 F894844C34402B67
OPEN                                               USER_DATA
TEMPORARY_DATA                 98-01-29 DEFAULT



SQL>  

4. ユーザー SCOTT3 にデータを IMPORT

MS-DOS プロンプト
G:\Work>IMP80 SCOTT3/TIGER FROMUSER=SCOTT TOUSER=SCOTT3 FILE=SCOTT.DMP

5.テーブル情報の確認

Oracle SQL*Plus
-- テーブル情報の確認
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM DBA_TABLES WHERE OWNER = 'SCOTT3';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
BONUS                          USER_DATA
DEPT                           USER_DATA
EMP                            USER_DATA
PLAN_TABLE                     USER_DATA
SALGRADE                       USER_DATA

SQL> 

6. ユーザー SCOTT3 を削除し再作成

Oracle SQL*Plus
SQL> DROP USER SCOTT3 CASCADE;

ユーザーが削除されました。

SQL> --  ユーザー作成
SQL> CREATE USER SCOTT3 IDENTIFIED BY TIGER
  2    DEFAULT TABLESPACE SCOTT3
  3    TEMPORARY TABLESPACE USER_TEMP;

ユーザーが作成されました。

SQL> 
SQL> --  権限付与
SQL> GRANT CONNECT, RESOURCE TO SCOTT3;

権限付与が成功しました。

SQL> 

7. UNLIMITED TABLESPACE権限の取消とQUOTAの付与

Oracle SQL*Plus
SQL> -- UNLIMITED TABLESPACE権限の取消
SQL> REVOKE UNLIMITED TABLESPACE FROM SCOTT3;

取消しが成功しました。

SQL> 
SQL> -- 領域獲得権(QUOTA)を付与
SQL> ALTER USER SCOTT3 QUOTA UNLIMITED ON SCOTT3;

ユーザーが変更されました。

SQL> 

8. ユーザー SCOTT3 にデータを IMPORT

MS-DOS プロンプト
G:\Work>IMP80 SCOTT3/TIGER FROMUSER=SCOTT TOUSER=SCOTT3 FILE=SCOTT.DMP

9. テーブル情報の確認

Oracle SQL*Plus
SQL> -- テーブル情報の確認
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM DBA_TABLES WHERE OWNER = 'SCOTT3';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
BONUS                          SCOTT3
DEPT                           SCOTT3
EMP                            SCOTT3
PLAN_TABLE                     SCOTT3
SALGRADE                       SCOTT3

SQL> 

10. UNLIMITED TABLESPACE 権限を付与

Oracle SQL*Plus
SQL> GRANT UNLIMITED TABLESPACE TO SCOTT3;

権限付与が成功しました。

SQL> 

INDEX PREV NEXT