隨著Oracle在中國的廣泛應(yīng)用,許多原來使用MS SQL7.0、Sysbase、Access等數(shù) 據(jù)庫的用戶都碰到了數(shù)據(jù) 移植 的問題。 其實(shí),存在著許多的方法,這里將介紹3 種方法。 1、使用MS SQL7.0自帶的Import/Export工具 Import/Export工具可以方便的把數(shù)據(jù) 移植 到Oracl
隨著Oracle在中國的廣泛應(yīng)用,許多原來使用MS SQL7.0、Sysbase、Access等數(shù) 據(jù)庫的用戶都碰到了數(shù)據(jù)移植的問題。 其實(shí),存在著許多的方法,這里將介紹3 種方法。1、使用MS SQL7.0自帶的Import/Export工具 Import/Export工具可以方便的把數(shù)據(jù)移植到Oracle。你需要通過定義ODBC For Oracle 作為目的源。這樣的方法可以保證SQL7的絕大部分?jǐn)?shù)據(jù)移植到Oracl e中去,但預(yù)先你必須在Oracle建立user 和 相應(yīng)的tablespace。因?yàn)镾QL7中有 一 些特殊的datatype,如text 、image等。當(dāng)一個table中有多于一個text或image 的字段時,將出現(xiàn)錯誤,不能執(zhí)行。這是你需要做出選擇,或者把text 鏡像為v archar2(4000),或者鏡像為Long datatype,但long datatype一個table里只能 有一個。而且,還有可能遇到字符集的問題,最好用第三種方法或者第四種。所 以你遇到這樣的情況,可以結(jié)合使用第3種方法。
2、使用Oracle Migration Workbanch。 目前的版本是2.2,這個工具可以在http://technet.oracle.com免費(fèi)下載。 它是Oracle提供的一個代替SQl*Loader的工具,當(dāng)然目前該工具仍然不能完全取 代SQL*Loader。使用OMWB,只要你定義了ODBC for MS SQL7 或Access或Sysbase ,就可以很方便的把tabels、views、triger、procedure、shortnaps、users等 完全轉(zhuǎn)到Oracle中去,對于text,可以鏡像為CLOB類型,CLOB類型可以在一個Or acle table里有多列。 image可以鏡像為BLOB。但是遺憾的是,OMWB2.2不支持 中 文CLOB,無論我如何調(diào)整,數(shù)據(jù)migrate到Oracle后,都變成了???,如果誰有 解 決的方法,別忘了email給我。我對OMWB對數(shù)據(jù)流(如image,video,sound)的控 制非常的欣賞。
3、使用Oracle的 SQL*Loader 使用SQL*Loader,也許是最不方便的方法,但是是最有效的方法。可以使用 各種方法把源數(shù)據(jù)導(dǎo)到一個外部分件中。我使用了MS SQL7帶的BCP工具,可以把 那些特殊多text字段的tables導(dǎo)出作為外部文件。然后使用SQL*Loader在把這些 數(shù)據(jù)導(dǎo)到Oracle的一個臨時表里,在對第2中方法出現(xiàn)的????字段進(jìn)行update。
4、使用程序進(jìn)行移植 例子:從SQL7.0向基于Linux下的Oracle數(shù)據(jù)庫倒入數(shù)據(jù): 程序語言:java 與數(shù)據(jù)庫的連接 SQL7.0:jdbc-odbc橋,java自帶。 Oracle:jdbc,Oracle提供。 代碼如下:
import java.lang.*;
import java.sql.*;
import oracle.jdbc.driver.*; //倒入要用到的包
public class hhw extends Object
{ public static void main(String args[]) throws SQLException, ClassNotFoundException //拋出SQLException異常 { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Class.forName ("oracle.jdbc.driver.OracleDriver"); // 登記驅(qū)動程序,準(zhǔn)備聯(lián)接數(shù)據(jù)庫
Connection cn1 =DriverManager.getConnection"jdbc:oracle:thin:@192.16 8.1.52:1521:SONIC", "sadly", "sadly");
Connection cn2 =DriverManager.getConnection"jdbc:odbc:sql", "sa", "" ); //聯(lián)接到數(shù)據(jù)庫,建立到兩個數(shù)據(jù)庫的連接
Statement s1=cn1.createStatement();
Statement s2=cn2.createStatement();
ResultSet rs1=s2.executeQuery("select * from users where id>0 and id<4 0000 "); //從數(shù)據(jù)源中取得數(shù)據(jù),定義一些中間變量
int id;
String name=new String("1");
String passwd=new String("1");
String email=new String("1"); //執(zhí)行另一個查詢,向目的數(shù)據(jù)庫插入數(shù)據(jù)
while(rs1.next())
{id=rs1.getInt(1);
name=rs1.getString("name");
passwd=rs1.getString("passwd");
email=rs1.getString("email"); //System.out.print(id+name+passwd+email);
s1.executeQuery("insert into bbsuser values(\\"+id+"\,\\"+name+"\,\\"+pas swd+"\,\\"+email+"\)"); } }}
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com