前陣做了下數(shù)據(jù)庫遷移,從Sql Server2005遷移到Oracle
成都創(chuàng)新互聯(lián)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì),成都品牌網(wǎng)站建設(shè),廣告投放平臺(tái)等致力于企業(yè)網(wǎng)站建設(shè)與公司網(wǎng)站制作,10年的網(wǎng)站開發(fā)和建站經(jīng)驗(yàn),助力企業(yè)信息化建設(shè),成功案例突破上千多家,是您實(shí)現(xiàn)網(wǎng)站建設(shè)的好選擇.
10g,這里說一下遷移的方法。
Sql
Server和Oracle區(qū)別比較大,包括語法,字段類型,數(shù)據(jù)庫機(jī)制,配置管理方法等等,區(qū)別是全方位的,做遷移需要注意很多問題,在遷移過程中也會(huì)遇到問題,需要細(xì)細(xì)處理之。這里說一下數(shù)據(jù)庫結(jié)構(gòu)的遷移,和遷移過程中注意的一些問題。(當(dāng)然具體的數(shù)據(jù)庫遷移過程中可能問題是不一樣的,具體問題具體分析了)
遷移的方法是從Sql Server已有數(shù)據(jù)庫中生成出Oracle的建庫腳本,然后在Oracle數(shù)據(jù)庫上執(zhí)行。用到的生成工具是Power
Designer。
1、打開PD(Power
Designer簡稱,以下均使用PD),新建一個(gè)PDM(物理數(shù)據(jù)模型),DBMS選擇Microsoft SQL
Server2005,Model name起名叫做mssdb。
2、通過逆向工程將現(xiàn)有Sql
Server數(shù)據(jù)庫生成PDM
(1)選擇Database-Reverse
Engineer Database,配置數(shù)據(jù)源,選擇要遷移的數(shù)據(jù)庫,輸入用戶名、密碼。
(2)選擇數(shù)據(jù)庫,選擇用戶dbo下的所有表、視圖、存儲(chǔ)過程、方法、觸發(fā)器、序列等(由于Sql Server與oracle,數(shù)據(jù)庫概念上的區(qū)別,這里不需選擇用戶、角色)。
點(diǎn)擊OK,生成PDM。已經(jīng)建立過PDM的情況,這一步可以省略。
3、生成Oracle物理數(shù)據(jù)模型
選擇Tools-Generate Physical Data Model
(1)DBMS選擇Oracle
10g,輸入名稱:oradb。
(2)在Configure Model
Options配置中, Model Settings的TableView界面中,勾選Ignore
identifying owner。Oracle中用戶的概念與Sql Server不同,這里忽略owner。
(3)Selection標(biāo)簽,選擇需要生成的所有表、視圖、外鍵、存儲(chǔ)過程、方法、觸發(fā)器、序列等。
點(diǎn)擊確定,即生成了oracle 的PDM。
注意,在生成PDM的過程中可能不會(huì)一帆風(fēng)順,有可能會(huì)報(bào)錯(cuò)(比如提示對(duì)象長度超限),這會(huì)導(dǎo)致生成失敗。這時(shí)需要根據(jù)具體錯(cuò)誤提示做相應(yīng)修改(可能需要多次調(diào)整,沒有辦法,誰讓兩者差別這么大的呢)。
4、生成Oracle腳本
與Sql
Server不同的是,在Oracle里表名、字段名全部為大寫,若要單獨(dú)處理為小寫,需加上雙引號(hào)。而PD生成的腳本默認(rèn)是有雙引號(hào)的,這里需要修改默認(rèn)配置,去掉雙引號(hào)。
然后選擇oradb,然后選擇Database-Generate
Database,進(jìn)入數(shù)據(jù)庫生成界面
在Format標(biāo)簽下,去掉勾選Owner prefix,它將省掉建表語句前“dbo.”所帶來的麻煩;
在Selection標(biāo)簽下,選擇要生成腳本的各對(duì)象;
在Preview標(biāo)簽下,可以預(yù)覽預(yù)生成的腳本(表較多時(shí),切換會(huì)比較慢)。
點(diǎn)擊確定,即得到生成的腳本。
5、檢查與調(diào)整
腳本是PD自動(dòng)生成的,因?yàn)楸肀容^多,在oracle上直接去執(zhí)行難免會(huì)有錯(cuò)誤。所以在執(zhí)行之前需要檢查下腳本的正確性。這里提幾點(diǎn)需要注意的地方。
(1)Oracle要求表名、字段名等長度最多是30位,而Sql Server沒有這個(gè)限制,所以可能會(huì)有在Sql
Server創(chuàng)建正常的表而在Oracle下會(huì)創(chuàng)建失敗。
(2)檢查一下主鍵、外鍵的名稱,它們有可能是隨機(jī)生成的名稱??筛鶕?jù)相應(yīng)規(guī)范進(jìn)行修改。
(3)檢查字段名是否用到了Oracle的關(guān)鍵字。比如Sql
Server命名“備注”字段可能會(huì)用“comment”、標(biāo)題用“title”,但comment、title在Oracle中是關(guān)鍵字,不可以做為字段名稱。
(4)存儲(chǔ)過程、方法是否符合Oracle語法。
(5)Sql
Server有自增字段,而Oracle沒有。要實(shí)現(xiàn)此功能,需要相應(yīng)創(chuàng)建序列、觸發(fā)器。
(6)Sql
Server中字段類型為text的情況,如果是存二進(jìn)制數(shù)據(jù)需要在Oracle中選用Blob字段類型。
(7)Sql
Server有外鍵的情況,主表記錄刪除,從表記錄也會(huì)跟著刪除;而Oracle默認(rèn)情況是當(dāng)從表有記錄時(shí),所對(duì)應(yīng)的主表記錄不允許刪除。所以這種情況下外鍵需要添加外鍵級(jí)聯(lián)刪除。
(8)生成的表、視圖等個(gè)數(shù)是否正確,缺失的情況可單獨(dú)生成腳本。
系統(tǒng)不一樣,出現(xiàn)問題的點(diǎn)可能也不一樣,具體問題具體分析。
6、建庫
在Oracle數(shù)據(jù)庫服務(wù)(當(dāng)然要先安裝好Oracle服務(wù)端、并建立數(shù)據(jù)庫)orcl實(shí)例下,使用用戶sys登陸并創(chuàng)建用戶orauser,并將resource、connect角色賦給orauser(這里,orauser使用默認(rèn)表空間、默認(rèn)臨時(shí)表空間)。
用剛創(chuàng)建的用戶orauser登陸orcl數(shù)據(jù)庫服務(wù),執(zhí)行前面已經(jīng)生成的腳本,若干分鐘后腳本執(zhí)行完畢,觀察一下執(zhí)行過程中有無錯(cuò)誤產(chǎn)生,也可以記錄執(zhí)行的日志以便日后查看;檢查看表、視圖等個(gè)數(shù)與Sql
Server數(shù)據(jù)庫中是否一致。如果都正確,那么,數(shù)據(jù)庫結(jié)構(gòu)從Sql
Server到Oracle的遷移到此結(jié)束。當(dāng)然,遷移的是否正確還需要在之后的使用中檢查,發(fā)現(xiàn)錯(cuò)誤及時(shí)修改即可。
sqlserver向oracle導(dǎo)入數(shù)據(jù)結(jié)構(gòu),本文主要使用Navicate,在表結(jié)構(gòu)導(dǎo)入完成的情況下,我們依然需要進(jìn)行一些簡單的處理,才能讓程序正常運(yùn)行。
在表結(jié)構(gòu)導(dǎo)入完成后,我們已經(jīng)可以在oracle的連接下看到我們導(dǎo)入的表結(jié)構(gòu),但如果你進(jìn)行查詢,可能會(huì)得到的結(jié)果是:"ORA-00942: 表或視圖不存在
",比如下圖:
1,先imp到oracle,再從oracle轉(zhuǎn)換在sqlserver
還有一種方法,如果dmp文件比較小就可以試試,你可以把dmp文件打開,里面是一樣文本,可以直接把需要的文本(其實(shí)是一些生成表和數(shù)據(jù)的SQL,還有一些是與ORACLE數(shù)據(jù)庫相關(guān)的一些數(shù)據(jù)庫屬性,這里不用),放到sqlserver的查詢管理器中,做一些相關(guān)的語法改動(dòng)后執(zhí)行,就可以將數(shù)據(jù)導(dǎo)入到SQLSERVER中
2,先用oracle的imp命令或者OEM講DMP文件導(dǎo)入到ORACLE庫.
假設(shè)要將SQL Server中的Northwind數(shù)據(jù)庫中的Products表導(dǎo)出到Oracle的Scott用戶 首先需要有安裝SQL Server企業(yè)版 1.打開工具: 開始-程序- 導(dǎo)入和SQL Server數(shù)據(jù)導(dǎo)出數(shù)據(jù) 2.下一步,選擇數(shù)據(jù)源 [數(shù)據(jù)源]選擇“用于SQL Server的Microsoft OLE DB提供程序”,這應(yīng)該是缺省值。 [服務(wù)器]選擇要導(dǎo)出數(shù)據(jù)的服務(wù)器,如果是本機(jī),選擇(local) [數(shù)據(jù)庫]選擇要導(dǎo)出的數(shù)據(jù)所在的庫,這里選擇Northwind 3.下一步,選擇目的 [目的]選擇Microsoft ODBC for Oracle [DSN]選擇用戶/系統(tǒng)DSN一項(xiàng),然后在下拉列表框中找一個(gè)已經(jīng)連接到了Scott用戶的DSN名稱。 如果下拉列表中沒有,點(diǎn)下拉列表框右側(cè)的[新建],出現(xiàn)創(chuàng)建新數(shù)據(jù)源界面。 接下來選擇系統(tǒng)數(shù)據(jù)源,下一步,在驅(qū)動(dòng)程序列表中選擇Microsoft ODBC for Oracle 下一步,完成,出現(xiàn)Microsoft ODBC for Oracle安裝界面 [數(shù)據(jù)源名稱]隨便輸入,比如sss [說明]可以不填 [用戶名稱]填入要SQL Server數(shù)據(jù)導(dǎo)出到的Oracle用戶名稱,這里是scott [服務(wù)器]填入要連接到Oracle服務(wù)器所使用的服務(wù)名,比方說使用sqlplus scott/tiger@server1可以連接到數(shù)據(jù)庫,那么這里就填入server1。如果本機(jī)就是服務(wù)器,使用sqlplus scott/tiger即可連接到數(shù)據(jù)庫,這里空著不填即可。 這樣就創(chuàng)建好了一個(gè)數(shù)據(jù)源sss,保證下拉列表框中選擇了sss一項(xiàng)。 [用戶名]填入SQL Server數(shù)據(jù)導(dǎo)出到的Oracle用戶名稱,這里是scott [密碼]填入SQL Server數(shù)據(jù)導(dǎo)出到的Oracle用戶使用的密碼,這里是tiger 4.下一步,指定表復(fù)制或查詢 如果要導(dǎo)出的內(nèi)容是整個(gè)表,選擇[從源數(shù)據(jù)庫復(fù)制表和視圖] 如果要導(dǎo)出的內(nèi)容是表的一部分列,行,可以選擇[用一條查詢指定要傳輸?shù)臄?shù)據(jù)],這時(shí)需要寫出一個(gè)查詢語句 這里選擇第一項(xiàng)[從源數(shù)據(jù)庫復(fù)制表和視圖] 5.下一步,選擇源表和視圖 點(diǎn)中要導(dǎo)出的表Products一行的復(fù)選框,目的、轉(zhuǎn)換兩欄就會(huì)出現(xiàn)內(nèi)容。 目的可以用來選擇表名。轉(zhuǎn)換可以用來修改列的數(shù)據(jù)類型或是整個(gè)建表的SQL語句 6.下一步,保存、調(diào)度和復(fù)制包 選中立即運(yùn)行 7.下一步,正在完成DTS導(dǎo)入/導(dǎo)出向?qū)?8.完成 提示“成功地將n個(gè)表從Microsoft SQLServer復(fù)制到了Oracle” 9.完成,關(guān)閉導(dǎo)入導(dǎo)出程序 注意:因?yàn)閛racle的表名都是大寫的,而SQL的表可能是大小混寫的,所以導(dǎo)入后在oracle里查不到該表,比如這個(gè)Products表在oracle里查詢就應(yīng)該寫成select * from scott."Products";為了方便查詢可以通過批量修改表名為大寫以便后面導(dǎo)數(shù)據(jù)的工作。