热点推荐
ZOL首页 > 服务器 > 知识学堂 > Oracle > 手工安装Oracle全文检索工具

手工安装Oracle全文检索工具


中国it实验室 【转载】 2009年03月25日 18:04
    在Oracle9i Rlease2中,Oracle的全文检索技术被称为:Oracle Text,功能十分强大。Oracle Text是Oracle9i采用的新名称,在Oracle8/8i中它被称作Oracle interMedia Text,在Oracle8以前它的名称是Oracle ConText Cartridge。
Oracle Text组件可以在安装数据库的时候选择,缺省是安装的,如果没有安装,那么可以按照以下方式手动安装Oracle Text。
1.创建存储表空间


\$ sqlplus "/ as sysdba"SQL*Plus: Release 9.2.0.4.0 - Production on Sun May 15 19:54:48 2005Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.Connected to:Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP and Oracle Data Mining optionsJServer Release 9.2.0.4.0 - ProductionSQL> select name from v\$datafile;NAME--------------------------------------------------------------------------------/h2love/oracle/system01.dbf/h2love/oracle/undotbs01.dbf/h2love/oracle/users01.dbf...9 rows selected.SQL> create tablespace oratext 2 datafile '/h2love/oracle/oratext01.dbf' size 100m 3 extent management local uniform size 128k 4 ; Tablespace created.

2.创建相关对象
SQL> spool text.logSQL> connect sys/oracleHURRAY as sysdbaConnected.SQL> start ?/ctx/admin/dr0csys password oratext temp...creating user CTXSYS...creating role CTXAPPSQL> connect ctxsys/passwordConnected.SQL> start ?/ctx/admin/dr0inst ?/ctx/lib/libctxx9.so============== ConText Database Objects Installation ==============This script must be run as CTXSYS. This script will exitbelow if run as any other user.User is CTXSYS... creating tables and Oracle object types... creating table dr\$parameter... creating table dr\$class... creating table dr\$object... creating table dr\$object_attribute... creating table dr\$object_attribute_lov... creating table dr\$preference... creating table dr\$preference_value... creating table dr\$index... creating table dr\$index_partition... creating table dr\$index_value... creating table dr\$policy_tab... creating table dr\$sqe... creating table dr\$ths... creating table dr\$ths_phrase... creating table dr\$ths_fphrase... creating table dr\$ths_bt... creating table dr\$section_group... creating table dr\$section... creating table dr\$stoplist... creating table dr\$stopword... creating table dr\$sub_lexer... creating table dr\$index_set... creating table dr\$index_set_index... creating table dr\$server... creating table dr\$pending... creating table dr\$waiting... creating table dr\$online_pending... creating table dr\$delete... creating table dr\$unindexed... creating table dr\$index_error... creating table dr\$parallel... creating table dr\$stats... creating table dr\$part_stats... creating named data type ctx_feedback_item_type... creating named data type ctx_feedback_type... creating safe callout library... creating CONTEXT interfacedrop public synonym contains *ERROR at line 1:ORA-01432: public synonym to be dropped does not existdrop public synonym score *ERROR at line 1:ORA-01432: public synonym to be dropped does not exist... creating CTXCAT interfacedrop public synonym catsearch *ERROR at line 1:ORA-01432: public synonym to be dropped does not exist... creating CTXRULE interfacedrop public synonym matches *ERROR at line 1:ORA-01432: public synonym to be dropped does not exist... creating CTXXPATH interface... loading package headers================== Package Installation ==========================Install Global Symbols... loading driobj.pkhNo errors.... loading dr0def.pkhNo errors....loading drig.pkhNo errors.Install DR Internal package specs... loading driutl.pkhNo errors.... loading driacc.pkhNo errors.... loading driadm.pkhNo errors.... loading dricon.pkhNo errors.... loading dridisp.pkhNo errors.... loading dridml.pkhNo errors.... loading dridoc.pkhNo errors.... loading drierr.pkhNo errors.... loading driddl.pkhNo errors.... loading driddlp.pkhNo errors.... loading driddlc.pkhNo errors.... loading driddlr.pkhNo errors.... loading driddlx.pkhNo errors.... loading drilist.pkhNo errors.... loading driload.pkhNo errors.... loading driopt.pkhNo errors.... loading dripipe.pkhNo errors.... loading dripref.pkhNo errors.... loading drirec.pkhNo errors.... loading drirep.pkhNo errors.... loading drirepm.pkhNo errors.... loading drireps.pkhNo errors.... loading drirept.pkhNo errors.... loading drirepz.pkhNo errors.... loading driths.pkhNo errors.... loading drithsc.pkhNo errors.... loading drithsd.pkhNo errors.... loading drithsl.pkhNo errors.... loading drithsx.pkhNo errors.... loading drival.pkhNo errors.... loading driexp.pkhNo errors.... loading driimp.pkhNo errors.... loading driparse.pkhNo errors.... loading drixtab.pkhNo errors.... loading drixtabc.pkhNo errors.... loading drixtabr.pkhNo errors.... loading drixtabx.pkhNo errors.Install ConText public API specs... loading dr0adm.pkhNo errors.... loading dr0ddl.pkhNo errors.... loading dr0doc.pkhNo errors.... loading dr0out.pkhNo errors.... loading dr0query.pkhNo errors.... loading dr0thes.pkhNo errors.... loading dr0repor.pkhNo errors.... loading dr0ulex.pkhNo errors.... loading dr0cls.pkhNo errors.... loading package bodies================== Package Installation ==========================Install DR Internal package bodies... loading driacc.plbNo errors.... loading driadm.plbNo errors.... loading dricon.plbNo errors.... loading dridisp.plbNo errors.... loading dridml.plbNo errors.... loading dridoc.plbNo errors.... loading drierr.plbNo errors.... loading driddl.plbNo errors.... loading driddlp.plbNo errors.... loading driddlc.plbNo errors.... loading driddlr.plbNo errors.... loading driddlx.plbNo errors.... loading drilist.plbNo errors.... loading driload.plbNo errors.... loading dripipe.plbNo errors.... loading driopt.plbNo errors.... loading dripref.plbNo errors.... loading drirec.plbNo errors.... loading drirep.plbNo errors.... loading drirepm.plbNo errors.... loading drireps.plbNo errors.... loading drirept.plbNo errors.... loading drirepz.plbNo errors.... loading driths.plbNo errors.... loading drithsc.plbNo errors.... loading drithsd.plbNo errors.... loading drithsl.plbNo errors.... loading drithsx.plbNo errors.... loading driutl.plbNo errors.... loading drival.plbNo errors.... loading driexp.plbNo errors.... loading driimp.plbNo errors.... loading driparse.plbNo errors.... loading drixtab.plbNo errors.... loading drixtabc.plbNo errors.... loading drixtabr.plbNo errors.... loading drixtabx.plbNo errors.... loading driproc.plbNo errors.Install ConText public API bodies... loading dr0adm.plbNo errors.... loading dr0ddl.plbNo errors.... loading dr0doc.plbNo errors.... loading dr0out.plbNo errors.... loading dr0query.plbNo errors.... loading dr0thes.plbNo errors.... loading dr0repor.plbNo errors.... loading dr0cls.plbNo errors.========================================================... creating CONTEXT interface bodyNo errors.No errors.... creating CTXCAT interface bodyNo errors.... creating CTXRULE interface bodyNo errors.... creating CTXXPATH interface bodyNo errors.... creating CONTEXT index typedrop public synonym context *ERROR at line 1:ORA-01432: public synonym to be dropped does not exist... creating CTXCAT index typedrop public synonym ctxcat *ERROR at line 1:ORA-01432: public synonym to be dropped does not exist... creating CTXRULE index typedrop public synonym ctxrule *ERROR at line 1:ORA-01432: public synonym to be dropped does not exist... creating CTXXPATH index typedrop public synonym ctxxpath *ERROR at line 1:ORA-01432: public synonym to be dropped does not exist... creating objectsRemoving old object definitions...Creating new object definitions......creating default preferencesCreate default preferencesSystem Parameters========================================================SQL> start ?/ctx/admin/defaults/drdefus.sql;Creating lexer preference...Creating wordlist preference...Creating stoplist...Creating default policy...SQL> spool offSQL> exitDisconnected from Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP and Oracle Data Mining optionsJServer Release 9.2.0.4.0 - Production

请注意如果漏掉drdefus.sql脚本,使用过程中将会出现以下类似错误:
ERROR atline 1:ORA-29855: error occurred in the execution of ODCIINDEXCREATEroutineORA-20000: interMedia Text error:DRG-10700: preference does notexist: CTXSYS.DEFAULT_LEXERORA-06512: at "CTXSYS.DRUE", line 126ORA-06512:at "CTXSYS.TEXTINDEXMETHODS", line 54ORA-06512: at line 1这样就完成了手工安装全文检索工具。
-----

程序2:

Oracle JDBC driver test


height="150"> Your
browser doesnt support Java.


Last modified: Sat Mar 6 22:19:26 MST 1999


程序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:@::
如果您想在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/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时可能已经发现,OReilly的动物园(译注:所有OReilly and Associate出版的书都以动物作封面)是一个很好的去处。如果您需要在Oracle上完成许多工作,找找黄封面的OReilly 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早期版本的名称)。您可以在Matts House 找到更多的工具以管理Oracle的存储过程、提供快速的报表功能。

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


资源链接:

file=199810090500.17129.html&mode=corp&td=01&product=00&
tm=10&fd=01&fm=08&status=Search&ty=1998&limit=100&fy=1998 class=red target=_blank>Oracle for Linux正式发布的新闻稿


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

下载Oracle 8和Oracle Application Server

Oliver Andrichs Python & Linux Page

do=listmsgs&conf=Early.Linux class=red target=_blank>Oracle on Linux -- Oracle Technet上的论坛

Blackdown.org -- Linux JDK

Pythond的Oracle模块

java/sqlj/index.html" target=_blank>Oracle SQLJ -- 在Java中嵌入SQL

OWS Killer

Matts House

bsd.org.ru/linux-oracle.HOW-TO.html" target=_blank>在FreeBSD上运行Oracle for Linux

给文章打分 5分为满分(共0人参与) 查看排行>>
频道热词:LED照明  工作站  云计算  
视觉焦点
服务器知识学堂热点
排行 文章标题
TOP10周热门服务器排行榜
  • 热门
  • 新品
  • 系列
查看完整榜单>>