在Linux機(jī)器上安裝運(yùn)行Oracle 摘要:Oracle于去年年底宣布移植Oracle 8和Oracle Application Server到Linux。 這是一個(gè)明確無誤的標(biāo)志:整個(gè)世界都應(yīng)該認(rèn)識到,Linux已經(jīng)是一個(gè)嚴(yán)肅的操作系統(tǒng),足以承擔(dān)企業(yè)級的應(yīng)用。 Uche Ogbuji在下文中解釋了應(yīng)該如何安裝、配置和初步使用Oracle 8 for Linux。
10年積累的網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有沽源免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
如何在你的Linux機(jī)器上安裝運(yùn)行Oracle
一篇實(shí)用指導(dǎo)
經(jīng)過了許多謠傳和暗示之后,Oracle于1998年10月7日發(fā)布了Linux上的Oracle 8數(shù)據(jù)庫和Oracle Application Server。這是Linux近期歷史中最為耀眼的一幕。
無論您個(gè)人對Oracle公司的看法如何,該公司在大規(guī)模數(shù)據(jù)應(yīng)用領(lǐng)域的巨大聲譽(yù)使這次產(chǎn)品發(fā)布成為一個(gè)明確 無誤的標(biāo)志:整個(gè)世界都應(yīng)該認(rèn)識到,Linux已經(jīng)是一個(gè)嚴(yán)肅的操作系統(tǒng),足以承擔(dān)企業(yè)級的應(yīng)用。
但對于任何真正關(guān)心Linux的人來說,各種宣傳攻勢只是過眼煙云,只有代碼才是關(guān)鍵的。(only code matters. 譯注:事實(shí)上,Oracle 8i, 即8.1.5 for Linux已經(jīng)開發(fā)完成,但其中的JServer模塊有問題,所以O(shè)racle還沒有發(fā)布。)
開始行動(dòng)
在RedHat上安裝Oracle可以是相當(dāng)輕而易舉的,但要是完全跟著Oracle公司的文檔走就未必那么容易了 。最快的捷徑是Tom Bisset的主頁:
。
如果您看了Tom的主頁,那么您會(huì)注意到他漏了JDBC的安裝。如果您準(zhǔn)備使用JDBC(對于跨平臺(tái)的Oracle應(yīng)用十分方便),只需在安裝屏幕要求您選擇組件(components)時(shí),加上該選項(xiàng)即可。當(dāng)然,您應(yīng)該先裝好JDK。我個(gè)人使用Blackdown的JDK 1.1.7。(譯注:Redhat包括JDK)然后需要設(shè)置oracle用戶的ClassPath環(huán)境變量,最好的辦法是在oracle用戶目錄的.bash_profile 或 .profile中加上一句:
CLASSPATH=/usr/lib/jdk/lib/classes.zip; export CLASSPATH然后,如果您只需做Web Applet的話,在安裝程序"Choose JDBC Components"的時(shí)候, 選擇"JDK 1.1 JDBC Thin Driver",如果您需要做完整的Java應(yīng)用,選擇"JDK 1.1 JDBC OCI Driver"。
另外請注意:安裝程序讓您輸入各口令時(shí),如果口令不符合規(guī)范,不會(huì)警告。我第一次安裝時(shí),口令里加了".",這在UNIX中是允許的,Oracle就是另一碼事了。直到安裝快結(jié)束時(shí),程序才告訴我口令有問題。當(dāng)時(shí)為保險(xiǎn) 起見,我從頭做了一次安裝。
安裝程序的另一個(gè)問題是試圖往還沒有建立的目錄里拷貝文件。有必要在安裝前
mkdir -p /u01/app/oracle/product/8.0.5/doc/server.805/install。
這一關(guān)過后萬事大吉。
安裝成功后,必須以ROOT身份登錄,運(yùn)行root.sh。我對root.sh作了以下改動(dòng):
· LBIN環(huán)境變量從/usr/lbin改成了/usr/local/bin
· 增加環(huán)境變量LOG=/tmp/oracle-root.sh.log,這樣腳本的運(yùn)行結(jié)果會(huì)記錄下來
root.sh里說到,要想數(shù)據(jù)庫作為一個(gè)服務(wù)器運(yùn)行,必須先設(shè)定TWO_TASK變量;
但是,事實(shí)上如果從安裝Oracle的機(jī)器上運(yùn)行root.sh,就沒有必要設(shè)這個(gè)變量。
Python和Oracle
我配置了一下python(譯注:一種強(qiáng)大,快速的面向?qū)ο蟮哪_本語言),以測試Oracle的編程接口和網(wǎng)絡(luò)接口 。在python中要連Oracle,需要Digital Creation(Zope應(yīng)用服務(wù)器的作者)的DCOracle模塊。
您只需下載軟件并按照指示照做就行。如果是DCOracle 1.1.0,使用Setup-8.0.4的配置,從ORACLE_LIBS變量中刪去-lsocket, -lnsl, -lgen, -lelf, -laio, 和-lposix4即可,那些都是Solaris專用的。注意Redhat 5.2和6.0中安裝的 python設(shè)置不全,config目錄和include目錄被省略,無法編譯安裝第三方的模塊。您必須自己編譯python或者下載一個(gè)合適的RPM。找python的RPM,最好的去處可能是Oliver Andrich的 Python Linux主頁。
只要rpm -e --nodeps python, 然后 rpm -i python,python-dev和其他RPM即可。
裝好python后,我運(yùn)行了以下的基本查詢,訪問Oracle。
[uche@malatesta uche]$ python
Python 1.5.1 (#1, Sep 3 1998, 22:51:17) [GCC 2.7.2.3] on linux-i386
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
import DCOracle
#connect to DB. scott/tiger are the test database username/password
dbc=DCOracle.Connect("scott/tiger@sforza") #sforza is the local
Oracle
server
c = dbc.cursor()
c.execute("SELECT * FROM emp WHERE emp.deptno = 10")
rows = c.fetchall()
print rows
[(7782, CLARK, MANAGER, 7839, dbiDate(1981-06-09 00:00:00), 2450.0,
None, 10),
(7839, KING, PRESIDENT, None, dbiDate(1981-11-17 00:00:00), 5000.0,
None, 10),
(7934, MILLER, CLERK, 7782, dbiDate(1982-01-23 00:00:00), 1300.0,
None, 10)]
開發(fā)工作站配置
我在數(shù)據(jù)庫服務(wù)器以外的一臺(tái)機(jī)器上編譯安裝了python和其他編程接口。最初,看起來似乎我必須安裝Oracle 的所有PRO*C/C++軟件包。但要把Oracle安裝程序運(yùn)行到那一步也夠麻煩的,所以我不想那樣辦。于是我找出了寫程序所需
要的最小限量的頭文件(include)、對象文件(object)和庫文件(library):
$ORACLE_HOME/lib/*
$ORACLE_HOME/rdbms/demo/*
$ORACLE_HOME/rdbms/lib/*
我的機(jī)器上設(shè)ORACLE_HOME為/usr/local/oracle。
注意這些文件還不能讓您可以在C程序中直接嵌入SQL語句,只有完整安裝PRO*C/C++后才行。如果要用JAVA的話,還得增加$ORACLE_HOME/jdbc/lib/*;注意把這個(gè)目錄加到ClASSPATH變量中。
JDBC連接
為測試JDBC連接,我作了一個(gè)小程序,在一個(gè)listbox內(nèi)顯示測試庫中的所有雇員名。下面的程序1是調(diào)用JDBC的java Applet,程序2是調(diào)用JAVA程序的HTML超文本。如果您的JDBC已經(jīng)安裝成功,將程序1拷貝為 JDBCTest.java,將程序2拷貝為JDBCTest.html,
然后:
javac JDBCTest.java
appletviewer JDBCTest.html
您就可以自己看看結(jié)果如何了:
程序1:
/*
Applet that reads in several rows from a remote Oracle database
and presents them in a listbox.
*/
import java.sql.*;
import java.awt.*;
import java.applet.*;
import java.lang.*;
public class JDBCTest extends Applet
{
//Single-select ListBox
private List employee_list = new List(5, false)
public void init()
{
setLayout(new BorderLayout());
try {
//Set up the Oracle JDBC driver
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
//Connect to an Oracle database on machine sforza, using username
//"scott" and password "tiger"
Connection DB_conn = DriverManager.getConnection
("jdbc:oracle:thin:@sforza:1521:ORCL", "scott", "tiger");
//Connection DB_conn = DriverManager.getConnection
("jdbc:oracle:thin:scott/tiger@sforza:1521:ORCL");
//Create a JDBC statement object
Statement statement_obj = DB_conn.createStatement();
//Execute a query to get the employee names from the test DB
ResultSet results = statement_obj.executeQuery ("select ENAME from
EMP");
//Populate the list box with all the employee names
while (results.next ()){
employee_list.add(results.getString(1));
}
} catch (SQLException e) {
throw new RuntimeException("SQL Exception " + e.getMessage());
}
add(employee_list);
}
}
JDBC談不上什么配置。
在java項(xiàng)目中引入jdbc這個(gè)jar即可。
如果你會(huì)設(shè)置classpath,就該知道這個(gè)ojdbc該放到何處。
java連接Oracle11G:
1,找到驅(qū)動(dòng)包,在oracle安裝目錄下我的是D:\Oracle\product\11.1.0\db_1\jdbc\lib;此目錄下有ojdbc5.jar,ojdbc6.jar,如果jdk5就用5,6就用6;
2,配置驅(qū)動(dòng)包的變量(我把驅(qū)動(dòng)包拷出來,放在d:\java\util里面),配置后上面MYSQL的類似。
3,測試代碼:
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.PreparedStatement ;
public class JDBCOracle{
// 定義數(shù)據(jù)庫驅(qū)動(dòng)程序
public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
// 定義數(shù)據(jù)庫的連接地址
public static final String DBURL = "jdbc:oracle:thin:@localhost:端口號:數(shù)據(jù)庫標(biāo)識符" ;
//端口號后標(biāo)識符可以通過在doc下運(yùn)行l(wèi)snrctl status查看 default:1521
// 數(shù)據(jù)庫的連接用戶名
public static final String DBUSER = "scott" ;
// 數(shù)據(jù)庫的連接密碼
public static final String DBPASS = "tiger" ;
public static void main(String args[]) throws Exception{ // 所有異常拋出
Connection conn = null ; // 數(shù)據(jù)庫連接
Class.forName(DBDRIVER) ; // 加載驅(qū)動(dòng)程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
PreparedStatement pstmt = null ;
String sql = "INSERT INTO person(id,name,age,birthday) VALUES (myseq.nextVal,?,?,?)" ;
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1,"tomcat") ;
pstmt.setInt(2,30) ;
pstmt.setDate(3,new java.sql.Date(new java.util.Date().getTime())) ;
pstmt.executeUpdate() ; // 執(zhí)行更新操作
pstmt.close() ;
conn.close() ; // 數(shù)據(jù)庫關(guān)閉
}
};
ODBC(Open Database Connectivity,開放數(shù)據(jù)庫互連)是微軟公司開放服務(wù)結(jié)構(gòu)(WOSA,Windows Open Services Architecture)中有關(guān)數(shù)據(jù)庫的一個(gè)組成部分,它建立了一組規(guī)范,并提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)API(應(yīng)用程序編程接口)。這些API利用SQL來完成其大部分任務(wù)。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。
一個(gè)基于ODBC的應(yīng)用程序?qū)?shù)據(jù)庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的數(shù)據(jù)庫操作由對應(yīng)的DBMS的ODBC驅(qū)動(dòng)程序完成。也就是說,不論是FoxPro、Access還是Oracle數(shù)據(jù)庫,均可用ODBC API進(jìn)行訪問。由此可見,ODBC的最大優(yōu)點(diǎn)是能以統(tǒng)一的方式處理所有的數(shù)據(jù)庫。
一個(gè)完整的ODBC由下列幾個(gè)部件組成:
應(yīng)用程序(Application)。
ODBC管理器(Administrator)。該程序位于Windows 95控制面板(Control Panel)的32位ODBC內(nèi),其主要任務(wù)是管理安裝的ODBC驅(qū)動(dòng)程序和管理數(shù)據(jù)源。
驅(qū)動(dòng)程序管理器(Driver Manager)。驅(qū)動(dòng)程序管理器包含在ODBC32.DLL中,對用戶是透明的。其任務(wù)是管理ODBC驅(qū)動(dòng)程序,是ODBC中最重要的部件。
ODBC API。
ODBC 驅(qū)動(dòng)程序。是一些DLL,提供了ODBC和數(shù)據(jù)庫之間的接口。
數(shù)據(jù)源。數(shù)據(jù)源包含了數(shù)據(jù)庫位置和數(shù)據(jù)庫類型等信息,實(shí)際上是一種數(shù)據(jù)連接的抽象。
各部件之間的關(guān)系如圖下圖所示:
應(yīng)用程序要訪問一個(gè)數(shù)據(jù)庫,首先必須用ODBC管理器注冊一個(gè)數(shù)據(jù)源,管理器根據(jù)數(shù)據(jù)源提供的數(shù)據(jù)庫位置、數(shù)據(jù)庫類型及ODBC驅(qū)動(dòng)程序等信息,建立起ODBC與具體數(shù)據(jù)庫的聯(lián)系。這樣,只要應(yīng)用程序?qū)?shù)據(jù)源名提供給ODBC,ODBC就能建立起與相應(yīng)數(shù)據(jù)庫的連接。
在ODBC中,ODBC API不能直接訪問數(shù)據(jù)庫,必須通過驅(qū)動(dòng)程序管理器與數(shù)據(jù)庫交換信息。驅(qū)動(dòng)程序管理器負(fù)責(zé)將應(yīng)用程序?qū)DBC API的調(diào)用傳遞給正確的驅(qū)動(dòng)程序,而驅(qū)動(dòng)程序在執(zhí)行完相應(yīng)的操作后,將結(jié)果通過驅(qū)動(dòng)程序管理器返回給應(yīng)用程序。
在訪問ODBC數(shù)據(jù)源時(shí)需要ODBC驅(qū)動(dòng)程序的支持。用Visual C++ 5.0安裝程序可以安裝SQL Server、 Access、 Paradox、 dBase、 FoxPro、 Excel、 Oracle 和Microsoft Text等驅(qū)動(dòng)程序.在缺省情況下,VC5.0只會(huì)安裝SQL Server、 Access、 FoxPro和dBase的驅(qū)動(dòng)程序.如果用戶需要安裝別的驅(qū)動(dòng)程序,則需要重新運(yùn)行VC 5.0的安裝程序并選擇所需的驅(qū)動(dòng)程序。
參考資料:
1、安裝完dbeaver軟件后,點(diǎn)擊圖標(biāo)啟動(dòng)。啟動(dòng)完成后,在首頁的左側(cè)的數(shù)據(jù)庫導(dǎo)航窗口中點(diǎn)擊右鍵,在出現(xiàn)的菜單中找到“新建連接”的選項(xiàng)并點(diǎn)擊打開連接編輯窗口。
2、在打開的窗口中,找到你要連接的數(shù)據(jù)庫的類型和對應(yīng)的驅(qū)動(dòng)。比如我們需要的連接數(shù)據(jù)庫是SQL Server,驅(qū)動(dòng)程序是jdbc,則點(diǎn)擊MS SQL Server后,選擇Microsoft Driver.選擇完成后點(diǎn)擊底部的Next按鈕進(jìn)入下一步。
3、在通用JDBC連接設(shè)置窗口中,輸入數(shù)據(jù)庫所在服務(wù)器或電腦的IP地址后,系統(tǒng)會(huì)自動(dòng)生成JDBC URL,并且默認(rèn)了SQL Server的端口號為1433。如果需要指定連接的數(shù)據(jù)庫或者模式的名稱的話就在空格中輸入...然后數(shù)據(jù)數(shù)據(jù)庫連接的用戶名和密碼。
4、輸入完成后,在窗口底部右側(cè)有一個(gè)“Test Connection”(測試連接)的按鈕,點(diǎn)擊該按鈕后可以測試輸入的信息,比如地址、用戶名和密碼等是否正確。返回結(jié)果為success的話,說明連接是通的。點(diǎn)擊“OK”按鈕關(guān)閉窗口后點(diǎn)擊“Next”進(jìn)入下一步。
5、在創(chuàng)建新的連接窗口中,因?yàn)椴恍枰斎雰?nèi)容,也不用代理。所以這個(gè)窗口中沒有信息編輯,直接點(diǎn)擊底部的“Next”按鈕進(jìn)入下一步。
6、結(jié)束創(chuàng)建連接窗口中,選擇你要?jiǎng)?chuàng)建的連接類型。系統(tǒng)提供了三種類型:開發(fā)、測試和產(chǎn)品,建議選擇開發(fā)或者測試模式。還可以選擇連接修改的內(nèi)容是否自動(dòng)提交,如果是測試環(huán)境上的話這個(gè)選項(xiàng)不用管,如果是正式在用的數(shù)據(jù)庫的話,建議不要自動(dòng)提交。
7、連接創(chuàng)建完成后,在左側(cè)的數(shù)據(jù)庫導(dǎo)航窗口中找到對應(yīng)的連接,點(diǎn)擊后系統(tǒng)自動(dòng)連接遠(yuǎn)程數(shù)據(jù)庫,并將數(shù)據(jù)庫中的內(nèi)容更新下來。如圖可以看到遠(yuǎn)程數(shù)據(jù)庫中的各個(gè)實(shí)例。
8、點(diǎn)擊實(shí)例名稱后,在下面顯示了具有該實(shí)例訪問權(quán)限的各個(gè)用戶。點(diǎn)擊用戶頭像后,系統(tǒng)自動(dòng)刷新該用戶可以訪問的表,一個(gè)用戶可以訪問多張表,在該用戶下羅列了他所能夠訪問的表的名稱。
1,Oracle客戶端切換成Oracle8i版本,比如8.1.6或者8.1.7;
2,確認(rèn)操作系統(tǒng)環(huán)境中Path有以下路徑:C:\Program Files (x86)\Common Files\Borland Shared\BDE;(注:SQLORA32.DLL 和 SQLORA8.DLL 均在此目錄下);
3,配置Oracle客戶端net服務(wù),確認(rèn)服務(wù)名;
4,按你上圖修改SERVER_NAME為Oracle net服務(wù)名;
5,在Databases標(biāo)簽頁建立BDE的Oracle測試;雙擊進(jìn)行測試;