一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

SqlServer到Oracle數(shù)據(jù)庫轉(zhuǎn)換手記

 _明心見性_ 2017-10-29


最近做了些
數(shù)據(jù)庫
轉(zhuǎn)換工作,主要是從Sql Server轉(zhuǎn)換到
Oracle
,過程中遇到很多問題,現(xiàn)進(jìn)行一個小小總結(jié),方便有同樣需求的朋友們。
需要對數(shù)據(jù)庫結(jié)構(gòu)、數(shù)據(jù)、自定義函數(shù)、存儲過程等數(shù)據(jù)庫元素進(jìn)行轉(zhuǎn)換,由于Sql ServerOracle數(shù)據(jù)庫語言本身的差異非常大,所以自定義函數(shù)和存儲過程的轉(zhuǎn)換是比較困難的一件事情,市面上也很少有這方面的
工具
,幾乎都想直接寫
工具
了,后來卻找到了個國外的一個叫做“Swiss
SQL
-
SQL
Server To Oracle”
這樣的
工具
,此
工具
可以在http://www./
站點
上下載,使用方法有兩種,一種是轉(zhuǎn)換TSQL腳本到PLSQL,一種是通過JDBC連接到SQLServer數(shù)據(jù)庫進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換后的結(jié)果都保存為PLSQL腳本,要導(dǎo)入Oracle需要運行這些腳本。此軟件是用Java語言
編寫
在安裝之前必須先安裝JDK,在試用過程中發(fā)現(xiàn)此工具存在這么幾個問題:
1
、此工具在轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)的過程中把varchar的數(shù)據(jù)類型都轉(zhuǎn)換成varchar2(1)了而不管原諒數(shù)據(jù)有多長統(tǒng)一都轉(zhuǎn)換成1個長度,我不知道這么簡單的BUG有沒有其他設(shè)置的地方,反正后來我們沒用它轉(zhuǎn)數(shù)據(jù)結(jié)構(gòu)也就沒怎么研究了。
2
、此工具為試用版本,我們也沒找到注冊版,而試用版只能前后轉(zhuǎn)換共2000SQL語句,而要購買這個軟件也不太實際,費用高不說,還是外國的買起來也麻煩,軟件為轉(zhuǎn)換這么幾個存儲過程去耗費這么大的資金在我們這些用盜版的人看來是不可取的,我們的數(shù)據(jù)庫對象那么多,顯然這是不好辦的問題,那么能否用欺騙的手法蒙混過關(guān)呢?下面就是具體的欺騙手法了:
-記得以前用過一個軟件叫著完美卸載此軟件可以記錄安裝程序時對磁盤進(jìn)行的更改,有了這個我們就可以安裝軟件的時候記錄好此軟件對磁盤所寫入的文件,看看有什么異樣這樣我們就能理解共享軟件在那個文件寫入了注冊信息。
-通過跟蹤發(fā)現(xiàn)在安裝軟件的時候,安裝程序除了對安裝目錄寫入信息和少量的注冊表信息外沒有對磁盤做任何更改,別急,我們繼續(xù)跟蹤,跟蹤到第一次運行軟件的時候,就有了異樣,發(fā)現(xiàn)此軟件在Windows目錄下寫入了這個文件,趕忙備份此文件,轉(zhuǎn)換了幾行語句后,關(guān)閉軟件,果然此文件再次被修改,這就說明很有可能此文件就是記錄的軟件試用的行數(shù)。當(dāng)我們第二次使用的時候把備份的文件覆蓋了原文件,但此事軟件所有按鈕都禁用了,說明軟件還有其他的地方可以判斷
用戶
是否使用過軟件。重新安裝軟件(其實就是把安裝目錄里的文件重置一下),結(jié)果又可以使用2000行了。這就是軟件欺騙的全部過程,也是可當(dāng)作破解軟件的土辦法,只是麻煩一點的是需要先備份安裝目錄和那個dll文件,注意那個dll文件不能通用,必須要程序生成的本機的dll文件。當(dāng)快要用完試用行數(shù)的時候通過覆蓋文件的方式欺騙軟件,從而可以繼續(xù)試用,就這么簡單。
另外在轉(zhuǎn)換數(shù)據(jù)庫的過程中應(yīng)該還要注意以下幾個問題:
-在Oracle數(shù)據(jù)庫中命名不能大于30個英文字符,無論是表名、存儲過程名等等,統(tǒng)統(tǒng)不能大于30個字符。
-在Oracle數(shù)據(jù)庫中,存儲過程的定義更俠義一些,而不像SqlServer那樣開放。特別像返回結(jié)果集這些操作上存在很多差異,在SQLServer可以直接試用select語句返回結(jié)果集,而Oracle只能把存儲過程封裝到包中設(shè)置Out參數(shù)的Cursor數(shù)據(jù)類型來達(dá)到返回結(jié)果集的目的,在存儲過程內(nèi)部不能直接試用Select語句返回結(jié)果集,很是不便。
-在使用單純的SQL語句的時候,如果是多條語句,調(diào)用Oracle數(shù)據(jù)庫就必須封裝在begin/end語句塊中。
-手動對Oracle數(shù)據(jù)庫查詢時可以選用PL/SQL Developer這個工具,蠻好用的。
http://www.cn
blog
s.com/Dragonpro/archive/2005/11/16/277473.
html

SQL Server2005中的數(shù)據(jù)同步Oracle中時間:2007-12-10 11:11:15來源:站長資訊收集整理作者:  有時由于項目開發(fā)的需要,必須將SQLServer2005中的某些表同步到Oracle數(shù)據(jù)庫中,由其他系統(tǒng)來讀取這些數(shù)據(jù)。不同數(shù)據(jù)庫類型之間的數(shù)據(jù)同步我們可以使用鏈接服務(wù)器和SQLAgent來實現(xiàn)。假設(shè)我們這邊(SQLServer2005)有一個合同管理系統(tǒng),其中有表contract contract_project是需要同步到一個MIS系統(tǒng)中的(Oracle9i)那么,我們可以按照以下幾步實現(xiàn)數(shù)據(jù)庫的同步。

1.Oracle中建立對應(yīng)的contract contract_project表,需要同步哪些字段我們就建那些字段到Oracle表中。

  這里需要注意的是Oracle的數(shù)據(jù)類型和SQLServer的數(shù)據(jù)類型是不一樣的,那么他們之間是什么樣的關(guān)系拉?我們可以在SQLServer下運行:

SELECT *

FROM msdb.dbo.MSdatatype_mappings

SELECT *

FROM msdb.dbo.sysdatatypemappings

  來查看SQLServer和其他數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)類型對應(yīng)關(guān)系。第一個SQL語句是看SQL轉(zhuǎn)Oracle的類型對應(yīng),而第二個表則更詳細(xì)得顯示了各個數(shù)據(jù)庫系統(tǒng)的類型對應(yīng)。根據(jù)第一個表和我們的SQLServer中的字段類型我們就可以建立好Oracle表了?!?/span>

以下是引用片段:

ORACLEbigintNUMBER1931

ORACLEbinaryBLOBNULL01

ORACLEbinaryRAW-141

ORACLEbitNUMBER131

ORACLEcharCHAR-141

ORACLEcharCLOBNULL01

ORACLEcharVARCHAR2-141

ORACLEdatetimeDATENULL01

ORACLEdecimalNUMBER-131

ORACLEdouble precisionFLOATNULL01

ORACLEfloatFLOATNULL01

ORACLEimageBLOBNULL01

ORACLEintNUMBER1031

ORACLEmoneyNUMBER1931

ORACLEncharNCHAR-141

ORACLEncharNCLOBNULL01

ORACLEntextNCLOBNULL01

ORACLEnumericNUMBER-131

ORACLEnvarcharNCLOBNULL01

ORACLEnvarcharNVARCHAR2-141

ORACLEnvarchar(max)NCLOBNULL01

ORACLErealREALNULL01

ORACLEsmalldatetimeDATENULL01

ORACLEsmallintNUMBER531

ORACLEsmallmoneyNUMBER1031

ORACLEsysnameNVARCHAR212841

ORACLEtextCLOBNULL01

ORACLEtimestampRAW841

ORACLEtinyintNUMBER331

ORACLEuniqueidentifierCHAR3841

ORACLEvarbinaryBLOBNULL01

ORACLEvarbinaryRAW-141

ORACLEvarbinary(max)BLOBNULL01

ORACLEvarcharCLOBNULL01

ORACLEvarcharVARCHAR2-141

ORACLEvarchar(max)CLOBNULL01

ORACLExmlNCLOBNULL01

ORACLEbigintNUMBER1931

ORACLEbinaryBLOBNULL01

ORACLEbinaryRAW-141

ORACLEbitNUMBER131

ORACLEcharCHAR-141

ORACLEcharCLOBNULL01

ORACLEcharVARCHAR2-141

ORACLEdatetimeDATENULL01

ORACLEdecimalNUMBER-131

ORACLEdouble precisionFLOATNULL01

ORACLEfloatFLOATNULL01

ORACLEimageBLOBNULL01

ORACLEintNUMBER1031

ORACLEmoneyNUMBER1931

ORACLEncharCHAR-141

ORACLEncharCLOBNULL01

ORACLEntextCLOBNULL01

ORACLEnumericNUMBER-131

ORACLEnvarcharCLOBNULL01

ORACLEnvarcharVARCHAR2-141

ORACLEnvarchar(max)CLOBNULL01

ORACLErealREALNULL01

ORACLEsmalldatetimeDATENULL01

ORACLEsmallintNUMBER531

ORACLEsmallmoneyNUMBER1031

ORACLEsysnameVARCHAR212841

ORACLEtextCLOBNULL01

ORACLEtimestampRAW841

ORACLEtinyintNUMBER331

ORACLEuniqueidentifierCHAR3841

ORACLEvarbinaryBLOBNULL01

ORACLEvarbinaryRAW-141

ORACLEvarbinary(max)BLOBNULL01

ORACLEvarcharCLOBNULL01

ORACLEvarcharVARCHAR2-141

ORACLEvarchar(max)CLOBNULL01

ORACLExmlCLOBNULL01

ORACLEbigintNUMBER1931

ORACLEbinaryBLOBNULL01

ORACLEbinaryRAW-141

ORACLEbitNUMBER131

ORACLEcharCHAR-141

ORACLEcharCLOBNULL01

ORACLEcharVARCHAR2-141

ORACLEdatetimeDATENULL01

ORACLEdecimalNUMBER-131

ORACLEdouble precisionFLOATNULL01

ORACLEfloatFLOATNULL01

ORACLEimageBLOBNULL01

ORACLEintNUMBER1031

ORACLEmoneyNUMBER1931

ORACLEncharNCHAR-141

ORACLEncharNCLOBNULL01

ORACLEntextNCLOBNULL01

ORACLEnumericNUMBER-131

ORACLEnvarcharNCLOBNULL01

ORACLEnvarcharNVARCHAR2-141

ORACLEnvarchar(max)NCLOBNULL01

ORACLErealREALNULL01

ORACLEsmalldatetimeDATENULL01

ORACLEsmallintNUMBER531

ORACLEsmallmoneyNUMBER1031

ORACLEsysnameNVARCHAR212841

ORACLEtextCLOBNULL01

ORACLEtimestampRAW841

ORACLEtinyintNUMBER331

ORACLEuniqueidentifierCHAR3841

ORACLEvarbinaryBLOBNULL 01

ORACLEvarbinaryRAW-141

ORACLEvarbinary(max)BLOBNULL01

ORACLEvarcharCLOBNULL01

ORACLEvarcharVARCHAR2-141

ORACLEvarchar(max)CLOBNULL01

ORACLExmlNCLOBNULL01

2.建立鏈接服務(wù)器。我們將Oracle系統(tǒng)作為SQLServer的鏈接服務(wù)器加入到SQLServer中。

  具體做法參見我以前的文章http://www.cnblogs.com/studyzy/archive/2006/12/08/690307.html

3.使用SQL語句通過鏈接服務(wù)器將SQLServer數(shù)據(jù)寫入Oracle中。

  比如我們建立了鏈接服務(wù)器MIS,而Oracle中在MIS用戶下面建立了表contract_project,那么我們的SQL語句就是:

以下是引用片段:

DELETE FROM MIS..MIS.CONTRACT_PROJECT

--清空Oracle表中的數(shù)據(jù)

INSERT into MIS..MIS.CONTRACT_PROJECT--SQLServer中的數(shù)據(jù)寫到Oracle

SELECTcontract_id,project_code,actual_money

FROM contract_project

  如果報告成功,那么我們的數(shù)據(jù)就已經(jīng)寫入到Oracle中了。用

以下是引用片段:

SELECT *

FROM MIS..MIS.CONTRACT_PROJECT

  查看Oracle數(shù)據(jù)庫中是否已經(jīng)有數(shù)據(jù)了。

4.建立SQLAgent,將以上同步SQL語句作為執(zhí)行語句,每天定時同步兩次。

  這樣我們的同步就完成了。

  這里需要注意的是MIS..MIS.CONTRACT_PROJECT這里必須要大寫,如果是小寫的話會造成同步失敗。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    中国一区二区三区人妻| 亚洲午夜福利视频在线| 国产欧美日产久久婷婷| 激情内射日本一区二区三区| 日本不卡一区视频欧美| 中文字幕佐山爱一区二区免费| 亚洲国产另类久久精品| 国产三级不卡在线观看视频| 午夜精品国产精品久久久| 久久偷拍视频免费观看| 日本加勒比系列在线播放| 欧美91精品国产自产| 国产午夜福利一区二区| 欧美日本精品视频在线观看| 一区二区免费视频中文乱码国产 | 亚洲精品一二三区不卡| 中文字幕在线五月婷婷| 亚洲熟妇av一区二区三区色堂| 东京热电东京热一区二区三区| 亚洲中文字幕在线综合视频| 欧美韩国日本精品在线| 欧美自拍系列精品在线| 国产美女网红精品演绎| 在线观看中文字幕91| 日本精品中文字幕在线视频 | 九九热九九热九九热九九热| 日韩不卡一区二区在线| 欧美黑人暴力猛交精品| 中文久久乱码一区二区| 国产日韩欧美综合视频| 欧美精品女同一区二区| 日本特黄特色大片免费观看| av国产熟妇露脸在线观看| 中国黄色色片色哟哟哟哟哟哟| 尤物久久91欧美人禽亚洲| 欧美色婷婷综合狠狠爱| 99久久精品午夜一区二| 国产亚洲不卡一区二区| 人妻内射在线二区一区| 91午夜少妇极品福利| 国产一区二区三区四区免费|