Oracle數(shù)據(jù)庫數(shù)據(jù)遷移完整解決步驟
問題描述:
oracle數(shù)據(jù)庫的所有表結(jié)構(gòu)、數(shù)據(jù)、索引等需要需從測試庫遷移到正式庫。
解決步驟:
oracle數(shù)據(jù)庫遷移,主要通過expdp從測試庫所在的源服務(wù)器將指定的數(shù)據(jù)表或數(shù)據(jù)源導(dǎo)出為一個或多個數(shù)據(jù)文件(.dmp文件),導(dǎo)出的數(shù)據(jù)可以在正式庫中通過impdp數(shù)據(jù)導(dǎo)入工具進行導(dǎo)入。
前提:服務(wù)器為linux系統(tǒng)。
1、源服務(wù)器操作
(1)創(chuàng)建目錄
在源服務(wù)器上創(chuàng)建一個目錄對象,用于指定導(dǎo)入數(shù)據(jù)文件的路徑??梢允褂靡韵旅顒?chuàng)建目錄對象:
# su - oracle # sqlplus / as sysdba SQL> create or replace directory tmpDir as '/tempFile'
tmpDir是目錄對象的名稱,/tempFile是導(dǎo)入數(shù)據(jù)文件的路徑。
(2)使用expdp導(dǎo)出數(shù)據(jù)表
# su - oracle # expdp username/password@Ip:port/database schemas=dbTest directory=tmpDir dumpfile=export.dmp logfile=export.log
- username/password@Ip:port/database:指定要導(dǎo)出的數(shù)據(jù)庫用戶及其密碼、數(shù)據(jù)庫ip、端口、數(shù)據(jù)庫名稱;如果執(zhí)行命令的服務(wù)器就是該數(shù)據(jù)庫的服務(wù)器,則ip地址和數(shù)據(jù)庫默認(rèn)端口可以省略。
- schemas=dbTest:指定要導(dǎo)出的數(shù)據(jù)庫用戶名稱;
- directory=tmpDir:指定導(dǎo)出的數(shù)據(jù)文件路徑,這里的tmpDir是預(yù)先定義的一個目錄對象;
- dumpfile=export.dmp:指定導(dǎo)出的數(shù)據(jù)文件名稱,這里的export.dmp是數(shù)據(jù)導(dǎo)出時生成的數(shù)據(jù)文件;
- logfile=export.log:指定導(dǎo)出日志文件名稱。
擴展:
導(dǎo)出單個表的語句:
# expdp username/password@Ip:port/database directory=tmpDir dumpfile=export.dmp tables=student,school,teacher
其中,tables是要導(dǎo)入的數(shù)據(jù)表名稱,多個數(shù)據(jù)表之間使用逗號分隔
(3)復(fù)制dmp文件到目標(biāo)服務(wù)器
# scp -P 2222 /tempFile/export.dmp name@xxx.xxx.xxx.xxx:/home/tempFile
輸入目標(biāo)服務(wù)器密碼,按回車,文件就會自動傳輸?shù)侥繕?biāo)服務(wù)器中指定的文件夾中。
其中,name@xxx.xxx.xxx.xxx中name為目標(biāo)服務(wù)器登陸賬號,xxx.xxx.xxx.xxx為目標(biāo)服務(wù)器ip地址。2222是目標(biāo)服務(wù)器的端口號。
如果目標(biāo)服務(wù)器部署22端口或者目標(biāo)服務(wù)器與源服務(wù)器端口不一致,則需要用【-P 端口】指定目標(biāo)服務(wù)器端口。
2、目標(biāo)服務(wù)器操作
(1)創(chuàng)建目錄
在目標(biāo)服務(wù)器上創(chuàng)建一個目錄對象,用于指定導(dǎo)入數(shù)據(jù)文件的路徑??梢允褂靡韵旅顒?chuàng)建目錄對象:
# su - oracle # sqlplus / as sysdba SQL> create or replace directory tmpDir as '/tempFile'
tmpDir是目錄對象的名稱,/tempFile是導(dǎo)入數(shù)據(jù)文件的路徑。
(2)使用impdp導(dǎo)入數(shù)據(jù)表
# su - oracle # impdp username/password@Ip:port/database schemas=dbTest directory=tmpDir dumpfile=export.dmp job_name=myjob
- username/password@Ip:port/database:指定要導(dǎo)入的數(shù)據(jù)庫用戶及其密碼、數(shù)據(jù)庫ip、端口、數(shù)據(jù)庫名稱;
- schemas=dbTest:指定要導(dǎo)入的數(shù)據(jù)庫用戶名稱;
- directory=tmpDir:指定導(dǎo)入的數(shù)據(jù)文件路徑,這里的tmpDir是預(yù)先定義的一個目錄對象;
- dumpfile=export.dmp:指定導(dǎo)入的數(shù)據(jù)文件名稱,這里的export.dmp是數(shù)據(jù)導(dǎo)出時生成的數(shù)據(jù)文件;
- job_name=myjob:指定導(dǎo)入任務(wù)的名稱,這里的myjob是自定義的任務(wù)名稱。
如果源表對象和目標(biāo)表對象不一致則需要用remap_schema,重新對應(yīng)遷移原表對象和目標(biāo)表對象。
# impdp username/password@Ip:port/database remap_schema=dbTest:oprection directory=tmpDir dumpfile=export.dmp job_name=myjob
注意:
remap_schema=dbTest:oprection中格式為dmp文件所在的schema:目標(biāo)服務(wù)器數(shù)據(jù)庫的schema。
擴展
(1)單表導(dǎo)入:
# impdp username/password@Ip:port/database directory=tmpDir dumpfile=export.dmp tables=student,school,teacher
需要注意的是,在導(dǎo)入數(shù)據(jù)表時,如果目標(biāo)數(shù)據(jù)庫中已經(jīng)存在同名的數(shù)據(jù)表,需要使用REMAP_TABLE選項將數(shù)據(jù)表重新映射到新的表名或者新的表空間中,例如:
# impdp username/password@database_schema tables=table1,table2 directory=tmpDir dumpfile=export.dmp logfile=import.log REMAP_TABLE=table1:new_table1,table2:new_table2
替換已存在的表需加上:table_exists_action=replace
報錯處理:
1、權(quán)限問題
導(dǎo)入的dmp文件需要設(shè)置下權(quán)限,然后重新進行導(dǎo)入操作。
# chmod 777 /home/tempFile/export.dmp
2、expdp命令導(dǎo)出報錯UDE-00010:multiple job modes requested, schema and tables
當(dāng)使用expdp命令導(dǎo)出單個數(shù)據(jù)表時,需要指定TABLES選項來指定要導(dǎo)出的表名,同時也需要指定SCHEMAS選項來指定要導(dǎo)出的數(shù)據(jù)庫用戶。如果同時指定了TABLES和SCHEMAS選項,可能會出現(xiàn)UDE-00010錯誤,提示“multiple job modes requested, schema and tables”。
解決這個問題,可以在導(dǎo)出命令中只指定TABLES選項,不指定SCHEMAS選項。例如:
# expdp username/password@database_schema tables=table_name directory=data_pump_dir dumpfile=export.dmp
如果需要導(dǎo)出多個表,可以在TABLES選項中使用逗號分隔多個表名
3、主鍵插入失敗
導(dǎo)出測試庫的時候數(shù)據(jù)在更新,導(dǎo)致了dmp文件中設(shè)備主鍵的值有重復(fù)的,需要刪除數(shù)據(jù)后,手動新建主鍵。
總結(jié)
到此這篇關(guān)于Oracle數(shù)據(jù)庫數(shù)據(jù)遷移完整解決步驟的文章就介紹到這了,更多相關(guān)Oracle數(shù)據(jù)遷移內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過sql準(zhǔn)確查出一天數(shù)據(jù)的方法
之前做一個項目的時候想用sql查出某人一天做的數(shù)據(jù),但怎么查都沒有準(zhǔn)確查出。最近通過查閱萬卷書籍終于知道了如何準(zhǔn)確查出一天的數(shù)據(jù)。所以想著總結(jié)出來分享給大家,或許對有需要的朋友們能帶來一定的幫助,下面來一起看看吧。2016-12-12Windows下編寫批處理腳本來啟動和重置Oracle數(shù)據(jù)庫
這篇文章主要介紹了Windows下編寫cmd腳本來對Oracle數(shù)據(jù)庫執(zhí)行啟動和重置的方法,只需在bat文件中保存cmd shell之后就可以雙擊使用,簡單粗暴,需要的朋友可以參考下2016-03-03Oracle 數(shù)據(jù)庫忘記sys與system管理員密碼重置操作方法
這篇文章主要介紹了Oracle 數(shù)據(jù)庫忘記sys與system管理員密碼重置操作,需要的朋友可以參考下2017-06-06Oracle新建用戶、角色,授權(quán),建表空間的sql語句
Oracle創(chuàng)建用戶操作相信大家都不陌生,下面就為您介紹Oracle創(chuàng)建用戶的語法的相關(guān)知識,希望對您學(xué)習(xí)Oracle創(chuàng)建用戶的方面能有所幫助2012-07-07解決Oracle ORA-01017:invalid username/password:logon
這篇文章主要介紹了解決Oracle ORA-01017:invalid username/password:logon denied的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05Win11系統(tǒng)下Oracle11g數(shù)據(jù)庫下載與安裝使用詳細(xì)教程(圖解)
Oracle11g是Oracle公司出的一個比較輕量版的數(shù)據(jù)庫,在window系統(tǒng)上安裝比較方便,這篇文章主要給大家介紹了關(guān)于Win11系統(tǒng)下Oracle11g數(shù)據(jù)庫下載與安裝使用的相關(guān)資料,需要的朋友可以參考下2023-12-12Oracle字段根據(jù)逗號分割查詢數(shù)據(jù)的方法
項目需求是這樣的表里的某個字段存儲的值是以逗號分隔開來的,要求根據(jù)分隔的每一個值都能查出來數(shù)據(jù),但是不能使用like查詢。這篇文章主要介紹了Oracle字段根據(jù)逗號分割查詢數(shù)據(jù),需要的朋友可以參考下2018-08-08EXISTS關(guān)鍵字在Oracle中的簡單使用例子
在Oracle中IN和EXISTS都是用于子查詢的比較運算符,但它們的使用方式和操作結(jié)果有所不同,這篇文章主要給大家介紹了關(guān)于EXISTS關(guān)鍵字在Oracle中的簡單使用,需要的朋友可以參考下2024-04-04