开始行动
在RedHat上安装Oracle可以是相当轻而易举的但要是完全跟着Oracle公司的文档走就未必那么容易了 最快的捷径是Tom Bisset的主页
如果您看了Tom的主页那么您会注意到他漏了JDBC的安装如果您准备使用JDBC(对于跨平台的Oracle应用十分方便)只需在安装屏幕要求您选择组件(components)时加上该选项即可当然您应该先装好JDK我个人使用Blackdown的JDK (译注Redhat包括JDK)然后需要设置oracle
用户的ClassPath环境变量最好的办法是在oracle用户目录的bash_profile 或 profile中加上一句
CLASSPATH=/usr/lib/jdk/lib/classeszip; export CLASSPATH
然后如果您只需做Web Applet的话在安装程序Choose JDBC
Components的时候 选择JDK JDBC Thin Driver如果您需要做完整的Java应用选择JDK JDBC OCI Driver
另外请注意安装程序让您输入各口令时如果口令不符合规范不会警告我第一次安装时口令里加了这在UNIX中是允许的Oracle就是另一码事了直到安装快结束时程序才告诉我口令有问题当时为保险 起见我从头做了一次安装
安装程序的另一个问题是试图往还没有建立的目录里拷贝文件有必要在安装前
mkdir p /u/app/oracle/product//doc/server/install这一
关过后万事大吉
安装成功后必须以ROOT身份登录运行rootsh我对rootsh作了以下改动
· LBIN环境变量从/usr/lbin改成了/usr/local/bin
· 增加环境变量LOG=/tmp/oraclerootshlog
这样脚本的运行结果会记录
下来
rootsh里说到要想数据库作为一个服务器运行必须先设定TWO_TASK变量但是事实上如果从安装Oracle的机器上运行rootsh就没有必要设这个变量
Python和Oracle
我配置了一下python(译注一种强大快速的面向对象的脚本语言)以测试Oracle的编程接口和网络接口 在python中要连Oracle需要Digital Creation(Zope应用服务器的作者)的DCOracle模块您只需下载软件并按照指示照做就行如果是DCOracle 使用
Setup的配置从ORACLE_LIBS变量中删去lsocket lnsl lgen
lelf laio 和lposix即可那些都是Solaris专用的注意Redhat 和中安装的 python设置不全config目录和include目录被省略无法编译安装第三方的模块您必须自己编译python或者下载一个合适的RPM找python的RPM最好的去处可能是Oliver Andrich的 Python & Linux主页
只要rpm e nodeps python 然后 rpm i pythonpythondev和其他RPM即可装好python后我运行了以下的基本查询访问Oracle
[uche@malatesta uche]$ python
Python (# Sep ::) [GCC ] on linuxi
Copyright Stichting Mathematisch Centrum Amsterdam
>>> import DCOracle
>>> #connect to DB scott/tiger are the test database username/password
>>> dbc=DCOracleConnect(scott/tiger@sforza) #sforza is the local
Oracle
server
>>> c = dbccursor()
>>> cexecute(SELECT * FROM emp WHERE empdeptno = )
>>> rows = cfetchall()
>>> print rows
[( CLARK MANAGER dbiDate( ::)
None )
( KING PRESIDENT None dbiDate( ::)
None )
( MILLER CLERK dbiDate( ::)
None )]
开发工作站配置
我在数据库服务器以外的一台机器上编译安装了python和其他编程接口最初看起来似乎我必须安装Oracle 的所有PRO*C/C++软件包但要把Oracle安装程序运行到那一步也够麻烦的所以我不想那样办于是我找出了写程序所需要的最小限量的头文件(include)对象文件(object)和库文件(library):
$ORACLE_HOME/lib/*
$ORACLE_HOME/rdbms/demo/*
$ORACLE_HOME/rdbms/lib/*
我的机器上设ORACLE_HOME为/usr/local/oracle
注意这些文件还不能让您可以在C程序中直接嵌入SQL语句只有完整安装PRO*C/C++后才行如果要用JAVA的话还得增加$ORACLE_HOME/jdbc/lib/*
注意把这个目录加到ClASSPATH变量中
JDBC连接
为测试JDBC连接我作了一个小程序在一个listbox内显示测试库中的所有雇员名下面的程序是调用JDBC的java Applet程序是调用JAVA程序的HTML超文本如果您的JDBC已经安装成功将程序拷贝为 JDBCTestjava将程序拷贝为l然后
javac JDBCTestjava
appletviewer l
您就可以自己看看结果如何了
程序
/*
Applet that reads in several rows from a remote Oracle database
and presents them in a listbox
*/
import javasql*;
import javaawt*;
import javaapplet*;
import javalang*;
public class JDBCTest extends Applet
{
//Singleselect ListBox
private List employee_list = new List( false)
public void init()
{
setLayout(new BorderLayout());
try {
//Set up the Oracle JDBC driver
DriverManagerregisterDriver(new oraclejdbcdriverOracleDriver());
//Connect to an Oracle database on machine sforza using username
//scott and password tiger
Connection DB_conn = DriverManagergetConnection
(jdbc:oracle:thin:@sforza::ORCL scott tiger);
//Connection DB_conn = DriverManagergetConnection
(jdbc:oracle:thin:scott/tiger@sforza::ORCL);
//Create a JDBC statement object
Statement statement_obj = DB_conncreateStatement();
//Execute a query to get the employee names from the test DB
ResultSet results = statement_objexecuteQuery (select ENAME from
EMP);
//Populate the list box with all the employee names
while (resultsnext ()){
employee_listadd(resultsgetString());
}
} catch (SQLException e) {
throw new RuntimeException(SQL Exception + egetMessage());
}
add(employee_list);
}
}
程序
//IETF//DTD HTML//EN>
程序的大部分都是与具体数据库无关的JDBC调用依样画葫芦您也可以
访问PostgresQL主要和Oracle相
关的部分是
Connection DB_conn = DriverManagergetConnection
(jdbc:oracle:thin:@sforza::ORCL scott tiger);
注意 Oracle thin JDBC driver中URI的格式
jdbc:oracle:thin:@::如果您想在URI中包括用户名和口令的话
jdbc:oracle:thin:username/password@::同样的URI还有一个较长的格式
jdbc:oracle:thin:@(description=(address=(host=_IP>)(protocol=tcp)(port=))(connect_data=(sid=)))注意ORCL是系统安装的缺省SID(System Identifier系统标识符)
如果您在安装时使用了其他的SID
在URI里也用那个SID$ORACLE_HOME/network/admin/tnsnamesora包括了Oracle服务器的端口和SID设置这是TNS ListenerOracle网络连接进程的配置文件如果您无法通过网络连接数据库的话首先应该检查端口号和SID是否正确TNS listner是否正常(译注lsnrctl status或者tnsping)JDBC并不是开发SQL数据库应用的唯一手段ANSI标准SQLJ允许在JAVA程序中直接嵌入SQL语句Oracle for Linux 并没有捆绑SQLJ但可以作为另一个独立产品获得SQLJ是%的JAVA应该在Linux上运行没有问题事实上SQLJ在底层使用的就是JDBC因此可以同任何SQL数据库互联并不限于Oracle
希望上面的这些例子能对您的编程有所帮助可惜Oracle for Linux
的编程文档相当的少要不就是隐藏得十分深:) 也许在数据库编程得心应手之前您得先啃它一两本书
PL/SQL
对SQL的过程性语言扩展(PL/SQL)可能是Oracle最着名的特点这种
强大的专业数据库管理语言允许您对
声明性的SQL加逻辑控制一般PL/SQL的存储过程(stored procedure)用命令行的sqlplus图形化