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可以支援空表,可以屏蔽字元集的差異自動進行字元集轉換