我們在導入一個Oracle備份的數據文件(*.dmp)到另外一個數據庫的用戶下時,如果需要更換表空間,可以采用下幾個辦法。
假設導出用戶名:EXP_USER 表空間為:EXP_TSPACE
導入用戶名:IMP_USER 表空間為:IMP_TSPACE
1、設置導入用戶的默認表空間以及權限。
a)建表語句如下:
create user IMP_USER
Sql代碼
identified by "密碼"
default tablespace IMP_TSPACE
temporary tablespace TEMP(臨時表空間)
identified by "密碼"
default tablespace IMP_TSPACE
temporary tablespace TEMP(臨時表空間)
b)只是設置表空間,還是解決不了問題。你會發現,在使用imp命令導入時,導入的表還是建立在EXP_TSPACE表空間上。
原因是:導入的數據庫也存在EXP_TSPACE表空間,同時IMP_SPACE也存在該表空間的使用權限。
可能原因IMP_USER用戶的權限含有含有unlimited tablespace權限。(角色resource、dba包含此權限)。
i. 已存在用戶,不改變其他權限
a) 不改變原有角色或權限,僅去掉無限表空間權限。
命令:revoke unlimited tablespace from IMP_USER;
b) 添加對IMP_TSPACE權限。
命令:alter user qcui quota unlimited on IMP_USER;
ii. 新建用戶,給予最低權限
a) 以下是開發用戶最低權限跟角色的參考:
角色:connect、exp_full_database、imp_full_database
權限:debug connect session(調試存儲過程使用,非必須)
a) 命令語句參考:
Sql代碼
create user IMP_USER
identified by "密碼"
default tablespace IMP_TSPACE
temporary tablespace TEMP
profile DEFAULT
quota unlimited on IMP_TSPACE;
-- Grant/Revoke role privileges
grant connect to IMP_USER;
grant exp_full_database to IMP_USER;
grant imp_full_database to IMP_USER;
-- Grant/Revoke system privileges
grant debug connect session to IMP_USER;
create user IMP_USER
identified by "密碼"
default tablespace IMP_TSPACE
temporary tablespace TEMP
profile DEFAULT
quota unlimited on IMP_TSPACE;
-- Grant/Revoke role privileges
grant connect to IMP_USER;
grant exp_full_database to IMP_USER;
grant imp_full_database to IMP_USER;
-- Grant/Revoke system privileges
grant debug connect session to IMP_USER;
2、 直接修改dmp文件(不推薦)
a) 使用UE等文本工具軟件,可打開並查看DMP文件內容。除部分數據或命令是二進制亂碼外,普通的create table、insert語句都是明文。
b) 批量修改建表語句中的表空間名稱。即:tablespace EXP_TSPACE替換為:tablespace IMP_TSPACE