天天看點

Oracle資料庫遷移(expdp與impdp)

1、 原資料庫備份,備份為dmp檔案

1.1、sqlplus以dba 方式進入,建立邏輯目錄,該指令不會再硬碟中建立真正的目錄,使用dba賬戶建立:(需要在D盤先将目錄建好)

create or replace directory dmp as ‘d:/dmp’

1.2檢視是否正确建立(硬碟中也要有這個目錄,Oracle并不關心該目錄是否真的存在,如果不存在會報錯):

select * from dba_directories;

1.3目錄建立好之後,就可以把讀寫權限授予特定使用者

grant read,write on directory dmp to mesn;

1.4 把expdp和impdp的權限授予特定使用者

grant imp_full_database,exp_full_database to mesn;

grant connect,resource,dba to mesn;

1.5 expdp備份原資料庫(Window指令行下)

expdp mesn/[email protected] schemas=mesn dumpfile=mes.dmp version=12.2.0.1.0 directory=dmp tables=CBO%

說明:

A、 expdp指令需要在window指令行下,而不是sqlplus指令行下;

B、 可以通過version指定到導出的資料庫版本,比如原資料庫為12.2.0.1.0版本導入到11.2.0.1.0資料庫中;

C、 通過schemas 可以限定需要導出哪個使用者的表;

D、 通過tables可以限定需要導出哪些表,多個表之間用逗号隔開,也支援通配符的形式;

E、 語句後邊不帶分号

2、 需要導入資料庫,将dmp檔案導入到資料庫

2.1相同使用者導入

如果想往同名使用者中導入資料,比如想要做資料的更新,需要删除原來的使用者操作

2.1.1删除原來mesn賬戶及賬戶下面的表

drop user tophrs cascade;

2.1.2重新建立mesn賬戶(與原來賬戶使用同樣的表空間,沒有表空間需要進行建立),并配置設定權限

檢視臨時表空間SQL:(該資料為執行時需要的,非必須)

select * from database_properties where property_name=’DEFAULT_TEMP_TABLESPACE’;

檢視表空間

SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size

FROM dba_tablespaces t, dba_data_files d

WHERE t.tablespace_name = d.tablespace_name

GROUP BY t.tablespace_name;

create user tophrs identified by hrs123456 default tablespace USERS temporary tablespace TEMP;

2.2進行資料庫的導入

2.2.1-2.2.4同1.1-1.4操作

2.2.5 impdp指令,進行資料庫導入(Window指令下)

impdp tophrs/hrs123456 dumpfile=HRSBACK.dmp directory=dmp table_exists_action=append REMAP_SCHEMA=TopHrs:tophrs remap_tablespace=TOPHRS:USERS

說明:

A. impdp指令需要在window指令行下,而不是在sqlplus指令行下;

B. 語句後邊不帶分号

C.

D. table_exists_action

{skip 是如果已

存在表,則跳過并處理下一個對象;

append是為表增加資料;

truncate是截斷表,然後為其增加新資料;

replace是删除已存在表,重建立表并追加資料}

C、通過remap_schema來指定原資料庫的使用者,與導入資料庫的使用者

D、通過remap_tablespace來指定原資料庫的表空間,與導入資料庫的表空間

E、expdp、impdp可以支援空表,可以屏蔽字元集的差異自動進行字元集轉換