国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

從 Oracle 到 MySQL 數(shù)據(jù)庫(kù)的遷移之旅

這篇具有很好參考價(jià)值的文章主要介紹了從 Oracle 到 MySQL 數(shù)據(jù)庫(kù)的遷移之旅。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄
  • 引言
  • 一、前期準(zhǔn)備工作
    • 1.搭建新的MySQL數(shù)據(jù)庫(kù)
    • 2 .建立相應(yīng)的數(shù)據(jù)表
      • 2.1 數(shù)據(jù)庫(kù)兼容性分析
        • 2.1.1 字段類(lèi)型兼容性分析
        • 2.1.2 函數(shù)兼容性分析
        • 2.1.3 是否使用存儲(chǔ)過(guò)程?存儲(chǔ)過(guò)程的個(gè)數(shù)?復(fù)雜度?
        • 2.1.4 是否使用觸發(fā)器?個(gè)數(shù)?使用的場(chǎng)景?
      • 2.2 建表過(guò)程中其他需要注意的事項(xiàng)
    • 3.為項(xiàng)目配置Oracle和MySQL雙數(shù)據(jù)源
    • 4.對(duì)項(xiàng)目進(jìn)行改造添加MySQL數(shù)據(jù)CRUD代碼
  • 二、數(shù)據(jù)遷移操作步驟
      • 1、配置初始化
      • 2、同步數(shù)據(jù)檢查
      • 3、全量數(shù)據(jù)遷移
      • 4、檢查全量遷移的數(shù)據(jù)
      • 5、開(kāi)啟雙寫(xiě)
      • 6、獲取遷移過(guò)程中oracle數(shù)據(jù)庫(kù)的增量數(shù)據(jù)
      • 7、增量數(shù)據(jù)腳本準(zhǔn)備
      • 8、數(shù)據(jù)補(bǔ)償
      • 9、核對(duì)整體數(shù)據(jù)
      • 10、在灰度環(huán)境里驗(yàn)證數(shù)據(jù)的正確性
      • 11、數(shù)據(jù)庫(kù)讀取的配置設(shè)置為從MySQL數(shù)據(jù)庫(kù)讀取。
      • 12、數(shù)據(jù)庫(kù)寫(xiě)入的配置設(shè)置為只寫(xiě)MySQL
  • 三、數(shù)據(jù)遷移的經(jīng)驗(yàn)教訓(xùn)
    • 1. 遇到的坑

引言

隨著技術(shù)的進(jìn)步,許多企業(yè)開(kāi)始考慮將他們的數(shù)據(jù)從Oracle遷移到更現(xiàn)代、成本效益更高的數(shù)據(jù)庫(kù)系統(tǒng)如MySQL或PostgreSQL。本文將詳細(xì)描述我們?nèi)绾芜M(jìn)行這樣的數(shù)據(jù)遷移過(guò)程。

一、前期準(zhǔn)備工作

1.搭建新的MySQL數(shù)據(jù)庫(kù)

? 首先,我們需要設(shè)置一個(gè)新的MySQL數(shù)據(jù)庫(kù)環(huán)境,這將作為我們的新數(shù)據(jù)源。這包括安裝MySQL服務(wù)器,創(chuàng)建數(shù)據(jù)庫(kù),以及配置適當(dāng)?shù)挠脩?hù)權(quán)限。

2 .建立相應(yīng)的數(shù)據(jù)表

? 我們可以使用PowerDesigner等數(shù)據(jù)表模型設(shè)計(jì)工具,將Oracle的模型轉(zhuǎn)換成MySQL模型,然后根據(jù)這個(gè)模型生成DDL腳本。這些腳本可能需要根據(jù)實(shí)際情況進(jìn)行一些修改。例如,我們可能需要調(diào)整字段類(lèi)型以適應(yīng)MySQL的特性,或者修改索引和約束的定義。

2.1 數(shù)據(jù)庫(kù)兼容性分析

2.1.1 字段類(lèi)型兼容性分析

以下是常用的oracle字段類(lèi)型和和mysql字段類(lèi)型的對(duì)應(yīng)關(guān)系 ,如果使用特殊的字段類(lèi)型,需要檢查確認(rèn)字段轉(zhuǎn)換是否符合真實(shí)需求。

oracle字段類(lèi)型 mysql字段類(lèi)型
varchar2 varchar
number(1,0))->number(2,0) tinyint
number(3,0)->number(4,0) smallint
number(5,0)->number(6,0) mediumint
number(7,0)->number(9,0) int
number(10,0) -> number(18,0) bigint
number(x,y) decimal(x,y)
date datetime
timestamp(6) datetime
char varchar
clob Text 或 Midiumtext 或 longtext

2.1.2 函數(shù)兼容性分析

Oracle和MySQL的函數(shù)有一定對(duì)的相似性也要有一定的區(qū)別,下面表格列出了Oracle和MySQL常用函數(shù)的對(duì)比和區(qū)別。

功能 oracle函數(shù) mysql函數(shù) 備注
舍入函數(shù) round round 一樣
取絕對(duì)值 abs abs 一樣
返回 expr 的最小或最大值 Max(expr)/Min(expr) Max(expr)/Min(expr) 一樣
在字符串 str 中所有出現(xiàn)的字符串 from_str 均被 to_str 替換 REPLACE(str,from_str,to_str) REPLACE(str,from_str,to_str) 一樣
截取函數(shù) SUBSTR('abcd',2,2) substring('abcd',2,2) 函數(shù)名稱(chēng)不同
獲取長(zhǎng)度 length(str) char_length() 函數(shù)名稱(chēng)不同
轉(zhuǎn)大寫(xiě) UPPER(str) UPPER(str) 一樣
轉(zhuǎn)小寫(xiě) LOWER(str) LOWER(str) 一樣
轉(zhuǎn)字符 TO_CHAR(SQLCODE) date_format/ time_format 函數(shù)名稱(chēng)不同
轉(zhuǎn)時(shí)間 to_date(str,format) STR_TO_DATE(str,format) 函數(shù)名稱(chēng)不同
獲取當(dāng)前時(shí)間 SYSDATE now() / SYSDATE() 函數(shù)名稱(chēng)不同
求和 SUM(num) SUM(num) 一樣
返回兩個(gè)日期之間的天數(shù) (D1-D2) DATEDIFF(date1,date2)

2.1.3 是否使用存儲(chǔ)過(guò)程?存儲(chǔ)過(guò)程的個(gè)數(shù)?復(fù)雜度?

在這次的案例中,沒(méi)有使用存儲(chǔ)過(guò)程,因此不需要進(jìn)行這方面的分析。

2.1.4 是否使用觸發(fā)器?個(gè)數(shù)?使用的場(chǎng)景?

公司的數(shù)據(jù)庫(kù)使用規(guī)范里禁止使用觸發(fā)器,因此這次也不需要進(jìn)行這方面的分析。

2.2 建表過(guò)程中其他需要注意的事項(xiàng)

  • 自增主鍵 mysql默認(rèn)需要有自增主鍵,而oracle的表可以不加主鍵
  • 編碼格式:oracle的編碼格式utf8在mysql需要修改成utf8mb4 要確保所有的表都有一個(gè)自增的主鍵列。
  • 時(shí)間字段:時(shí)間字段需要精確到時(shí)分秒的需要修改為datatime類(lèi)型。這是因?yàn)镸ySQL的DATETIME類(lèi)型可以存儲(chǔ)到秒級(jí)別的時(shí)間信息,而Oracle的DATE類(lèi)型只能存儲(chǔ)到天級(jí)別的時(shí)間信息。
  • 索引格式:索引格式需要按照規(guī)范重新定義,最好在測(cè)試環(huán)境中進(jìn)行檢查和校驗(yàn)。這是因?yàn)镺racle和MySQL的索引實(shí)現(xiàn)方式有所不同,直接復(fù)制索引可能會(huì)導(dǎo)致性能問(wèn)題。

3.為項(xiàng)目配置Oracle和MySQL雙數(shù)據(jù)源

在項(xiàng)目的數(shù)據(jù)源配置里添加剛剛新建的MySQL數(shù)據(jù)源配置,并配置雙數(shù)據(jù)源和Mapper的匹配規(guī)則。

4.對(duì)項(xiàng)目進(jìn)行改造添加MySQL數(shù)據(jù)CRUD代碼

添加一套針對(duì)MuSQL數(shù)據(jù)庫(kù)CRUD的Dao和Mapper代碼,同時(shí)我們寫(xiě)了一個(gè)注解以切面的方式實(shí)現(xiàn)根據(jù)配置實(shí)例化Oracle的Dao、MySQl的Dao、同時(shí)調(diào)用Oracle和MySQLDao的功能。

改造方式:
從 Oracle 到 MySQL 數(shù)據(jù)庫(kù)的遷移之旅

數(shù)據(jù)庫(kù)遷移切換流程:
從 Oracle 到 MySQL 數(shù)據(jù)庫(kù)的遷移之旅

二、數(shù)據(jù)遷移操作步驟

數(shù)據(jù)遷移操作的答題步驟如下圖所示:
從 Oracle 到 MySQL 數(shù)據(jù)庫(kù)的遷移之旅

1、配置初始化

? 數(shù)據(jù)庫(kù)寫(xiě)入的配置設(shè)置為只寫(xiě)Oracle數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)讀取的配置設(shè)置為從OracleL數(shù)據(jù)庫(kù)讀取。

2、同步數(shù)據(jù)檢查

? 查詢(xún)待遷移的幾張表的數(shù)據(jù)量:

? select count(1) from table;

3、全量數(shù)據(jù)遷移

? 在遷移工具上執(zhí)行數(shù)據(jù)遷移腳本SQL

4、檢查全量遷移的數(shù)據(jù)

? 查詢(xún)遷移后的數(shù)據(jù)量,檢查是否和需要遷移的數(shù)據(jù)量能匹配:

5、開(kāi)啟雙寫(xiě)

數(shù)據(jù)庫(kù)寫(xiě)入的配置設(shè)置為Oracle數(shù)據(jù)庫(kù)和MYSQl數(shù)據(jù)庫(kù)雙寫(xiě)

6、獲取遷移過(guò)程中oracle數(shù)據(jù)庫(kù)的增量數(shù)據(jù)

查詢(xún)updated_time在全量數(shù)據(jù)遷移開(kāi)始時(shí)間之后的數(shù)據(jù)

select * from table whereupdated_time>to_Date('2022/12/16 04:00:00', 'yyyy/mm/dd hh24:mi:ss')

7、增量數(shù)據(jù)腳本準(zhǔn)備

根據(jù)監(jiān)控的增量數(shù)據(jù)對(duì)比,找出需要新增和修改的數(shù)據(jù),準(zhǔn)備腳本

8、數(shù)據(jù)補(bǔ)償

在遷移工具上執(zhí)行數(shù)據(jù)補(bǔ)償腳本SQL

9、核對(duì)整體數(shù)據(jù)

我們有額外的數(shù)據(jù)核對(duì)方案,通過(guò)應(yīng)用讀Oracle,再異步讀取MySQL并進(jìn)行對(duì)比的方式進(jìn)行業(yè)務(wù)表的數(shù)據(jù)核對(duì)。這樣可以確保數(shù)據(jù)的一致性。

10、在灰度環(huán)境里驗(yàn)證數(shù)據(jù)的正確性

將灰度機(jī)器的數(shù)據(jù)庫(kù)讀取的配置設(shè)置為從MySQL數(shù)據(jù)庫(kù)讀取。并在灰度環(huán)境驗(yàn)證數(shù)據(jù)的正確性

11、數(shù)據(jù)庫(kù)讀取的配置設(shè)置為從MySQL數(shù)據(jù)庫(kù)讀取。

將正式環(huán)境的機(jī)器的數(shù)據(jù)庫(kù)讀取的配置設(shè)置為從MySQL數(shù)據(jù)庫(kù)讀取。

12、數(shù)據(jù)庫(kù)寫(xiě)入的配置設(shè)置為只寫(xiě)MySQL

在生產(chǎn)環(huán)境運(yùn)行一段時(shí)間,如果運(yùn)行平穩(wěn)的話,就可以關(guān)閉數(shù)據(jù)庫(kù)雙寫(xiě),將數(shù)據(jù)庫(kù)寫(xiě)入配置改為只寫(xiě)MySQL數(shù)據(jù)庫(kù)了。

三、數(shù)據(jù)遷移的經(jīng)驗(yàn)教訓(xùn)

1. 遇到的坑

在遷移過(guò)程中,我們發(fā)現(xiàn)了一些Oracle語(yǔ)法與MySQL語(yǔ)法不兼容的地方,有些寫(xiě)法在Oracle中可行,在MySQL中會(huì)報(bào)錯(cuò):

(1)子查詢(xún)語(yǔ)句要取別名

(2)字段別名需要注意,AS后是否為空

(3)條件語(yǔ)句中判斷需要注意

(4)oracle轉(zhuǎn)mysql條件語(yǔ)句is null需格外注意,在Oracle中null和空串是一個(gè)含義,在mysql中是兩個(gè)含(只針對(duì)字段類(lèi)型為varchar類(lèi)型的字段)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-847843.html

Oracle中:
IS_LIMIT_SUCESS is null
Mysql替換為:
(IS_LIMIT_SUCESS is null or IS_LIMIT_SUCESS = '') 

到了這里,關(guān)于從 Oracle 到 MySQL 數(shù)據(jù)庫(kù)的遷移之旅的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 從 sqlite 遷移到 Oracle 數(shù)據(jù)庫(kù)

    今天發(fā)現(xiàn)一個(gè)有意思的競(jìng)賽,競(jìng)賽中使用了 sqlite 數(shù)據(jù)庫(kù)。 由于個(gè)人更習(xí)慣 Oracle 數(shù)據(jù)庫(kù),所以將 sqlite 數(shù)據(jù)庫(kù)遷移到了 Oracle 數(shù)據(jù)庫(kù)。 此文章記錄一下遷移時(shí)使用的 Python 代碼。 完結(jié)!

    2024年04月29日
    瀏覽(18)
  • Oracle到PostgreSQL數(shù)據(jù)庫(kù)的語(yǔ)法遷移手冊(cè)(建議收藏)

    異構(gòu)數(shù)據(jù)庫(kù)的遷移(譬如從Oracle遷移到PostgreSQL)工作主要包括三個(gè)方面, 數(shù)據(jù)庫(kù)對(duì)象的遷移,包括庫(kù)、模式、表、索引、視圖、觸發(fā)器、存儲(chǔ)過(guò)程等等; 數(shù)據(jù)內(nèi)容的遷移,主要指的是數(shù)據(jù)表中的數(shù)據(jù); 數(shù)據(jù)應(yīng)用的遷移,主要指的是應(yīng)用中SQL語(yǔ)句的遷移。 目前對(duì)于數(shù)據(jù)庫(kù)對(duì)

    2024年04月08日
    瀏覽(19)
  • PLSQL Developer 配置Oracle主目錄和OCI庫(kù) & 連接登錄Oracle數(shù)據(jù)庫(kù)(完全指南)

    PLSQL Developer 配置Oracle主目錄和OCI庫(kù) & 連接登錄Oracle數(shù)據(jù)庫(kù)(完全指南)

    溫馨提示: 一、如果你在機(jī)器上裝了oracle數(shù)據(jù)庫(kù)服務(wù)器,就不需要在單獨(dú)在該機(jī)器上安裝oracle客戶(hù)端了,因?yàn)檠boracle數(shù)據(jù)庫(kù)的時(shí)候會(huì)自動(dòng)安裝oracle客戶(hù)端。 二、如果想用本地的計(jì)算機(jī)訪問(wèn)或連接遠(yuǎn)程的oracle數(shù)據(jù)庫(kù),那么就必須在本地的計(jì)算機(jī)上安裝oracle客戶(hù)端軟件。在安裝

    2024年02月10日
    瀏覽(43)
  • 【數(shù)據(jù)庫(kù)遷移系列】從MySQL到openGauss的數(shù)據(jù)庫(kù)對(duì)象遷移實(shí)踐

    【數(shù)據(jù)庫(kù)遷移系列】從MySQL到openGauss的數(shù)據(jù)庫(kù)對(duì)象遷移實(shí)踐

    在之前這一篇中我們分享過(guò)使用chameleon工具完成MySQL到openGauss的全量數(shù)據(jù)復(fù)制、實(shí)時(shí)在線復(fù)制。9.30新發(fā)布的openGauss 3.1.0版本 ,工具的全量遷移和增量遷移的性能不但有了全面提升,而且支持?jǐn)?shù)據(jù)庫(kù)對(duì)象視圖、觸發(fā)器、自定義函數(shù)、存儲(chǔ)過(guò)程的遷移。 本篇就來(lái)分享一下使用c

    2024年02月02日
    瀏覽(38)
  • 數(shù)據(jù)庫(kù)遷移之mysql到達(dá)夢(mèng)數(shù)據(jù)庫(kù)

    數(shù)據(jù)庫(kù)遷移之mysql到達(dá)夢(mèng)數(shù)據(jù)庫(kù)

    由于業(yè)務(wù)需求要求數(shù)據(jù)庫(kù)國(guó)產(chǎn)化,因此將數(shù)據(jù)從mysql數(shù)據(jù)庫(kù)中遷移到國(guó)產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫(kù)中。將mysql中的每個(gè)庫(kù)遷移到達(dá)夢(mèng)不同模式下,下面為詳細(xì)過(guò)程。 (1)安裝達(dá)夢(mèng)客戶(hù)端工具 (2)點(diǎn)擊選擇DM管理工具 (3)創(chuàng)建模式和用戶(hù) 在用戶(hù)菜單中,新建一個(gè)TEST模式以及相應(yīng)的用戶(hù)。

    2024年02月08日
    瀏覽(34)
  • mysql數(shù)據(jù)庫(kù)遷移

    mysql數(shù)據(jù)庫(kù)遷移

    公司有個(gè)項(xiàng)目,剛開(kāi)始數(shù)據(jù)量不是大的時(shí)候,數(shù)據(jù)庫(kù)和服務(wù)上的所有應(yīng)用數(shù)據(jù)都放在一個(gè)舊小盤(pán)中,隨著項(xiàng)目數(shù)據(jù)的增長(zhǎng),舊的磁盤(pán)被占滿(mǎn)了,導(dǎo)致系統(tǒng)無(wú)法寫(xiě)入數(shù)據(jù),我和同事排查了很長(zhǎng)時(shí)間,最終確定是磁盤(pán)被占滿(mǎn)導(dǎo)致的一系列連鎖問(wèn)題。問(wèn)題找到了,接下來(lái)就是想辦法

    2024年02月14日
    瀏覽(26)
  • 【MySQL探索之旅】數(shù)據(jù)庫(kù)設(shè)計(jì)以及聚合查詢(xún)

    【MySQL探索之旅】數(shù)據(jù)庫(kù)設(shè)計(jì)以及聚合查詢(xún)

    ??博客主頁(yè):愛(ài)敲代碼的小楊. ?專(zhuān)欄:《Java SE語(yǔ)法》 | 《數(shù)據(jù)結(jié)構(gòu)與算法》 | 《C生萬(wàn)物》 |《MySQL探索之旅》 |《Web世界探險(xiǎn)家》 ??感謝大家點(diǎn)贊????收藏?評(píng)論???,您的三連就是我持續(xù)更新的動(dòng)力?? ??小楊水平有限,歡迎各位大佬指點(diǎn),相互學(xué)習(xí)進(jìn)步! 數(shù)據(jù)庫(kù)

    2024年04月09日
    瀏覽(22)
  • 如何遷移MySQL數(shù)據(jù)庫(kù)?

    遷移MySQL數(shù)據(jù)庫(kù)可以采取多種方法,以下是其中幾種常用的方法: 備份和還原:將原有的MySQL數(shù)據(jù)庫(kù)備份到一個(gè)文件中,然后將備份文件還原到新的MySQL服務(wù)器中。具體來(lái)說(shuō),可以使用mysqldump命令進(jìn)行備份,使用mysql命令進(jìn)行還原。例如,備份一個(gè)名為mydb的數(shù)據(jù)庫(kù)可以使用以下

    2024年02月09日
    瀏覽(27)
  • MySQL數(shù)據(jù)庫(kù)遷移(直接復(fù)制文件)

    MySQL數(shù)據(jù)庫(kù)遷移(直接復(fù)制文件) - 簡(jiǎn)書(shū) (jianshu.com) 看了幾種方法: 1、修改注冊(cè)表的 windows下遷移mysql數(shù)據(jù) - 程序員丁先生 - 博客園 (cnblogs.com) 2、mysqldump指令將數(shù)據(jù)庫(kù)表/數(shù)據(jù)保存成xx.sql文件存到本地的 (157條消息) 如何簡(jiǎn)單實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)遷移_歲月呀的博客-CSDN博客 看著都復(fù)

    2024年02月15日
    瀏覽(38)
  • Mysql數(shù)據(jù)庫(kù)遷移|如何把一臺(tái)服務(wù)器的mysql數(shù)據(jù)庫(kù)遷移到另一臺(tái)服務(wù)器上的myql中

    Mysql數(shù)據(jù)庫(kù)遷移|如何把一臺(tái)服務(wù)器的mysql數(shù)據(jù)庫(kù)遷移到另一臺(tái)服務(wù)器上的myql中

    ? 那么這里博主先安利一下一些干貨滿(mǎn)滿(mǎn)的專(zhuān)欄啦! Linux專(zhuān)欄 https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014.3001.5482 操作系統(tǒng)專(zhuān)欄 https://blog.csdn.net/yu_cblog/category_12165502.html?spm=1001.2014.3001.5482 手撕數(shù)據(jù)結(jié)構(gòu) https://blog.csdn.net/yu_cblog/category_11490888.html?spm=1001.2014.3001.5482 一、在

    2024年02月06日
    瀏覽(41)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包