首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Exp/Imp 以 SYSDBA 身分匯出匯入:語法、平台差異與表空間傳輸實戰

     編輯:Oracle 資料庫基礎

前言:何時需要 SYSDBA 權限執行 Exp/Imp?

一般 Schema 級遷移使用應用用戶即可。但以下場景必須以 SYSDBA 身分執行:

  1. 可傳輸表空間 (TTS):匯出/匯入表空間中繼資料需存取內部字典。
  2. SYS/SYSTEM 物件遷移:如遷移系統統計資訊、資源管理計劃、排程器任務。
  3. Oracle 技術支援要求:生成特定診斷 DMP。

本文詳細說明 Windows/Unix 平台的語法差異、參數檔寫法、TTS 實戰指令。

一、命令列模式語法

Windows 平台

C:\> exp 'sys/password@instance AS SYSDBA' tables=SCOTT.EMP file=E:\emp.dmp
  • 單引號包裹完整連接字串,雙引號在 CMD 中會被解析,故用單引號。

Unix/Linux 平台(需轉義單引號)

$ exp \'sys/password@instance AS SYSDBA\' tables=SCOTT.EMP file=/home/oracle/emp.dmp
  • Shell 會吃掉單引號,需反斜線轉義 \',或改用雙引號包裹整體: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

四、表空間傳輸 (TTS) 實戰:SYSDBA 匯出/匯入全流程

前置條件

  • 來源/目標平台相同(或 10g+ 跨平台支援且 Endian 相同)。
  • 表空間集自包含(DBMS_TTS.TRANSPORT_SET_CHECK 驗證通過)。
  • 表空間設為 READ ONLY。

1. 來源端:設為 READ ONLY 並匯出中繼資料

-- 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

2. 複製資料檔

# 二進位模式複製(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/

3. 來源端:恢復 READ WRITE

ALTER TABLESPACE APP_DATA READ WRITE;
ALTER TABLESPACE APP_INDEX READ WRITE;

4. 目標端:建立用戶/權限並匯入中繼資料

-- 建立業務用戶(若不存在)
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

5. 目標端:設為 READ WRITE

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資料檔路徑不存在或非 OMFDATAFILES 參數指定完整目標路徑
ORA-01503: CREATE TABLESPACE failed目標已有同名表空間先 DROP 目標表空間(含內容與檔案)

六、安全最佳實踐

  1. 避免密碼明文:使用 Oracle Wallet (mkstore) 儲存 SYS 認證,腳本中 USERID=/@db_alias AS SYSDBA。
  2. 審計追蹤:啟用 AUDIT_SYS_OPERATIONS=TRUE,所有 SYSDBA 操作寫入 OS 審計檔。
  3. 最小權限原則:非 TTS/系統物件遷移場景,嚴禁使用 SYSDBA 執行 Exp/Imp。

結語

以 SYSDBA 身分執行 Exp/Imp 是表空間傳輸、系統物件遷移、廠商支援的必要手段。掌握 Windows/Unix 語法差異、參數檔雙引號寫法、TTS 完整流程(READ ONLY → EXP METADATA → COPY DATAFILES → IMP METADATA → READ WRITE),即可安全、高效完成跨庫表空間遷移。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved