欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

oracle導入導出某個schema數(shù)據(jù)的步驟

 更新時間:2023年09月06日 09:45:36   作者:返回主頁低級知識傳播者  
這篇文章主要介紹了oracle導入導出某個schema數(shù)據(jù)的步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

背景

公司之前部門拆分,但一些服務并沒有拆分清楚。其中一個老服務,兩個部門都在用,現(xiàn)在為了避免互相影響,決定克隆該服務??寺【鸵寺∪?,當然也包括數(shù)據(jù)庫,我們這個老服務,用的oracle,所以,就涉及到從舊的oracle中導出數(shù)據(jù),然后再導入到另一套新的oracle實例中。

屆時在線上肯定是要物理隔離的,就是oracle要建在各自的服務器上,服務器間網(wǎng)絡隔離;但我現(xiàn)在只是在開發(fā)環(huán)境驗證拆分后功能是否正常,所以偷了個懶,沒有新建實例,只是新建了個用戶,進行邏輯隔離。

下午簡單弄了下,踩了幾個小坑,記錄下來備忘。

導出步驟

schema、用戶

一個oracle實例下,可以有多個用戶,用戶間邏輯隔離。用戶和schema是什么關系呢?可以看我在dbeaver中建schema時候的彈框,直接就說創(chuàng)建schema等同于創(chuàng)建用戶:

創(chuàng)建用戶的時候,默認就會創(chuàng)建一個同名的schema。像表這種東西,不會直接和用戶掛鉤,而是掛在某個schema下,簡單而言,schema相當于是用戶和表、索引這些object間的一個中間層。具體可以看看這篇文章:

https://www.modb.pro/db/508147

要導出的目標

我這邊就是要把如下左側這個HX_PLAT_NEW這個schema中的所有數(shù)據(jù)導出,然后再導入到一個新的schema中(做邏輯隔離)。其實本來想做物理隔離,重新搭個oracle實例,感覺有點繁瑣,先偷個懶吧。

導出的話,我先是看了下dbeaver,發(fā)現(xiàn)好像沒有這塊功能,于是在網(wǎng)上找,發(fā)現(xiàn)有兩種方式:

  • expdp/impdp命令,其優(yōu)勢是速度快,但是稍微復雜一點;
  • exp/imp命令,速度慢,適用于數(shù)據(jù)量較小的情況,使用上簡單一些。

詳細可以參考://www.dbjr.com.cn/article/98363.htm

我這邊表比較多,使用的是expdp/impdp方式。

導出過程遇到的錯誤

首先是找運維拿到了開發(fā)機器的ssh密碼,然后利用netstat -nltp根據(jù)端口找進程,根據(jù)進程找到數(shù)據(jù)庫cwd目錄。

找到后,在機器上執(zhí)行expdp -h,也提示沒有幫助文檔,只能去網(wǎng)上找,改了改如下:

expdp \'sys/1234 as sysdba\' schemas=hx_plat_new DIRECTORY=hx_plat_new_dump DUMPFILE=hx_plat_new.dmp

這里大概就是使用sys這個用戶(密碼:1234)作為sysdba身份登錄,要導出的schema是hx_plat_new,導出后的文件名是hx_plat_new.dmp,文件放到哪里呢,由DIRECTORY這個參數(shù)指定(我自己在當前目錄下建了個hx_plat_new_dump這個目錄)

結果一執(zhí)行,說 ORACLE_HOME 環(huán)境變量不存在,設置:

vim /etc/profile
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
source /etc/profile

再一執(zhí)行,說 ORACLE_SID 這個環(huán)境變量找不到,雖然幾年前搞過一陣oracle,現(xiàn)在我都不記得這玩意是啥,怎么設置了。

網(wǎng)上找到個sql查sid:

SELECT sys_context('USERENV', 'DB_NAME') AS ORACLE_SID FROM dual;
或者
SELECT sys_context('userenv','instance_name') FROM dual;

接著設置環(huán)境變量:

export ORACLE_SID=orcl

再執(zhí)行,說目錄不存在,查了下,原來directory后面不是亂寫的,目錄需要先創(chuàng)建,這里再引用。我這邊是直接查了下現(xiàn)在有哪些可以用的目錄:

SELECT directory_name, directory_path FROM dba_directories

所以,這邊把目錄改成了第四個(隨便選一個),或者自己也可以自己新建,建完還要給用戶授權:

# 創(chuàng)建文件夾
create directory 文件夾名稱 as '路徑,基于系統(tǒng)';
# 將文件夾讀寫權限給被授權用戶
grant read,write on directory 文件夾名稱 to 被授權用戶;

最終的命令是:

expdp \'sys/1234QWER as sysdba\' schemas=hx_plat_new DIRECTORY=DATA_PUMP_DIR DUMPFILE=hx_plat_new.dmp

然后在 /u01/app/oracle/admin/orcl/dpdump/hx_plat_new.dmp 下就生成文件了。

導入步驟

建立新的schema

先是在dbeaver上建了個schema叫:hx_plat_split_test。

然后構造好了導入的命令:

impdp \'sys/oracle as sysdba\'  DIRECTORY=DATA_PUMP_DIR DUMPFILE=hx_plat_new.dmp  schemas=HX_PLAT_SPLIT_TEST

結構一直報錯說schema:HX_PLAT_SPLIT_TEST找不到:

后邊比較了下這個在dbeaver中建的用戶和其他用戶,感覺有點不一樣:

于是把dbeaver建出來的刪了,在sqlplus中創(chuàng)建。

SQL> CREATE USER HX_PLAT_SPLIT_TEST IDENTIFIED BY "1qazxxxx";
User created.

建用戶的過程中,當時也報錯,后來發(fā)現(xiàn)是說,密碼如果是數(shù)字開頭,必須用雙引號。

參考:https://stackoverflow.com/questions/36612365/oracle-sql-plus-error-ora-00922-missing-or-invalid-option-when-creating-user

導入

新建用戶后執(zhí)行,還是報相同錯誤,后來以為是權限問題導致,準備對比下這個用戶是不是權限和其他人不一樣。網(wǎng)上看了幾篇講權限的文章,發(fā)現(xiàn)挺復雜,于是先不深究,找了個sql先執(zhí)行下授權:

GRANT IMP_FULL_DATABASE TO HX_PLAT_SPLIT_TEST;

結果還是沒效果。后面網(wǎng)上查了下,發(fā)現(xiàn)有個文章很像我的問題:

http://www.dbjr.com.cn/database/297406wu3.htm

通過以下命令導入數(shù)據(jù)到oracle數(shù)據(jù)庫,報"ORA-39002: 操作無效","ORA-39165: 未找到方案" 錯誤

impdp tms/tms123@orcl schema=tms directory=dump_dir dumpfile=ZBTMS2021031701.DMP原因是通過expdp導出的用戶,與需要導入的用戶名稱不一致

意思就是,導出和導入的用戶不一樣會有這個問題,于是照著改了改。

impdp \'sys/oracle as sysdba\' remap_schema=HX_PLAT_NEW:HX_PLAT_SPLIT_TEST remap_tablespace=HX_PLAT_NEW:HX_PLAT_SPLIT_TEST DIRECTORY=DATA_PUMP_DIR DUMPFILE=hx_plat_new.dmp schemas=HX_PLAT_SPLIT_TEST

發(fā)現(xiàn)還是報錯,后面去掉了最后的 schemas=HX_PLAT_SPLIT_TEST

impdp \'sys/oracle as sysdba\' remap_schema=HX_PLAT_NEW:HX_PLAT_SPLIT_TEST remap_tablespace=HX_PLAT_NEW:HX_PLAT_SPLIT_TEST DIRECTORY=DATA_PUMP_DIR DUMPFILE=hx_plat_new.dmp

嗯,這下ok了。

總結

oracle這個還是過于復雜了,幾年前也是小公司,dba出差了,項目需要,被迫搞了一陣,太痛苦了,幾年下來,又全忘了。

參考資料

這里記錄下后續(xù)發(fā)現(xiàn)的一些不錯的參考資料:

官方,包含命令的各個選項的意思(11g版本的):

https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_export.htm#SUTIL824

https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_import.htm#SUTIL300

https://mp.weixin.qq.com/s/voGgQseZQCp30J6Rx-vNcQ

https://mp.weixin.qq.com/s/m7GrQnJ-QalTf1lluUO4Gg

https://mp.weixin.qq.com/s/IvzXv4CKAQELGKcH3tbW4Q

如果沒有服務器登錄權限,可以采用第三方工具如TOAD:

https://mp.weixin.qq.com/s/hFmH-k6Bs65xlswU50bhfg

到此這篇關于oracle導入導出某個schema數(shù)據(jù)的文章就介紹到這了,更多相關oracle導入導出某個schema數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論