- 類型:編程輔助大小:237KB語(yǔ)言:英文 評(píng)分:7.0
- 標(biāo)簽:
因工作需求, 把數(shù)據(jù)庫(kù)從MSSQL移植到Oracle,一想起這個(gè)事情,難度就很大,在堅(jiān)持下,終于完成了,重要的事情做了一些筆記。
1.移植前準(zhǔn)備
在移植前,需要安裝必需的各種軟件,如下:
(1).安裝好SQL server 2005的補(bǔ)丁包和SP2。
(2).安裝Oracle安裝包里的oracle客戶端瀏覽器(PL/SQL Developer)。(可以根據(jù)需要按照漢化補(bǔ)丁,漢化包不安裝也可)
(3).硬件要求:在Oracle數(shù)據(jù)庫(kù)所在的硬盤保持足夠剩余空間(至少有2GB的空間剩余);建議在啟用Oracle服務(wù)時(shí)機(jī)器的內(nèi)存不少于2GB。
沒(méi)有特別說(shuō)明的情況下,本文的數(shù)據(jù)移植是針對(duì)普通的屬性數(shù)據(jù)。
2. 移植
2.1. 創(chuàng)建數(shù)據(jù)庫(kù)
打開(kāi)Oracle中的Database Configuration Assistant進(jìn)行數(shù)據(jù)庫(kù)的創(chuàng)建,如圖所示:
圖表 1 打開(kāi)Database Configuration Assistant
進(jìn)入Database Configuration Assistant后點(diǎn)擊“下一步”,然后出現(xiàn)如圖表2所示的界面,選擇“創(chuàng)建數(shù)據(jù)庫(kù)”后點(diǎn)擊“下一步”:
圖表 2 創(chuàng)建數(shù)據(jù)庫(kù)
如圖表3所示選擇第一個(gè)“一般用途”然后點(diǎn)擊下一步:
圖表 3 選擇模板
如圖標(biāo)2所示在創(chuàng)建數(shù)據(jù)庫(kù)過(guò)程中的第3步,在“全局?jǐn)?shù)據(jù)庫(kù)名”中輸入數(shù)據(jù)庫(kù)名稱,SID則會(huì)自動(dòng)默認(rèn)為全局?jǐn)?shù)據(jù)庫(kù)名,然后點(diǎn)擊“下一步”;
圖表 4 創(chuàng)建數(shù)據(jù)庫(kù)
點(diǎn)擊如圖表5所示界面中的“確定”按鈕系統(tǒng)就開(kāi)始創(chuàng)建數(shù)據(jù)庫(kù)了。
圖表 5
圖表 6 正在傳教數(shù)據(jù)庫(kù)
最后點(diǎn)擊如圖表4所示中的“退出”按鈕就創(chuàng)建數(shù)據(jù)庫(kù)完成了。
圖表 7 創(chuàng)建數(shù)據(jù)庫(kù)完成
2.2. 登錄Oracle
打開(kāi)PL/SQL Developer并用system(數(shù)據(jù)庫(kù)默認(rèn)的用戶名)用戶身份登錄到XQ2DSGN并選擇連接為SYSDBA,如圖所示:
圖表 8 登錄到PLSQL
2.2.1. 創(chuàng)建表空間
創(chuàng)建表空間的sql語(yǔ)句:
SQL>create tablespace xq2dsgn datafile 'G:\oracle\product\10.2.0\oradata\xq2dsgn\xq2dsgn.dbf' size 2048m autoextend on next 10m maxsize unlimited ;
(參考:
通過(guò)PL/SQL Developer登錄到Oracle數(shù)據(jù)庫(kù)上后,打開(kāi)菜單:文件/新建/命令窗口 ,打開(kāi)一個(gè)命令窗口然后在該命令窗口中執(zhí)行腳本創(chuàng)建和刪除表空間,新建用戶和授權(quán)的操作,如圖所示:
圖表 9 打開(kāi)命令窗口
創(chuàng)建表空間
Sql>create tablespace xqds2gn datafile ' D:\oradata\xq2dsgn\ xq2dsgn.dbf ' size 200m autoextend on next 10m maxsize unlimited;
Sql>alter database datafile ' D:\oradata\xq2dsgn\ xq2dsgn.dbf ' autoextend on;
1 DATAFILE: 表空間數(shù)據(jù)文件存放路徑
2 SIZE: 起初設(shè)置為200M
3 UNIFORM: 指定區(qū)尺寸為128k,如不指定,區(qū)尺寸默認(rèn)為64k
4 空間名稱xq2dsgn 與 數(shù)據(jù)文件名稱 xq2dsgn.dbf 不要求相同,可隨意命名.
5 AUTOEXTEND ON/OFF 表示啟動(dòng)/停止自動(dòng)擴(kuò)展表空間
6 alter database datafile ' D:\oradata\xq2dsgn\ xq2dsgn.dbf ' resize 500m;
//手動(dòng)修改數(shù)據(jù)文件大小為500M
圖表 10 表空間創(chuàng)建完成
刪除表空間
語(yǔ)句如下:
DROP TABLESPACE xq2dsgn INCLUDING CONTENTS AND DATAFILES;
2.2.2. 創(chuàng)建用戶
1.建立用戶并為用戶指定缺省的永久表空間和臨時(shí)表空間
SQL> create user xq2dsgn identified by xq2dsgn
default tablespace xq2dsgn
temporary tablespace temp;
用戶已創(chuàng)建。(user xq2dsgn表示用戶名:xq2dsgn,identified by后面表示密碼)
2.2.3. 對(duì)用戶進(jìn)行授權(quán)
授予用戶會(huì)話的權(quán)限如圖所示:
Grant create session to xq2dsgn;
授予用戶創(chuàng)建表格的權(quán)限;
Grant create table to xq2dsgn;
授予用戶設(shè)定表空間大小的權(quán)限;
Grant unlimited tablespace to xq2dsgn;
授予用戶DBA權(quán)限:
grant dba to xq2dsgn;
圖表 11 創(chuàng)建用戶和授權(quán)
2.3. 導(dǎo)出數(shù)據(jù)
2.3.1. 打開(kāi)SQL server導(dǎo)入導(dǎo)出數(shù)據(jù)向?qū)?/p>
登錄到SQL server 2005資源對(duì)象管理器選擇“數(shù)據(jù)庫(kù)”并找到要導(dǎo)出到Oracle中的數(shù)據(jù)庫(kù),然后右擊選擇“任務(wù)”→“導(dǎo)出數(shù)據(jù)”。如圖所示:
圖表 12 DTS導(dǎo)出數(shù)據(jù)
2.3.2. 選擇數(shù)據(jù)源
彈出窗體如下圖,點(diǎn)擊“下一步”
2.3.3. 選擇目標(biāo)數(shù)據(jù)庫(kù)和配置屬性
如下圖所示選擇“Oracle provider for oledb”
圖表 13 選擇目標(biāo)數(shù)據(jù)庫(kù)
(2)導(dǎo)入到本地計(jì)算機(jī)的屬性配置
如圖所示,在“輸入服務(wù)器名稱”中輸入剛才在本計(jì)算機(jī)上新建的Oracle數(shù)據(jù)庫(kù)名稱,在“用戶名稱”和“密碼”中輸入剛才新建及設(shè)定的用戶名和密碼,點(diǎn)擊“測(cè)試連接”提示“測(cè)試連接成功”則可以點(diǎn)擊“確定”并進(jìn)行下一步操作了。
圖表 14 配置屬性
(3)導(dǎo)入到域中的其他計(jì)算機(jī)上的屬性配置
如圖所示:其中服務(wù)名稱輸入的是目標(biāo)計(jì)算機(jī)的IP和目標(biāo)Oracle數(shù)據(jù)庫(kù)名稱。
2.3.4. 選擇源表和源視圖及目標(biāo)表,并編輯映射
選擇需要導(dǎo)出的表或者全選(這里建議根據(jù)表的類型和復(fù)雜程度選擇一個(gè)或者多個(gè)進(jìn)行導(dǎo)出,以免全選發(fā)生錯(cuò)誤時(shí)很難更正)。
圖表 15選擇源表和源視圖
編輯映射。在該圖中,在每行的目標(biāo)表處點(diǎn)擊,然后點(diǎn)擊“編輯映射”按鈕,彈出窗體如下圖:
點(diǎn)擊右上方的“編輯SQL”按鈕,彈出如下窗體:
該窗體顯示了oracle數(shù)據(jù)庫(kù)中,即將創(chuàng)建的數(shù)據(jù)庫(kù)表的sql語(yǔ)句。如果有以下情況:(1)表名、字段名中有小寫字母;(2)字段類型不正確;(3)存在EVENTID字段或者其他的uniqueidentifier 16類型的字段(GUID對(duì)應(yīng)的字段);我們需要進(jìn)行修改:(1)確保引號(hào)內(nèi)的表名、字段名均為大寫;(2)字段類型正確;(3)VARCHAR2(38) DEFAULT SYS_GUID() NOT NULL
該表中,我們需要對(duì)EVENTID字段進(jìn)行修改,修改后的窗體如下圖:
修改完畢,點(diǎn)擊“確定”按鈕。
該步驟,需要依次檢查每個(gè)表,確認(rèn)每個(gè)表的sql語(yǔ)句無(wú)誤后,才能進(jìn)行下一步操作。()
有些表名及字段名均存在小寫或者大小寫均有的現(xiàn)象,直接導(dǎo)入Oracle數(shù)據(jù)庫(kù),則引起使用中的一些錯(cuò)誤。因此,我們?cè)谶@里手工將上圖的sql語(yǔ)句中,引號(hào)內(nèi)的表名、字段名全部改為大寫,并將“列映射”頁(yè)面的目標(biāo)數(shù)據(jù)字段改為全部大寫,如果想要繼續(xù)使用小寫的表名則注意引號(hào)的應(yīng)用這里不做說(shuō)明.
2.3.5. 執(zhí)行導(dǎo)出
選擇完表后點(diǎn)擊“下一步”或者點(diǎn)擊“完成”如果不出錯(cuò)則提示導(dǎo)入成功如圖所示:
圖表 16 執(zhí)行導(dǎo)入成功
3. 特殊字段處理
3.1. 對(duì)于自增長(zhǎng)字段的處理
Sql server數(shù)據(jù)庫(kù)中,有時(shí)會(huì)采用自增長(zhǎng)的字段做為主鍵,但oracle數(shù)據(jù)庫(kù)中沒(méi)有這樣的字段,因此需要我們單獨(dú)處理這樣的字段。
以下以StationSeries表的objectid字段為例進(jìn)行說(shuō)明。
StationSeries表的objectid在sql server數(shù)據(jù)庫(kù)中為int類型,標(biāo)識(shí)增量為1;導(dǎo)入oracle數(shù)據(jù)庫(kù)中后,字段類型為integer。
(1) 新建一個(gè)sql窗口(登陸plsql后,F(xiàn)ile主菜單,new –>sql window即可)。
(2) 在該窗口中輸入以下sql語(yǔ)句:
Select max(objectid) from stationseries;
(3)按F8,執(zhí)行該語(yǔ)句,看到最大ID值為4743。如下圖:
(3) 新建一個(gè)序列。在sql窗口,輸入以下sql語(yǔ)句:
create sequence OBJECTID_STATIONSERIESminvalue 4744 maxvalue 99999999999999999999999999start with 4744 increment by 1 nocache;
用鼠標(biāo)選中該條語(yǔ)句,并按F8,執(zhí)行該語(yǔ)句,即創(chuàng)建了一個(gè)序列。
說(shuō)明:該語(yǔ)句中,OBJECTID_STATIONSERIES為序列的名字;Minvalue之后的4744為上面的sql語(yǔ)句最大的objectid值+1即:4743 +1=4744;maxvalue填盡可能大的數(shù)字即可。Start with值同minvalue,increment by 1表示每次遞增1。
如下圖:
(4)建立觸發(fā)器。
同樣,在sql窗口,輸入以下sql語(yǔ)句:
create or replace trigger objectID_stationseries
before insert on stationseries
for each row
declare
-- local variables here
nextid number;
begin
IF :new.objectid IS NULL or :new.objectid=0 THEN
select objectid.nextval
into nextid
from sys.dual;
:new.objectid:=nextid;
end if;
end objectID;
用鼠標(biāo)選中該條語(yǔ)句,并按F8,執(zhí)行該語(yǔ)句,即創(chuàng)建了一個(gè)StationSeries表的對(duì)objectid自增的觸發(fā)器。說(shuō)明:該語(yǔ)句中,objectID_stationseries為觸發(fā)器的名字。before insert on之后的stationseries為建立觸發(fā)器的表名。Objectid即為字段。
經(jīng)過(guò)上述四個(gè)步驟,我們就可實(shí)現(xiàn)類似sql server數(shù)據(jù)庫(kù)中的自動(dòng)增長(zhǎng)字段,而無(wú)需更改代碼。
在導(dǎo)入oracle數(shù)據(jù)庫(kù)結(jié)束后,我們需要檢查sql server數(shù)據(jù)庫(kù),對(duì)于其他表中的自增字段,也需要重復(fù)上述步驟實(shí)現(xiàn)在oracle數(shù)據(jù)庫(kù)中自增字段。
至此,從sql server數(shù)據(jù)庫(kù)至oracle數(shù)據(jù)庫(kù)的移植工作就結(jié)束了。