directory search
oracle知识 ORACLE的数据类型 Oracle技术网—DBMS_Job包的用法 Oracle技术网—Oracle for NT系统实用工具介绍 Oracle技术网—Oracle常见错误代码 Oracle技术网—Oracle常用Script Oracle技术网—Oracle常用数据字典 Oracle技术网—ORACLE数据库简介 Oracle技术网—Oracle特殊包 Oracle技术网—Oracle相关站点 Oracle技术网—哪些初始化参数最影响Oracle系统性能 PL/SQL DBA Oracle7 7.3.2.2 Oracle技术网—listener.log的内容增长很快,是否可以删除重建 Oracle技术网—ORACLE表空间恢复方案 Oracle技术网—Oracle常用系统文件有哪些 Oracle技术网—ORACLE回滚段管理(上) Oracle技术网—ORACLE回滚段管理(下) Oracle技术网—Oracle如何决定使用哪个回退段 Oracle技术网—Oracle数据库的空间管理技巧 Oracle技术网—Oracle数据库碎片整理 Oracle技术网—Oracle数据库有哪几种关闭方式 Oracle技术网—Oracle数据库有哪几种启动方式 Oracle技术网—Oracle预定义角色有哪些 Oracle技术网—ROLLBACK不能回滚的命令 Oracle技术网—查看哪些session正在使用哪些回滚段 Oracle技术网—存储参数(storage子句)含义及设置技巧 Oracle技术网—和权限有关的表有哪些 Oracle技术网—漫谈数据库的启动和关闭 Oracle技术网—哪些初始化参数最影响Oracle系统性能 Oracle技术网—如何备份控制文件 Oracle技术网—如何查出前台正在发出的sql语句 Oracle技术网—如何查看Oracle版本及安装了哪些选项 Oracle技术网—如何查看Oracle数据表的建表语句 Oracle技术网—如何查看SGA区剩余可用内存 Oracle技术网—如何查看各个表空间占用磁盘情况 Oracle技术网—如何查看后台进程 Oracle技术网—如何查看什么时间有哪些数据库对象结构被修改过 Oracle技术网—如何查看数据库的各种数据文件 Oracle技术网—如何查看数据库的字符集 Oracle技术网—如何查看数据文件是否自动扩展 Oracle技术网—如何查看数据文件所在的路径 Oracle技术网—如何查看用户表上的约束内容 Oracle技术网—如何查看用户表所占空间的大小 Oracle技术网—如何查询出primary key和forgen key的关系表 Oracle技术网—如何改变当前联机日志文件的大小 Oracle技术网—如何利用DBMS_SQL包和游标计算当前用户下所有表的行数 Oracle技术网—如何启动ARCHIVELOG模式 Oracle技术网—如何取出某一用户的密码,再原封不动的改回去 Oracle技术网—如何设置BLOCK_SIZE大于2K,如:4K、16K Oracle技术网—如何手工指定使用哪个回退段 Oracle技术网—如何修改internal的口令 Oracle技术网—如何移动控制文件到新的目录中 Oracle技术网—如何移数据库文件 Oracle技术网—如何增加表空间的大小 Oracle技术网—怎样查看init.ora文件 Oracle技术网—怎样查看SGA值 Oracle技术网—怎样查看哪些用户拥有SYSDBA、SYSOPER权限? Oracle技术网—怎样快速查出Oracle 数据库中的锁等待 Oracle技术网—怎样识别IO竞争和负载平衡 Exp vs Imp Oracle技术网—EXP、IMP 命令详解 Oracle技术网—Exp/Imp大量数据 Oracle技术网—Export/Import 使用技巧与常见错误 Oracle技术网—Oracle数据库的备份与恢复 Oracle技术网—如何把数据exp到Sql loader里 Oracle技术网—如何单独备份一个或多个表 Oracle技术网—如何单独备份一个或多个用户 Oracle技术网—如何导入指定表 Oracle技术网—如何建立一个与现存数据库相同,但不包含数据的空库 Oracle技术网—如何在oracle7和oracle8之间exp/imp数据 Oracle技术网—提高ORACLE数据库系统import性能 Oracle技术网—为何我的导出文件只有500K Oracle技术网—自动备份Oracle数据库 Oracle技术网—作Export或Import时,如何记录LOG信息? SQL技巧 Oracle技术网—LONG数据类型使用上的一些说明 Oracle技术网—Oracle8 PL/SQL编程风格与系统性能的提高 Oracle技术网—Oracle8中用户名、表名、列名、索引名...可以用中文命名吗 Oracle技术网—Oracle中如何实现某一字段自动增加1 Oracle技术网—SQL(Structured Query Language)语句分哪几类 Oracle技术网—SQL*PLUS常用命令列表 Oracle技术网—SQL*Plus系统环境变量有哪些?如何修改? Oracle技术网—SQL*Plus中缓冲区命令列表 Oracle技术网—SQL*Plus中能运行哪几种命令 Oracle技术网—SQLPlus中的复制和粘贴技巧 Oracle技术网—查看本用户下的各种对象的SQL脚本 Oracle技术网—查找a表中有,而在b表中没有的记录 Oracle技术网—利用PL/SQL打印ASCII表 Oracle技术网—如何查找、删除表中重复的记录 Oracle技术网—如何对CLOB行字段执行全文检索 Oracle技术网—如何对CLOB字段进行全文检索? Oracle技术网—如何改变表中列的名字 Oracle技术网—如何改变一个字段初始定义的Check范围 Oracle技术网—如何给表、列加注释 Oracle技术网—如何将 primary key 建在其它的表空间上 Oracle技术网—如何删除表中的列 Oracle技术网—如何使‘CREATE TABLE AS SELECT’能支持ORDER BY ? Oracle技术网—如何通过 SQL*PLUS 将符号 & 、'号(单引号) 插入Oracle数据库的表中 Oracle技术网—如何用SQL生成SQL批处理文件 Oracle技术网—如何在PL_SQL中读写文件 Oracle技术网—如何自动生成一个含有20000101至20500101共50年日期的表 Oracle技术网—如何自动生成一个含有2000年01月至2050年01月共50年月份的表 Oracle技术网—删除a表中和b表相同的数据 Oracle技术网—在Oracle快速进行数据行存在性检查 Oracle技术网—怎样查看表的结构 Oracle技术网—怎样改变SQL*Plus启动时默认路径 Oracle技术网—怎样计算表中的记录数 Oracle技术网—怎样在SQL*Plus中使用 '&' 来实现自定义参数变量? Oracle技术网—怎样在查询记录时给记录加锁 Oracle错误 Oracle7 7.3.2.2 Oracle技术网—Oracle 816中如何启动Enterprise Manager Oracle技术网—Oracle Enterprise Manager(OEM)工具中如何以SYSOPER、SYSDBA方式登录 Oracle技术网—ORACLE数据库应用开发常见问题及排除 Oracle技术网—监听器错误 Oracle技术网—联机热备份失败后,如何打开数据库 Oracle技术网—没有备份、只有归档日志,如何恢复数据文件 Oracle技术网—某个数据文件损坏,如何打开数据库 Oracle技术网—如何使用归档日志进行完全恢复 Oracle技术网—如何正确建立TYPE、partition(分区) Oracle技术网—一个控制文件被损坏,如何启动 Oracle技术网—在SQL*Plus中insert进的都是中文的,为什么一存入服务器后,再select出的就是???了 Oracle技术网—重装Oracle服务器后,以前的数据可以恢复吗 Oracle初学者入门 Oracle技术网—Oracle 8.1.6 for Win2000 系统文件解释 Oracle技术网—Oracle 基本知识 Oracle技术网—Oracle8 数据类型 Oracle技术网—what is sql? Oracle技术网—安装、配置后,SQL*Plus操作初步 Oracle技术网—安装Oracle后,经常使用的修改表空间的SQL代码 Oracle安装、删除 Oracle技术网—Oradim工具的用法 Oracle技术网—WINDOWS NT上,如何删除ORACLE SERVICE Oracle技术网—如何连接两台Oracle服务器 Oracle技术网—如何在Windows 2000下将Oracle完全卸载 Oracle技术网—如何在WINDOWS NT上删除所有的Oracle安装? Oracle技术网—手工安装数据库时需要安装那些系统包 Oracle技术网—手工创建数据库的全部脚本及说明 Oracle安全性问题 Oracle技术网—Linux ORACLE 8.1.5漏洞 Oracle技术网—Oracle 8.1.6的oidldapd中的漏洞 Oracle技术网—Oracle8的不安全因素及几点说明 Oracle技术网—Oracle数据库的安全策略 Oracle技术网—Oracle数据库密码文件的使用和维护 Oracle技术网—提高Oracle数据库应用系统安全的举例与分析 数据库安全性策略 Oracle系统设置、优化、连接 《Oracle8 优化技术》摘录 (第一章 安装) 《Oracle8 优化技术》摘录 (第二章 内存/CPU) 《Oracle8 优化技术》摘录 (第三章 输入/输出) Oracle技术网—ASP 中通过OLEDB访问 Oracle 的代码 Oracle技术网—Delphi5 企业版使用BDE访问 Oracle方法 Oracle技术网—oracle database access object Oracle技术网—Oracle基于Client/Server的性能调整 Oracle技术网—PB7 连接 Oracle 的配置方法 Oracle技术网—PB内置Oracle数据库接口的使用方法 Oracle技术网—PHP+Oracle(OCI) 初步 Oracle技术网—PHP4连接Oracle 8i的方法(转译) Oracle技术网—多个数据库时,如何设置默认数据库 Oracle技术网—如何备份Oracle设置 Oracle技术网—如何让你的SQL运行得更快 Oracle技术网—如何修改 SQL*Plus 的启动参数 Oracle技术网—如何在Windosws 2000中安装JSP并访问Oracle Oracle技术网—如何在Windosws 2000中安装perl并访问Oracle Oracle技术网—如何在Windosws 2000中安装PHP4并访问Oracle Oracle技术网—如何在Windosws NT中使用批处理命令自动启动或关闭Oracle Services Oracle技术网—如何在客户端省略输入数据库串,而只输入用户名、密码即可 Oracle技术网—使用Database Configuration Assistant安装第二个数据库 Oracle技术网—修改Oracle7数据库maxdatafiles参数的方法 索引、序列、快照、数据库链路、触发器 Oracle技术网—触发器的几种应用 Oracle技术网—建立触发器时最容易忽略的两个地方 Oracle技术网—快照和触发子结合使用的例子 Oracle技术网—能否通过视图更新表中的数据 Oracle技术网—如何创建一个简单的JAVA存储过程? Oracle技术网—如何创建隐藏IP地址的最后一项的函数? Oracle技术网—如何加密Oracle中的存储过程 Oracle技术网—为什么有时ORACLE数据库不用索引来查找数据 Oracle技术网—我的数据库链路为什么不工作 Oracle技术网—一个建立快照的简单例子 Oracle技术网—怎样创建一个简单的自定义过程并引用 Oracle技术网—怎样手工刷新快照 oracle与其他数据库的比较 MySQL 测试 Oracle技术网—Oracle 和 mysql 的一些简单命令对比参照 Oracle技术网—Oracle8i和Microsoft SQL Server7.0比较 Oracle技术网—比较SQL Server与Oracle、DB2 Oracle技术网—各种数据类型的比较 Oracle技术网—戏说SQL—几种SQL 服务器的比较 关键任务      在Internet上运作公司是一项艰苦的任务 其它知识 OEM常见问题及其解决办法 Oracle 8 资料库函式库 Oracle 资料库函式库 Oracle技术网—Decode()函数使用技巧(NT+IIS+ASP+ORACLE) Oracle技术网—Dual伪列 Oracle技术网—NULL 使用详解 Oracle技术网—OLAP及其多维数据分析 Oracle技术网—Oracle for NT系统实用工具介绍 Oracle技术网—ORACLE 用户的规范化管理 Oracle技术网—user、uid伪列 Oracle技术网—大型数据库设计原则 Oracle技术网—留言簿(带Oracle数据库分页的显示功能) Oracle技术网—漫谈oracle中的空值 Oracle技术网—如何正确利用Rownum来限制查询所返回的行数 Oracle技术网—什么是ROWID,为什么需要它 Oracle技术网—数据库技术考试大纲(中级) Oracle技术网—数据库行业的现状和展望 Oracle技术网—在客户端处理Oracle的数据行加锁问题 如何对CLOB行字段执行全文检索 Developer 2000 Oracle技术网—Developer/2000中各键盘触发子所对应的“按键” Oracle技术网—FORM调用REPORT时,如何去掉report server Oracle技术网—FORM中,Exception(例外)都有哪些,如何书写 Oracle技术网—FORM中,FORM中,如何引入图像 Oracle技术网—FORM中,WINDOW标题的设置 Oracle技术网—FORM中,常用快捷键有哪些 Oracle技术网—FORM中,触发子exit_form的两种功能是什么 Oracle技术网—FORM中,当光标走到块的最后一项时,如何让按“enter回车”键时,光标自动走到下一条记录的第一项? Oracle技术网—FORM中,当用鼠标点击标签画布的某一“标签页”时,如何判断点击的是哪一页 Oracle技术网—FORM中,如何屏蔽默认的功能键 Oracle技术网—FORM中,如何实现屏幕同步刷新? Oracle技术网—FORM中,如何使用警告 Oracle技术网—FORM中,如何通过 ODBC 访问 Acress 数据? Oracle技术网—FORM中 Oracle技术网—FORM中,设置应用特性(光标类型) Oracle技术网—FORM中,怎样创建动态下拉列表List Oracle技术网—FORM中如何存取声音 Oracle技术网—FORM中如何存取图象?如何把图象从一个表中导到另一个表中? Oracle技术网—MIS中的图像应用技术 Oracle技术网—MIS中的图像应用技术 Oracle技术网—从FORM中调用REPORT时,如何使打印结果直接输出到打印机上 Oracle技术网—如何从FORM中调用REPORT程序 Oracle技术网—如何改变FORM(FMX模块)运行时的title? Oracle技术网—如何在FORM运行中,使定制菜单中的“窗口(W)”菜单项不显示 Oracle技术网—如何在启动FORM程序时直接登录到Oracle数据库上? Oracle技术网—运行FORM时,如何使按钮变灰(即无效) Oracle技术网—运行FORM时,如何使窗口(runtime窗口、画布窗口)自动变成最大化、最小化? Oracle技术网—在Developer/2000中如何读写文本型操作系统文件 Oracle技术网—在Oracle中实现报表的定长输出 linux vs Unix How To Install Oracle 8.0.5 onto RedHat Linux 6 HOWTO: OAS for Linux on FreeBSD HOWTO: Oracle for Linux on FreeBSD Oracle 7.3.4 Enterprise Edition for SCO UNIX 安装步骤 Oracle技术网—Oracle .com 套件在TurboLinux上的安装 Oracle技术网—ORACLE 7.3 Enterprise在SCO OPEN SERVER 5.02 及 5.04 的安装过程 Oracle技术网—ORACLE 7.3.4.2 for SCO Unix 安装说明 Oracle技术网—Oracle 8 for solaris 2.6 安装步骤 Oracle技术网—Oracle 8(8.0.5)标准版安装指南 Oracle技术网—Oracle 8i(8.1.5)企业版安装指南 Oracle技术网—ORACLE FOR SUN SOLARIS 安装手册 Oracle技术网—ORACLE FOR SUN SOLARIS 维护手册 Oracle技术网—ORACLE V.7.3.4.3 FOR AIX 安装说明 Oracle技术网—ORACLE8I FOR SUN SOLARIS2.7 安装说明 Oracle技术网—RedHat 6.1 Step-by-step Install notes for Oracle 8i Oracle技术网—RedHat Linux 6.0 上 Oracle 8(8.0.5)标准版 安装实例 Oracle技术网—RedHat Linux 6.0 上 Oracle 8i R2 (8.1.6) 企业版安装实例 Oracle技术网—如何集成Linux/Apache/PHP4/FastCGI/Oracle/MySQL环境 Oracle技术网—如何在你的Linux机器上安装运行Oracle Oracle技术网—为Linux配备Oracle 8 Oracle技术网—在RedHat 6.0上安装Oracle 8i(全攻略)
characters

如何在你的Linux机器上安装运行Oracle

摘自:中国Linux开发联盟
摘要:Oracle于去年年底宣布移植Oracle 8和Oracle Application 
        Server
到Linux。 这是一个明确无误的标志:整个世界都应该认识到,Linux已经
是一个严肃的操作系统,足以承担企业级的应用。 Uche Ogbuji在下文中解
释了应该如何安装、配置和初步使用Oracle 8 for Linux。


如何在你的Linux机器上安装运行Oracle
一篇实用指导

经过了许多谣传和暗示之后,Oracle于1998年10月7日发布了Linux上的
Oracle 8数据库和Oracle Application Server。这是Linux近期历史中最为
耀眼的一幕。

无论您个人对Oracle公司的看法如何,该公司在大规模数据应用领域的巨大
声誉使这次产品发布成为一个明确 无误的标志:整个世界都应该认识到,
Linux已经是一个严肃的操作系统,足以承担企业级的应用。

但对于任何真正关心Linux的人来说,各种宣传攻势只是过眼烟云,只有代码
才是关键的。(only code matters. 译注:事实上,Oracle 8i, 即8.1.5
for Linux已经开发完成,但其中的JServer模块有问题,
所以Oracle还没有发布。)

开始行动

在RedHat上安装Oracle可以是相当轻而易举的,但要是完全跟着Oracle公司
的文档走就未必那么容易了 。最快的捷径是Tom Bisset的主页:
http://jordan.fortwayne.com/oracle。

如果您看了Tom的主页,那么您会注意到他漏了JDBC的安装。如果您准备使用
JDBC(对于跨平台的Oracle应用十分方便),只需在安装屏幕要求您选择组
件(components)时,加上该选项即可。当然,您应该先装好JDK。我个人使
用Blackdown的JDK 1.1.7。(译注:Redhat包括JDK)然后需要设置oracle
用户的ClassPath环境变量,最好的办法是在oracle用户目录的.bash_profile
或 .profile中加上一句:
CLASSPATH=/usr/lib/jdk/lib/classes.zip; export CLASSPATH
然后,如果您只需做Web Applet的话,在安装程序"Choose JDBC Components"
的时候, 选择"JDK 1.1 JDBC Thin Driver",如果您需要做完整的Java应用,
选择"JDK 1.1 JDBC OCI Driver"。


另外请注意:安装程序让您输入各口令时,如果口令不符合规范,不会警告。
我第一次安装时,口令里加了".",这在UNIX中是允许的,Oracle就是另一码
事了。直到安装快结束时,程序才告诉我口令有问题。当时为保险 起见,我
从头做了一次安装。

安装程序的另一个问题是试图往还没有建立的目录里拷贝文件。有必要在安装

mkdir -p /u01/app/oracle/product/8.0.5/doc/server.805/install。这一
关过后万事大吉。

安装成功后,必须以ROOT身份登录,运行root.sh。我对root.sh作了以下改动:
· LBIN环境变量从/usr/lbin改成了/usr/local/bin
· 增加环境变量LOG=/tmp/oracle-root.sh.log ,这样脚本的运行结果会记录
下来

root.sh里说到,要想数据库作为一个服务器运行,必须先设定TWO_TASK变量;
但是,事实上如果从安装Oracle的机器上运行root.sh,就没有必要设这个变量。


Python和Oracle

我配置了一下python(译注:一种强大,快速的面向对象的脚本语言),以测
试Oracle的编程接口和网络接口 。在python中要连Oracle,需要
Digital Creation(Zope应用服务器的作者)的DCOracle模块。
您只需下载软件并按照指示照做就行。如果是DCOracle 1.1.0,使用
Setup-8.0.4的配置,从ORACLE_LIBS变量中删去-lsocket, -lnsl, -lgen,
-lelf, -laio, 和-lposix4即可,那些都是Solaris专用的。注意Redhat 5.2和
6.0中安装的 python设置不全,config目录和include目录被省略,无法编译
安装第三方的模块。您必须自己编译python或者下载一个合适的RPM。找
python的RPM,最好的去处可能是Oliver Andrich的 Python & Linux主页。
只要rpm -e --nodeps python, 然后 rpm -i python,python-dev和其他RPM
即可。
装好python后,我运行了以下的基本查询,访问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)]


开发工作站配置

我在数据库服务器以外的一台机器上编译安装了python和其他编程接口。最初,
看起来似乎我必须安装Oracle 的所有PRO*C/C++软件包。但要把Oracle安装程
序运行到那一步也够麻烦的,所以我不想那样办。于是我找出了 写程序所需
要的最小限量的头文件(include)、对象文件(object)和库文件(library):
$ORACLE_HOME/lib
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);
}
}


程序2:


<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head> <title>Oracle JDBC driver test</title> </head>
<body>
<h1>Oracle JDBC driver test</h1>
<applet code="JDBCTest.class" width="200", height="150"> Your
browser doesn't support Java. </applet>
<hr>
<address>
<a href="mailto:uche.ogbuji@linuxworld.com"></a>
</address>
<!-- Created: Sat Mar 6 18:53:23 MST 1999 -->
<!-- hhmts start -->
Last modified: Sat Mar 6 22:19:26 MST 1999
<!-- hhmts end -->
</body>
</html>

程序1的大部分都是与具体数据库无关的JDBC调用,依样画葫芦您也可以
访问PostgresQL,主要和Oracle相
关的部分是:

Connection DB_conn = DriverManager.getConnection
("jdbc:oracle:thin:@sforza:1521:ORCL", "scott", "tiger");


注意 Oracle thin JDBC driver中URI的格式:
jdbc:oracle:thin:@<server_name_or_IP>:<port>:<SID>
如果您想在URI中包括用户名和口令的话:
jdbc:oracle:thin:username/password@<server_name_or_IP>:<port>:
<SID>
同样的URI还有一个较长的格式:
"jdbc:oracle:thin:@(description=(address=(host=<server_name_or
_IP>)(protocol
=tcp)(port=<port>))(connect_data=(sid=<SID>)))"
注意ORCL是系统安装的缺省SID(System Identifier,系统标识符)。
如果您在安装时使用了其他的SID,
在URI里也用那个SID。$ORACLE_HOME/network/admin/tnsnames.ora包
括了Oracle服务器的端口和SID设置。
这是TNS Listener,Oracle网络连接进程的配置文件。如果您无法通过
网络连接数据库的话,首先应该检查
端口号和SID是否正确,TNS listner是否正常(译注:lsnrctl status,
或者tnsping)。JDBC并不是开发
SQL数据库应用的唯一手段,ANSI标准SQLJ允许在JAVA程序中直接嵌入
SQL语句。Oracle for Linux 8.0.5
并没有捆绑SQLJ,但可以作为另一个独立产品获得。SQLJ是100%的
JAVA,应该在Linux上运行没有问题,
事实上SQLJ在底层使用的就是JDBC,因此可以同任何SQL数据库互联,
并不限于Oracle。

希望上面的这些例子能对您的编程有所帮助。可惜Oracle for Linux
的编程文档相当的少,要不就是隐藏得
十分深:) 也许在数据库编程得心应手之前,您得先啃它一两本书。

PL/SQL

对SQL的过程性语言扩展(PL/SQL)可能是Oracle最著名的特点。这种
强大的专业数据库管理语言允许您对
声明性的SQL加逻辑控制。一般,PL/SQL的存储过程(stored procedure)
用命令行的sqlplus,图形化的
Developer/2000(Linux上目前还没有)或其他工具开发,允许您从
Oracle众多的查询接口(Oracle Application Server, Python, Perl,
JDBC 或者C)访问。

程序3:

create or replace package stored_sample as
function get_annual_salary (emp_number in number) return number;
end stored_sample;
/
create or replace package body stored_sample as
function get_annual_salary (emp_number in number) return number
is
annual_salary number;
monthly_salary number;
begin
select sal into monthly_salary from emp where empno = emp_number;
annual_salary := monthly_salary * 24;
return (annual_salary);
end get_annual_salary;
end stored_sample;
/


上面的程序3是存储进程的一个小示范,它接受一个员工号,返回该员
工的年薪。相关的函数
get_annual_salary封装在PL/SQL包sample_package中。

如果把程序3拷贝到文件sample.sql,您可以通过sqlplus运行它,如下
所示:

[oracle@sforza demo]$ sqlplus

SQL*Plus: Release 8.0.5.0.0 - Production on Sun Mar 7 13:36:32
1999

(c) Copyright 1998 Oracle Corporation. All rights reserved.

Enter user-name: scott
Enter password:

Connected to:
Oracle8 Release 8.0.5.0.0 - Production
PL/SQL Release 8.0.5.0.0 - Production

SQL> @sample
Package created.

Package body created.

SQL> set serveroutput on
SQL> exec
dbms_output.put_line(stored_sample.get_annual_salary(7782))
58800

PL/SQL procedure successfully completed.

SQL>

通过其他的编程接口,也可以使用这个PL/SQL包。Python/DCOracle中,
参见Connection对象的procedures成员
JDBC中,参见java.sql.CallableStatement。

Oracle有众多的内置函数。事实上,大多数您以前用外部代码完成的
功能都可以通过PL/SQL高效地完成。如果您需要什么比较通常的功能,
请参考PL/SQL手册,看您需要的函数是否已经实现了。如果您准备做
大量的Oracle编程的话,经常翻阅PL/SQL手册以熟悉各种函数是大有
好处的。

管理Oracle for Linux

如果您已经习惯运行相对不那么复杂的数据库,那么在Oracle中完成
一些日常操作,例如建立新数据库或者性能调谐会显得相当复杂。有
一些关键的配置文件需要维护,如init.ora, config.ora和
tnsnames.ora。
一般有好几种办法指定一些关键参数,如当前的SID。可以在上述的
文件中声明,也可以在环境变量中声明,或者是通过oracle工具的运
行参数。这种灵活性是值得赞赏的,可惜有时搞清那一种设置优先也
很伤脑筋。

同Linux一样,Oracle提供的安全机制如果管理不当,就形同虚设。
花时间熟悉各种访问规则和设置,以及各种特殊Oracle用户帐号的角
色,还是值得的。

Oracle的性能调谐是一个非常大,也非常专的话题。调谐得当,可以
很大程度地提高性能。Oracle运行和CPU、内存、外存的关系是相当
复杂的,这些因素必须考虑。另外,PL/SQL包,存储过程,临时表空
间,表结构本身,所有这些都会随着使用而日趋复杂,保证数据库的
结构优化,没有垃圾,绝对比定期从cron运行vacuum复杂得多。

Oracle DBA(database adminstrator,数据库管理员)是电脑专业人
员中一个著名的亚文化。这并不奇怪。Oracle的强大功能和灵活性,
也同时意味着多得让人发疯的各种小秘密、小技巧、小陷阱,这方面
的特点它绝不比任何人少--包括Linux在内。您在征服Linux时可能
已经发现,O'Reilly的动物园(译注:所有O'Reilly and Associate
出版的书都以动物作封面)是一个很好的去处。如果您需要在Oracle
上完成许多工作,找找黄封面的O'Reilly Oracle专辑。那里,你会
找到比Oracle拜占庭迷宫式文档好的多的信息来源。

Oracle for Linux vs. Oracle for NT

NT上的Oracle (译注:Oracle在NT上的销量超过了SQL SERVER,是NT
第一大数据库)为许多管理功能提供了图形界面,类似的功能在UNIX
/Linux上只能通过sqlplus访问。这样的图形界面,设计得与NT控制
面板的其他部分颇为相似。Linux DBA必须熟悉sqlplus。NT的问题是,
许多管理任务要求用户在主控台(机器屏幕前)完成,如果想远程管
理就需要昂贵的第三方软件(或者Oracle Enterprise Manager?)。
UNIX上的Oracle管理可以从任何经过授权的远地进行,效果同在机器
主控台一样。

NT上的Oracle使用一个进程内的多个进程,而UNIX/Linux上的Oracle
使用多个独立的,使用相互独立的内存空间(译注:UNIX上也有多线
程的部分:Multithreaded Server,MTS,相当于前文提到的listener
的多线程版本。)NT上的实现方式避免了进程间通信,有小小的性能
优势,但UNIX上的实现方式提供了高得多的可靠性和数据完整性,因
为一个Oracle进程不可能污染另一个Oracle进程的地址空间。(译注:
在NT和VMS上,创建一个新的进程比创建一个新的线程昂贵得多,而且
NT的进程间切换很慢,因此微软建议程序员只要有可能就使用多线程。
在UNIX上,建立新进程是比较高效的。而在Linux上,建立新进程和新
的内核线程,kernel thread都使用同一个基本系统调用,效率相当高。)

在32位的硬件系统上,Linux的ext2文件系统的限制是最大文件为2G,
NT为4G。这并不太影响Oracle的用户,因为表空间tablespace可以扩
展到多个文件上,但还是有小小的效率问题。当然,64位的Linux
(Alpha,Ultra-Sparc, PA-RISC)会消除这些限制,64位的Solaris
(Solaris 7)也一样。(译注:这里其实有一些问题,待我查明再向
各位看官交代)。


一些好工具/结束语

Oracle同时发布了Oracle Application Server (OAS)的Linux版本。
对OAS的深入探讨在本文范围之外,但它确实是连接后端Oracle数据
库,建立Internet或Intranet应用的一个强有力的工具。OAS提供
JAVA开发能力,可以将HTTP和IIOP与OCI网络接口串在一起,具备
友好的界面以便设计WEB表单和报表,还有其他方便的工具。

Oracle如此流行,自然也有相应的一批开源软件(Open Source)
工具。其中的OWS killer 是一个基于JAVAServlet的可以替代OAS
的WEB接口工具,与Apache WEB服务器、Apache的Jserv JAVA Servelet
模块集成,提供对Oracle数据库的访问。(译注:OWS, Oracle Web
Server是Oracle Application Server早期版本的名称)。
您可以在Matt's House 找到更多的工具以管理Oracle的存储过程、
提供快速的报表功能。

掌握Oracle可不是举手之劳的事,但也没有必要望而却步。确实,
世上有许多更容易管理的数据库,但如果您需要高级的SQL,或者
PL/SQL的功能,或者trigger,或者各种扩展,或者先进的交易管
理,或者必须和Oracle系统共存,您会发现Linux是一个极佳的
Oracle平台。您已经在Linux的世界中探索了这样远,一定也能应
付Oracle的挑战。


资源链接:

Oracle for Linux正式发布的新闻稿:
http://www.oracle.com/cgi-bin/press/printpr.cgi?
file=199810090500.17129.html&mode=corp&td=01&product=00&
tm=10&fd=01&fm=08&status=Search&ty=1998&limit=100&fy=1998

在Redhat上安装Oracle 8.0.5和OAS 3的详细指导:
(Step-by-step install notes for Oracle 8.0.5 and Application
Server on Red Hat):
http://jordan.fortwayne.com/oracle

下载Oracle 8和Oracle Application Server:
http://technet.oracle.com/tech/linux/section.htm

Oliver Andrich's Python & Linux Page:
http://andrich.net/python

Oracle on Linux -- Oracle Technet上的论坛
http://f2.dejanews.com/oracletechnet/nonmembers/index.cgi?
do=listmsgs&conf=Early.Linux

Blackdown.org -- Linux JDK:
http://www.blackdown.org/

Pythond的Oracle模块:
http://www.zope.org/Download/DCOracle/

Oracle SQLJ -- 在Java中嵌入SQL:
http://www.oracle.com/java/sqlj/index.html

OWS Killer:
http://www.adela.sk/kuzela/OWSKiller/

Matt's House:
http://www.mattshouse.com/procedit/

在FreeBSD上运行Oracle for Linux
http://www.freebsd.org.ru/linux-oracle.HOW-TO.html
Previous article: Next article: