溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle和MySQL的數(shù)據(jù)導(dǎo)入方式有什么區(qū)別

發(fā)布時(shí)間:2020-08-15 11:46:19 來源:億速云 閱讀:102 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Oracle和MySQL的數(shù)據(jù)導(dǎo)入方式有什么區(qū)別的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。

經(jīng)常會(huì)有一些朋友咨詢我一些數(shù)據(jù)庫的問題,我注意到一個(gè)很有意思的現(xiàn)象,凡是數(shù)據(jù)導(dǎo)入的問題,基本上都是Oracle類的,MySQL類的問題腦子里想了下竟然一次都沒有。

我禁不住開始思考這個(gè)未曾注意的問題:

為什么Oracle導(dǎo)入數(shù)據(jù)會(huì)碰到很多的問題?

我們來梳理一下這個(gè)問題,分別從導(dǎo)出導(dǎo)入的方式來聊聊。

首先Oracle導(dǎo)出的文件格式就沒打算讓你拿來即用,導(dǎo)出文件叫做dump,換句話說可以理解這是一個(gè)二進(jìn)制文件。當(dāng)然實(shí)際上這個(gè)文件還是有很多的方式去抓取一些關(guān)鍵的信息,比如dump頭部的信息可以通過strings來解析得到,我甚至在多年前碰到一個(gè)比較棘手的問題,DBA直接vim修改dump文件,這個(gè)操作風(fēng)險(xiǎn)和成本是比較高的。

導(dǎo)出有哪些工具呢,主要有exp,expdp這兩個(gè)工具,expdp的導(dǎo)出性能相對(duì)來說可以更加充分利用系統(tǒng)資源,導(dǎo)出的效率更高。exp相對(duì)來說對(duì)于一些小表還是比較省事的,expdp的導(dǎo)出是基于服務(wù)端模式的,也就是你需要做一些數(shù)據(jù)庫層的配置才可以,這無疑增加了一些技術(shù)門檻。

不知道大家注意到一個(gè)問題沒有,那就是Oracle提供了SQL*Loader的工具導(dǎo)入,但是卻沒有一直提供一種簡(jiǎn)單有效的導(dǎo)出csv的工具,在導(dǎo)出的時(shí)候算是各路英雄漢使盡各種技藝,結(jié)合數(shù)據(jù)字典,結(jié)合文本過濾來完成。

MySQL的導(dǎo)出方法相對(duì)比較簡(jiǎn)單,設(shè)計(jì)思路很有意思,導(dǎo)出的文件就是可以直接打開,可以直接修改的SQL文件。這個(gè)設(shè)計(jì)在很多應(yīng)用場(chǎng)景中簡(jiǎn)直絕了,對(duì)于開發(fā)同學(xué)是非常友好的。

導(dǎo)出工具原生的有mysqldump,新版本的是mysqlpump(總體感覺性價(jià)比不是很高),當(dāng)然還有一些補(bǔ)充的第三方工具,比如mydumper之類的。

所以導(dǎo)出這件事情,對(duì)于開發(fā)同學(xué)本身是有一個(gè)門檻的,而且在隔行如隔山的情況下,很多同學(xué)使用expdp導(dǎo)出的時(shí)候都一頭霧水。從安全性來看,這個(gè)二進(jìn)制文件是原汁原味的,從靈活性來看,MySQL基于SQL文本的方式是比較便捷。

導(dǎo)出的部分其實(shí)不是最主要的,產(chǎn)生隔閡最大的是導(dǎo)入的部分,也是提出問題最多的。

MySQL有什么數(shù)據(jù)導(dǎo)入工具,可以理解沒有,就是SQL文本,你想怎么執(zhí)行都可以。包括工具mysqldump,mysqlpump導(dǎo)出的文件都是如此,mydump有個(gè)配套的myloader算是一個(gè)小小的例外。

Oracle有什么導(dǎo)入工具,有,而且是配套的,exp對(duì)應(yīng)imp,expdp對(duì)應(yīng)impdp

常見的數(shù)據(jù)導(dǎo)入問題有:

1)提示用戶創(chuàng)建失敗,導(dǎo)入失敗

2)提示表空間不存在,導(dǎo)入失敗

3)導(dǎo)入時(shí)如果創(chuàng)建的數(shù)據(jù)文件空間不足,導(dǎo)入失敗

4)導(dǎo)入時(shí)的用戶權(quán)限不足,導(dǎo)入失敗

所以我要導(dǎo)入一個(gè)dump文件,如果是exp導(dǎo)出的,解析成本還算低一些。

而如果是expdp導(dǎo)出的,通常很多開發(fā)同學(xué)都會(huì)一臉懵逼。

1)導(dǎo)入要輸入一個(gè)目錄,什么是目錄,不是系統(tǒng)目錄嗎?

2)如果數(shù)據(jù)庫用戶已經(jīng)存在,已經(jīng)存在10張表,導(dǎo)入的時(shí)候默認(rèn)會(huì)直接忽略這10章表,除非你手工刪除或者選擇額外的選項(xiàng),比如replace或者truncate等。

3)表空間源端和目標(biāo)端環(huán)境不一致,要想知道到底有哪些表空間不一致,解析dump文件實(shí)話說不是很方便,有一個(gè)高級(jí)選項(xiàng)是remap_tablespaces

4)數(shù)據(jù)導(dǎo)入之后,業(yè)務(wù)同學(xué)發(fā)現(xiàn)有些表還是訪問不了,不好,需要重新分配下權(quán)限。

通常來說,如果要導(dǎo)入一個(gè)dump,在Oracle側(cè)其實(shí)是一件很嚴(yán)肅的事情,我們需要?jiǎng)?chuàng)建目錄:

create directory dump_data as '/data/dump_data';

grant read,write on directory dump_data to xxxx;

配置表空間存儲(chǔ),有哪些表空間,哪些表空間需要映射,在數(shù)據(jù)導(dǎo)入之前,這些信息其實(shí)是不好提取的。我通常采用的方式是做下預(yù)導(dǎo)入,就是找個(gè)干凈的環(huán)境,然后默認(rèn)選項(xiàng)導(dǎo)入,看看哪些表空間報(bào)錯(cuò),哪些用戶報(bào)錯(cuò),把這些信息提取出來,然后重新拼接一個(gè)導(dǎo)入命令。

在這個(gè)基礎(chǔ)上我去構(gòu)建相關(guān)的表空間和數(shù)據(jù)文件的細(xì)節(jié)。

對(duì)于數(shù)據(jù)文件,我不大喜歡自動(dòng)擴(kuò)展的方式,而是喜歡預(yù)創(chuàng)建出來,然后加上自動(dòng)擴(kuò)展。

最后就是文件導(dǎo)入

impdp system/xxxx directory=dump_data dumpfile=test.DMP logfile=impdp_test.log remap_tablespace=TEST_DATA1:DATA,TEST_DATA2:DATA,TEST_INDEX1:IDX,TEST_INDEX2:IDX

對(duì)于Oracle DBA來說,這應(yīng)該是再正常不過的事情了,而且有很多地方要做到細(xì)致周到的多,但是這樣一個(gè)過程對(duì)于一個(gè)外行來說,成本就很高了。

總是有一種感覺,Oracle就像汽車?yán)锩娴膶汃R一樣,操控性很好,提供了很多專業(yè)有效的管理方式。

而Oracle的角色通常都是百GB起,TB上下,這樣的數(shù)據(jù)量管理,就得適配出各種工具特點(diǎn)和特性。我覺得這些工具一直在追求的是更加高效和安全,可能從這個(gè)角度理解,Oracle的維護(hù)管理模式是需要專人來完成的。

MySQL的管理方式很適合互聯(lián)網(wǎng)這種變化快,而且數(shù)據(jù)量相對(duì)要小一些的環(huán)境。在易用性和學(xué)習(xí)門檻方便簡(jiǎn)直是做到了極致,比如你要到處一些有特色的insert語句(比如按照主鍵排序,顯示完全列名等),都可以通過mysqldump很容易實(shí)現(xiàn)。

感謝各位的閱讀!關(guān)于Oracle和MySQL的數(shù)據(jù)導(dǎo)入方式有什么區(qū)別就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI