一般 Schema 級遷移使用應用用戶即可。但以下場景必須以 SYSDBA 身分執行:
本文詳細說明 Windows/Unix 平台的語法差異、參數檔寫法、TTS 實戰指令。
C:\> exp 'sys/password@instance AS SYSDBA' tables=SCOTT.EMP file=E:\emp.dmp
$ exp \'sys/password@instance AS SYSDBA\' tables=SCOTT.EMP file=/home/oracle/emp.dmp
\',或改用雙引號包裹整體:exp "sys/password@instance AS SYSDBA" ...$ exp tables=SCOTT.EMP
Username: 'sys/password@instance AS SYSDBA'
# 直接輸入含 AS SYSDBA 的連接字串
參數檔中連接字串需用雙引號包裹:
# exp_sys.par
USERID="sys/password@instance AS SYSDBA"
FILE=/backup/tts_meta.dmp
LOG=/backup/tts_meta.log
TRANSPORT_TABLESPACE=Y
TABLESPACES=(APP_DATA,APP_INDEX)
$ exp parfile=exp_sys.par
DBMS_TTS.TRANSPORT_SET_CHECK 驗證通過)。-- SQL*Plus
ALTER TABLESPACE APP_DATA READ ONLY;
ALTER TABLESPACE APP_INDEX READ ONLY;
-- 匯出中繼資料 (需 SYSDBA)
$ exp \'sys/password@src AS SYSDBA\' \
TRANSPORT_TABLESPACE=Y \
TABLESPACES=(APP_DATA,APP_INDEX) \
FILE=/backup/tts_meta.dmp \
LOG=/backup/tts_exp.log
# 二進位模式複製(FTP 需 BINARY 模式)
scp /u01/oradata/SRC/app_data*.dbf oracle@target:/u01/oradata/TGT/
scp /u01/oradata/SRC/app_index*.dbf oracle@target:/u01/oradata/TGT/
scp /backup/tts_meta.dmp oracle@target:/backup/
ALTER TABLESPACE APP_DATA READ WRITE;
ALTER TABLESPACE APP_INDEX READ WRITE;
-- 建立業務用戶(若不存在)
CREATE USER app_user IDENTIFIED BY xxx DEFAULT TABLESPACE APP_DATA TEMPORARY TABLESPACE TEMP;
GRANT CREATE SESSION, RESOURCE TO app_user;
-- 匯入中繼資料 (需 SYSDBA)
$ imp \'sys/password@tgt AS SYSDBA\' \
FILE=/backup/tts_meta.dmp \
TRANSPORT_TABLESPACE=Y \
DATAFILES=('/u01/oradata/TGT/app_data01.dbf','/u01/oradata/TGT/app_index01.dbf') \
TABLESPACES=APP_DATA,APP_INDEX \
TTS_OWNERS=APP_USER \
LOG=/backup/tts_imp.log
ALTER TABLESPACE APP_DATA READ WRITE;
ALTER TABLESPACE APP_INDEX READ WRITE;
| 錯誤 | 原因 | 解法 |
|---|---|---|
| ORA-01031: insufficient privileges | 用戶非 SYSDBA 或密碼錯誤 | 確認密碼檔、遠端登入密碼檔 REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE |
| ORA-39083: Object type TABLESPACE failed | 表空間非 READ ONLY 或非自包含 | 執行 EXEC DBMS_TTS.TRANSPORT_SET_CHECK('APP_DATA',TRUE); SELECT * FROM TRANSPORT_SET_VIOLATIONS; |
| IMP-00017: following statement failed with ORACLE error 19527 | 資料檔路徑不存在或非 OMF | DATAFILES 參數指定完整目標路徑 |
| ORA-01503: CREATE TABLESPACE failed | 目標已有同名表空間 | 先 DROP 目標表空間(含內容與檔案) |
mkstore) 儲存 SYS 認證,腳本中 USERID=/@db_alias AS SYSDBA。AUDIT_SYS_OPERATIONS=TRUE,所有 SYSDBA 操作寫入 OS 審計檔。以 SYSDBA 身分執行 Exp/Imp 是表空間傳輸、系統物件遷移、廠商支援的必要手段。掌握 Windows/Unix 語法差異、參數檔雙引號寫法、TTS 完整流程(READ ONLY → EXP METADATA → COPY DATAFILES → IMP METADATA → READ WRITE),即可安全、高效完成跨庫表空間遷移。