文章插圖

文章插圖
一、前言
這里記錄一次將MySQL數據庫中的表數據遷移到Oracle數據庫中的全過程,使用工具 Navicat,版本 12.0.11
操作環境及所用工具:mysql5.7oracle18cwindowsNavicat12.0.11idea
點擊 工具 -> 數據傳輸
溫馨小提示:如果字段名和表名都為小寫,oracle操作數據的時候將會出現找不到表或視圖的錯誤,解決方法是必須加上雙引號才能查詢到,這樣的話我們通過程序操作數據的時候必須加上雙引號,即大大加重了遷移數據庫后的工作量,因此這里需勾選轉換對象名為大寫,同時在轉換過程中如果字段名出現oracle關鍵字的話,它會自動給我們加上雙引號解決關鍵字的困擾!??!【 ex: user -> “USER” number -> “NUMBER” desc -> “DESC” level -> “LEVEL” 】
溫馨小提示:傳輸過程中可能會存在有部分幾張表不成功,手動導一下就好了~~三、問題1、解決oracle自增主鍵oracle設置自增主鍵的幾種方式:序列 + 觸發器序列 + Hibernate配置 (注:此方式僅適用于通過Hibernate連接數據庫的方式)oracle12c版本之后新增 自增列語法 GENERATED BY DEFAULT AS IDENTITY解決思路:
【Mysql數據遷移到es mysql數據遷移到mysql】在ddl 創建表sql中添加自增主鍵的命令,重新創建一次表結構,然后再將oracle中的數據單獨導入這里由于小編oracle版本為18c 因此在創建表的時候加上自增主鍵語法即可完成!
① 備份數據 -> 數據泵方式
數據泵 -> 數據泵導出
溫馨小提示:這里小編數據庫中的時間類型為 DATE 類型 需 改為 TIMESTAMP 類型,這個問題可以直接使用idea的替換功能完成修改~,其余修改可根據個人實際情況來進行修改
public class MySQLToOracleTest {public static void main(String[] args) {try {replaceDDLContent("D:\Users\zq\Desktop\oracle測試\oracle_ddl.txt"); // TODO 這里修改為自己的ddl文件存放位置} catch (IOException e) {e.printStackTrace();}}/*** 替換文本文件中的 自增主鍵ID** @param path* @throws IOException*/public static void replaceDDLContent(String path) throws IOException {// 原有的內容String srcStr = "not null";// 要替換的內容String replaceStr = "GENERATED BY DEFAULT AS IDENTITY";// 讀File file = new File(path);FileReader in = new FileReader(file);BufferedReader bufIn = new BufferedReader(in);// 內存流, 作為臨時流CharArrayWriter tempStream = new CharArrayWriter();// 替換String line = null;// 需要替換的行Map<Integer, Object> lineMap = new HashMap<>(104);//定義順序變量int count = 0;while ((line = bufIn.readLine()) != null) {count++;if (line.contains("create table")) {lineMap.put(count + 2, line);}//遍歷map中的鍵for (Integer key : lineMap.keySet()) {if (count == key && !line.contains("NVARCHAR2")) {// TODO 在這里這是自增主鍵哦line = line.replaceAll(srcStr, replaceStr);lineMap.put(count, line);}}// 將該行寫入內存tempStream.write(line);// 添加換行符tempStream.append(System.getProperty("line.separator"));}// 關閉 輸入流bufIn.close();// 將內存中的流 寫入 文件FileWriter out = new FileWriter(file);tempStream.writeTo(out);out.close();System.out.println("文件存放位置:" + path);System.out.println(lineMap);}}④ 將替換過后的ddl拷貝到idea中的一個新控制臺中運行創建表全選ddl,然后點擊左上角運行創建表 【 注:這里需先清空該庫下所有表,因此步驟①要先備份一下從mysql遷移到oracle后的表數據,不要忘記哦??!】
數據泵 -> 數據泵導入
2、解決自增主鍵ID無法從表數據ID最大值開始增值思路:拼接出修改表自增ID從幾開始的sql即可!
SELECT'SELECT ''ALTER TABLE SEWAGE_GY.' || t1.table_name || ' MODIFY(' || t1.Column_Name || ' Generated as Identity (START WITH '' || MAX( ' || t1.Column_Name || '+1 ) || ''));'' FROM ' || t1.table_name || ' UNION ALL' AS FINAL_SQLFROM cols t1LEFT JOIN user_col_comments t2 ON t1.Table_name = t2.Table_name AND t1.Column_Name = t2.Column_NameLEFT JOIN user_tab_comments t3 ON t1.Table_name = t3.Table_nameWHERENOT EXISTS (SELECT t4.Object_NameFROM User_objects t4WHEREt4.Object_Type = 'TABLE'AND t4.TEMPORARY = 'Y'AND t4.Object_Name = t1.Table_Name)AND t1.IDENTITY_COLUMN = 'YES'ORDER BY t1.Table_Name, t1.Column_ID命令解析:# 設置表主鍵ID從多少開始自增ex:下面標識從10000開始自增ALTER TABLE 數據庫名.表名 MODIFY(主鍵ID Generated as Identity (START WITH 10000));# 查詢該庫下所有表名SELECT table_name FROM user_tables;# 查詢出指定表的主鍵ID字段名SELECT t1.table_name,t1.Column_NameFROM cols t1LEFT JOIN user_col_comments t2 ON t1.Table_name = t2.Table_name AND t1.Column_Name = t2.Column_NameLEFT JOIN user_tab_comments t3 ON t1.Table_name = t3.Table_name WHERE NOT EXISTS (SELECT t4.Object_NameFROM User_objects t4WHERE t4.Object_Type = 'TABLE'AND t4.TEMPORARY = 'Y'AND t4.Object_Name = t1.Table_Name)AND t1.table_name = '表名'AND t1.IDENTITY_COLUMN = 'YES' ORDER BY t1.Table_Name, t1.Column_ID# 查詢該庫下所有表名+表主鍵字段名SELECT t1.table_name,t1.Column_NameFROM cols t1LEFT JOIN user_col_comments t2 ON t1.Table_name = t2.Table_name AND t1.Column_Name = t2.Column_NameLEFT JOIN user_tab_comments t3 ON t1.Table_name = t3.Table_name WHERE NOT EXISTS (SELECT t4.Object_NameFROM User_objects t4WHERE t4.Object_Type = 'TABLE'AND t4.TEMPORARY = 'Y'AND t4.Object_Name = t1.Table_Name)AND t1.IDENTITY_COLUMN = 'YES' ORDER BY t1.Table_Name, t1.Column_ID這里結合個人語言實際操作…
- sql語句轉換時間格式 數據庫格式化時間
- wireshark數據包分析實戰詳解 wireshark數據包分析實戰詳解pdf
- 西部數據 云盤 西部數據硬盤設置
- 三維信息可視化 數據可視化的三維工具
- excel數據處理和分析書籍推薦 excel數據處理和分析 優美名稱
- 用戶畫像數據建模工具 用戶畫像 數據建模
- MySQL修改密碼命令 mysql數據庫更改密碼
- oracle數據庫定時備份腳本 Oracle備份腳本
- mysql 億級數據 mysql上億數據秒級查詢
- mysql產生隨機數函數 mysql 隨機函數
