從SQL Server資料庫轉到Oracle資料庫的數據腳本處理

来源:http://www.cnblogs.com/wuhuacong/archive/2017/05/06/6816813.html
-Advertisement-
Play Games

在我們很多情況下的開發,為了方便或者通用性的考慮,都首先考慮SQL Server資料庫進行開發,但有時候客戶的生產環境是Oracle或者其他資料庫,那麼我們就需要把對應的數據結構和數據腳本轉換為對應的資料庫,數據結構一般來說,語法都遵循了SQL92的標準,或者我們根據不同的PowerDesigner... ...


在我們很多情況下的開發,為了方便或者通用性的考慮,都首先考慮SQL Server資料庫進行開發,但有時候客戶的生產環境是Oracle或者其他資料庫,那麼我們就需要把對應的數據結構和數據腳本轉換為對應的資料庫,數據結構一般來說,語法都遵循了SQL92的標準,或者我們根據不同的PowerDesigner文件進行生成對應的結構腳本即可,但是實際數據的腳本我們就需要進行一定的處理,以及文本的替換處理了,本文結合Notepad++的文本正則表達式替換,實現一些如日期較為特殊的數據腳本調整,把它從SQL Server轉換為Oracle的處理過程,本文就是針對這些整體的資料庫處理進行介紹。

1、資料庫設計文件及資料庫結構腳本

我們一般在做資料庫設計的時候,都會使用PowerDesigner這樣的資料庫建模工具進行設計,預設把它設計為SQL Server的資料庫設計模型,如下所示。

當然我們如果需要其他資料庫,那麼把它轉換為對應的資料庫,然後進行一定的資料庫類型調整,以及欄位的大小寫轉換即可。

 

根據這種方式我們調整後的各種資料庫設計文件如下所示。

不同的資料庫的設計模型有所差異,那麼我們進行一些核對,主要是資料庫類型的核對即可,如備註欄位的大文本應該設置為CLOB,二進位的應該調整為BLOB等

例如對於Oracle的資料庫設計(從SQL Server轉換過來的),同時也需要把它的欄位名轉換為大寫才好,在PowerDesigner裡面可以執行自定義函數進行處理。

其中在對話框選擇打開對應的大寫欄位表名的腳本,如下操作。

為了大家方便使用,我把它貼出來,供使用。

'文件:powerdesigner.ucase.VBs
'版本:1.0
'功能:遍歷物理模型中的所有表,將表名、表代碼、欄位名、欄位代碼全部由小寫改成大寫;
' 並將序列的名和代碼由小寫改成大寫。
'用法:打開物理模型,運行本腳本(Ctrl+Shift+X)
'備註:
'*****************************************************************************
dim model 'current model
set model = ActiveModel

If (model Is Nothing) Then
MsgBox "There is no current Model"
ElseIf Not model.IsKindOf(PdPDM.cls_Model) Then
MsgBox "The current model is not an Physical Data model."
Else
ProcessTables model
ProcessSequences model
End If

'*****************************************************************************
'函數:ProcessSequences
'功能:遞歸遍歷所有的序列
'*****************************************************************************
sub ProcessSequences(folder)
'處理模型中的序列:小寫改大寫
dim sequence
for each sequence in folder.sequences
sequence.name = UCase(sequence.name)
sequence.code = UCase(sequence.code)
next
end sub

'*****************************************************************************
'函數:ProcessTables
'功能:遞歸遍歷所有的表
'*****************************************************************************
sub ProcessTables(folder)
'處理模型中的表
dim table
for each table in folder.tables
if not table.IsShortCut then 
ProcessTable table
end if
next
'對子目錄進行遞歸
dim subFolder
for each subFolder in folder.Packages
ProcessTables subFolder
next 
end sub

'*****************************************************************************
'函數:ProcessTable
'功能:遍歷指定table的所有欄位,將欄位名由小寫改成大寫,
' 欄位代碼由小寫改成大寫
' 表名由小寫改成大寫 
'*****************************************************************************
sub ProcessTable(table)
dim col
for each col in table.Columns
'將欄位名由小寫改成大寫
col.code = UCase(col.code)
col.name = UCase(col.name)
next 
table.name = UCase(table.name)
table.code = UCase(table.code)
end sub

這樣處理後,我們在PowerDesigner裡面的表名及欄位就可以正常轉換為大寫了,從而可以獲得對應表的數據結構腳本,如果需要多個表,那麼可以批量生成資料庫結構腳本。

 

2、資料庫表數據腳本的生成

上面的資料庫表結構的腳本生成,只是我們資料庫遷移腳本的一部分操作,有時候我們實際的框架或者業務系統裡面,都往往有一些基礎數據需要寫入的,那麼就需要我們構建對應的數據腳本了。

在資料庫腳本導出的,我們可以使用很多工具,如SQL Server本身的工具就可以導出數據的SQL腳本,同時我們也可以利用其它資料庫管理工具,如Toad For SQLServer或者Navicat Premium等資料庫管理工具實現數據的導出腳本操作。

然後在生成腳本的過程中,設置輸出的高級選項中的“要編寫腳本的數據的類型”為【僅限數據】即可,如下所示。

不過預設採用SQLServer生成出來的數據腳本,對日期類型轉換真不是很好,如下結果所示。

因此我使用更加直觀顯示的Navicat Premium 工具來處理資料庫的數據腳本。使用Navicat Premium生成的腳本如下所示(僅僅日期類型有所不同)。

獲得生成的數據腳本如下所示。

剩下的工作就是我們對這些數據腳本進行進一步的處理操作了。

 

3、數據表的數據腳本的替換處理

上面介紹了通過工具來獲得正確的數據腳本,我們使用了Navicat Premium或者 Toad For SQLServer都能夠獲得類似下麵格式的時間腳本。

 N'2016-06-22 10:35:36.590'

這樣我們為了處理為Oracle的日期數據,那麼需要轉換為

to_date('2016-06-22 10:35:36','yyyy-MM-dd HH24:mi:ss')

這樣的格式

 那麼我們對上面的腳本,進行一定規則的處理,如替換:[dbo]. [ ] N'為' 等常規文本處理後,還需要再進行正則表達式規則的處理才可以,例如我們的日期替換的正則表達式如下:

'(\d{4}-\d{2}-\d{2}\s*\d{2}:\d{2}:\d{2})\.\d{3}'
to_date\('\1','yyyy-MM-dd HH24:mi:ss'\)

如下所示。

最後使用正則表達式替換後的資料庫腳本如下所示。

 

4、數據腳本在PL-SQL Developer工具上執行操作

上面介紹如何實現了表數據的腳本生成,有了這些腳本,我們需要使用Oracle的資料庫管理工具 PL-SQL Developer工具進行數據導入,才能最終完成整個過程。這個操作也是有所講究的。

例如我們創建各類不同的資料庫腳本,那麼只需要按照順序加入或者選擇加入執行資料庫腳本即可。

那麼執行這些SQL,該如何操作呢,是不是直接拖動到PL-SQL上就可以了?

當然不是,否則長一點的資料庫腳本,就可能導致非常遲緩的執行效率。

一般可以通過兩種方式,一種是使用命令行的方式。

這種方式執行速度非常快,比起直接在PL-SQL的SQL視窗上執行更有效率。

另外一種方式,就是可以利用PL-SQL裡面的另外一個地方進行執行資料庫腳本,如下所示。

在【 工具】【導入表】的操作裡面,彈出一個對話框,也是執行腳本高效的操作之一。

上面介紹的這些方式,就是在資料庫沒有的情況下,根據資料庫腳本構建對應的數據對象和數據的。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文地址 原文地址--微信 點擊關註 微信公眾號 手機眾生相 手機大家都不陌生,不管你拿的是高逼格的蘋果手機,還是親民的安卓手機,甚至你固執地懷舊拿著諾基亞的手機,都無損於你低頭一族的一員。地鐵里,商場中,工作時,回家中,大家也都是埋著頭,神情專註地看著自己的手機,或是來把《王者榮耀》殺個頭破血流, ...
  • 目前安卓開發中使用的網路工具為OKhttp,但是okhttp的使用還不是很方便,在okhttp的基礎上再對請求進行封裝會極大的方便網路調用。 下麵直接上代碼。 請求封裝 上面對okhttp的put請求進行了簡單封裝,四個參數分別是 1.請求地址 2.請求頭,以map的形式傳入,如不需要可傳入null ...
  • iOS:詳細的正則表達式 1、簡介: 在項目中,正則的使用是很普遍的,例如登錄賬號和密碼(手機號、郵箱等)。用到的方法就是謂詞對象過濾:NSPredicate。 2、什麼是正則表達式: 正則表達式,又稱正規表示法,是對字元串操作的一種邏輯公式。正則表達式可以檢測給定的字元串是否符合我們定義的邏輯,也 ...
  • iOS 真機測試錯誤“The application bundle does not contain a valid identifier” 真機測試的時候報錯:“The application bundle does not contain a valid identifier”。在這裡找到解決方 ...
  • 本文旨在提供最基本的,可以用於在生產環境進行Hadoop、HDFS分散式環境的搭建,對自己是個總結和整理,也能方便新人學習使用。 一、基礎環境 在Linux上安裝Hadoop之前,需要先安裝兩個程式: 1.1 安裝說明 1. JDK 1.6或更高版本(本文所提到的安裝的是jdk1.7); 2. SS ...
  • 所謂的預處理技術,最初也是由MySQL提出的一種減輕伺服器壓力的一種技術! 傳統mysql處理流程 1, 在客戶端準備sql語句 2, 發送sql語句到MySQL伺服器 3, 在MySQL伺服器執行該sql語句 4, 伺服器將執行結果返回給客戶端 這樣每條sql語句請求一次,mysql伺服器就要接收 ...
  • 這兩天在自己的windows7上安裝了一下MySQL資料庫,安裝使用的是5.7.18版本的 noinstall Zip Archive安裝包mysql-5.7.18-win32.zip。由於5.7版本相對5.6版本發生了一下變化,很多網上的安裝教程都失效了,因此在安裝過程中遇到了一系問題,在這裡根據 ...
  • MySQL基本概念以及簡單操作 一、MySQL MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,目前屬於Oracle 旗下產品。MySQL 是最流行的關係型資料庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Ma ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...