仓酷云

标题: MYSQL教程之怎样在你的Linux呆板上安装运转Oracle ... [打印本页]

作者: 变相怪杰    时间: 2015-1-16 22:38
标题: MYSQL教程之怎样在你的Linux呆板上安装运转Oracle ...
如果你需要额外的功能的话,MySQL的普及性实际上可以让你发现总有一个厂商会提供准确的解决方案,而这个方案会满足你的需要和需求。oracle
怎样在你的Linux呆板上安装运转Oracle入手下手举动

在RedHat上安装Oracle能够是相称十拿九稳的,但如果完整随着Oracle公司
的文档走就一定那末简单了。最快的捷径是TomBisset的主页:
http://jordan.fortwayne.com/oracle。

假如您看了Tom的主页,那末您会注重到他漏了JDBC的安装。假如您筹办利用
JDBC(关于跨平台的Oracle使用非常便利),只需在安装屏幕请求您选择组
件(components)时,加上该选项便可。固然,您应当先装好JDK。我团体使
用Blackdown的JDK1.1.7。(译注:Redhat包含JDK)然后必要设置oracle
用户的ClassPath情况变量,最好的举措是在oracle用户目次的.bash_profile
或.profile中加上一句:
CLASSPATH=/usr/lib/jdk/lib/classes.zip;exportCLASSPATH
然后,假如您只需做WebApplet的话,在安装程序"ChooseJDBC
Components"
的时分,选择"JDK1.1JDBCThinDriver",假如您必要做完全的Java使用,
选择"JDK1.1JDBCOCIDriver"。


别的请注重:安装程序让您输出各口令时,假如口令不切合标准,不会告诫。
我第一次安装时,口令里加了".",这在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,必要
DigitalCreation(Zope使用服务器的作者)的DCOracle模块。
您只需下载软件并依照唆使照做就行。假如是DCOracle1.1.0,利用
Setup-8.0.4的设置,从ORACLE_LIBS变量中删往-lsocket,-lnsl,-lgen,
-lelf,-laio,和-lposix4便可,那些都是Solaris公用的。注重Redhat5.2和
6.0中安装的python设置不全,config目次和include目次被省略,没法编译
安装第三方的模块。您必需本人编译python大概下载一个符合的RPM。找
python的RPM,最好的去向多是OliverAndrich的Python&Linux主页。
只需rpm-e--nodepspython,然后rpm-ipython,python-dev和其他RPM
便可。
装好python后,我运转了以下的基础查询,会见Oracle。

[uche@malatestauche]$python
Python1.5.1(#1,Sep31998,22:51:17)[GCC2.7.2.3]onlinux-i386
Copyright1991-1995StichtingMathematischCentrum,Amsterdam
>>>importDCOracle
>>>#connecttoDB.scott/tigerarethetestdatabaseusername/password
>>>dbc=DCOracle.Connect("scott/tiger@sforza")#sforzaisthelocal
Oracle
server
>>>c=dbc.cursor()
>>>c.execute("SELECT*FROMempWHEREemp.deptno=10")
>>>rows=c.fetchall()
>>>printrows
[(7782,CLARK,MANAGER,7839,dbiDate(1981-06-0900:00:00),2450.0,
None,10),
(7839,KING,PRESIDENT,None,dbiDate(1981-11-1700:00:00),5000.0,
None,10),
(7934,MILLER,CLERK,7782,dbiDate(1982-01-2300:00:00),1300.0,
None,10)]


开辟事情站设置

我在数据库服务器之外的一台呆板上编译安装了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内显现测试库中的所
有雇员名。上面的程序1是挪用JDBC
的javaApplet,程序2是挪用JAVA程序的HTML超文本。假如您的JDBC已安
装乐成,将程序1拷贝为JDBCTest.java,将程序2拷贝为JDBCTest.html,
然后:

javacJDBCTest.java
appletviewerJDBCTest.html

您就能够本人看看了局怎样了:

程序1:

/*
AppletthatreadsinseveralrowsfromaremoteOracledatabase
andpresentstheminalistbox.
*/
importjava.sql.*;
importjava.awt.*;
importjava.applet.*;
importjava.lang.*;
publicclassJDBCTestextendsApplet
{
//Single-selectListBox
privateListemployee_list=newList(5,false)
publicvoidinit()
{
setLayout(newBorderLayout());
try{
//SetuptheOracleJDBCdriver
DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());
//ConnecttoanOracledatabaseonmachinesforza,usingusername
//"scott"andpassword"tiger"
ConnectionDB_conn=DriverManager.getConnection
("jdbc:oracle:thin:@sforza:1521:ORCL","scott","tiger");
//ConnectionDB_conn=DriverManager.getConnection
("jdbc:oracle:thin:scott/tiger@sforza:1521:ORCL");
//CreateaJDBCstatementobject
Statementstatement_obj=DB_conn.createStatement();
//ExecuteaquerytogettheemployeenamesfromthetestDB
ResultSetresults=statement_obj.executeQuery("selectENAMEfrom
EMP");
//Populatethelistboxwithalltheemployeenames
while(results.next()){
employee_list.add(results.getString(1));
}
}catch(SQLExceptione){
thrownewRuntimeException("SQLException"+e.getMessage());
}
add(employee_list);
}
}


程序2:


<!DOCTYPEHTMLPUBLIC"-//IETF//DTDHTML//EN">
<html>
<head><title>OracleJDBCdrivertest</title></head>
<body>
<h1>OracleJDBCdrivertest</h1>
<appletcode="JDBCTest.class"width="200",
height="150">Your
browserdoesntsupportJava.</applet>
<hr>
<address>
<ahref="mailto:uche.ogbuji@linuxworld.com"></a>
</address>
<!--Created:SatMar618:53:23MST1999-->
<!--hhmtsstart-->
Lastmodified:SatMar622:19:26MST1999
<!--hhmtsend-->
</body>
</html>

程序1的年夜部分都是与详细数据库有关的JDBC挪用,独具匠心您也能够
会见PostgresQL,次要和Oracle相
关的部分是:

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


注重OraclethinJDBCdriver中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(SystemIdentifier,体系标识符)。
假如您在安装时利用了其他的SID,
在URI里也用谁人SID。$ORACLE_HOME/network/admin/tnsnames.ora包
括了Oracle服务器的端口和SID设置。
这是TNSListener,Oracle收集毗连历程的设置文件。假如您没法经由过程
收集毗连数据库的话,起首应当反省
端标语和SID是不是准确,TNSlistner是不是一般(译注:lsnrctlstatus,
大概tnsping)。JDBC并非开辟
SQL数据库使用的独一手腕,ANSI尺度SQLJ同意在JAVA程序中间接嵌进
SQL语句。OracleforLinux8.0.5
并没有绑缚SQLJ,但能够作为另外一个自力产物取得。SQLJ是100%的
JAVA,应当在Linux上运转没有成绩,
现实上SQLJ在底层利用的就是JDBC,因而能够同任何SQL数据库互联,
其实不限于Oracle。

但愿下面的这些例子能对您的编程有所匡助。惋惜OracleforLinux
的编程文档相称的少,要不就是埋没得
非常深:)大概在数据库编程轻车熟路之前,您得先啃它一两本书。

PL/SQL

对SQL的历程性言语扩大(PL/SQL)多是Oracle最出名的特性。这类
壮大的专业数据库办理言语同意您对
声明性的SQL加逻辑把持。一样平常,PL/SQL的存储历程(storedprocedure)
用命令行的sqlplus,图形化的
Developer/2000(Linux上今朝还没有)或其他工具开辟,同意您从
Oracle浩瀚的查询接口(OracleApplicationServer,Python,Perl,
JDBC大概C)会见。

程序3:

createorreplacepackagestored_sampleas
functionget_annual_salary(emp_numberinnumber)returnnumber;
endstored_sample;
/
createorreplacepackagebodystored_sampleas
functionget_annual_salary(emp_numberinnumber)returnnumber
is
annual_salarynumber;
monthly_salarynumber;
begin
selectsalintomonthly_salaryfromempwhereempno=emp_number;
annual_salary:=monthly_salary*24;
return(annual_salary);
endget_annual_salary;
endstored_sample;
/


下面的程序3是存储历程的一个小树模,它承受一个员工号,前往该员
工的年薪。相干的函数
get_annual_salary封装在PL/SQL包sample_package中。

假如把程序3拷贝到文件sample.sql,您能够经由过程sqlplus运转它,以下
所示:

[oracle@sforzademo]$sqlplus

SQL*Plus:Release8.0.5.0.0-ProductiononSunMar713:36:32
1999

(c)Copyright1998OracleCorporation.Allrightsreserved.

Enteruser-name:scott
Enterpassword:

Connectedto:
Oracle8Release8.0.5.0.0-Production
PL/SQLRelease8.0.5.0.0-Production

SQL>@sample
Packagecreated.

Packagebodycreated.

SQL>setserveroutputon
SQL>exec
dbms_output.put_line(stored_sample.get_annual_salary(7782))
58800

PL/SQLproceduresuccessfullycompleted.

SQL>

经由过程其他的编程接口,也能够利用这个PL/SQL包。Python/DCOracle中,
拜见Connection工具的procedures成员
JDBC中,拜见java.sql.CallableStatement。

Oracle有浩瀚的内置函数。现实上,年夜多半您之前用内部代码完成的
功效都能够经由过程PL/SQL高效地完成。假如您必要甚么对照一般的功效,
请参考PL/SQL手册,看您必要的函数是不是已完成了。假如您筹办做
大批的Oracle编程的话,常常翻阅PL/SQL手册以熟习各类函数是年夜有
优点的。

办理OracleforLinux

假如您已习气运转绝对不那末庞大的数据库,那末在Oracle中完成
一些一样平常操纵,比方创建新数据库大概功能调谐会显得相称庞大。有
一些关头的设置文件必要保护,如init.ora,config.ora和
tnsnames.ora。
一样平常有好几种举措指定一些关头参数,如以后的SID。能够在上述的
文件中声明,也能够在情况变量中声明,大概是经由过程oracle工具的运
行参数。这类天真性是值得欣赏的,惋惜偶然弄清那一种设置优先也
很伤头脑。

同Linux一样,Oracle供应的平安机制假如办理不妥,就形同虚设。
花工夫熟习各类会见划定规矩和设置,和各类特别Oracle用户帐号的角
色,仍是值得的。

Oracle的功能调谐是一个十分年夜,也十分专的话题。调谐妥当,能够
很年夜水平地进步功能。Oracle运转和CPU、内存、外存的干系是相称
庞大的,这些要素必需思索。别的,PL/SQL包,存储历程,一时表空
间,表布局自己,一切这些城市跟着利用而日益庞大,包管数据库的
布局优化,没有渣滓,相对比按期从cron运转vacuum庞大很多。

OracleDBA(databaseadminstrator,数据库办理员)是电脑专业人
员中一个出名的亚文明。这其实不奇异。Oracle的壮大功效和天真性,
也同时意味着多得让人发狂的各类小奥密、小技能、小圈套,这方面
的特性它毫不比任何人少--包含Linux在内。您在制服Linux时大概
已发明,OReilly的植物园(译注:一切OReillyandAssociate
出书的书都以植物作封面)是一个很好的去向。假如您必要在Oracle
上完成很多事情,找找黄封面的OReillyOracle专辑。那边,你会
找到比Oracle拜占庭迷宫式文档好的多的信息来历。

OracleforLinuxvs.OracleforNT

NT上的Oracle(译注:Oracle在NT上的销量凌驾了SQLSERVER,是NT
第一年夜数据库)为很多办理功效供应了图形界面,相似的功效在UNIX
/Linux上只能经由过程sqlplus会见。如许的图形界面,计划得与NT把持
面板的其他部分很是类似。LinuxDBA必需熟习sqlplus。NT的成绩是,
很多办理义务请求用户在主控台(呆板屏幕前)完成,假如想远程管
理就必要高贵的第三方软件(大概OracleEnterpriseManager?)。
UNIX上的Oracle办理能够从任何经由受权的远地举行,效果同在呆板
主控台一样。

NT上的Oracle利用一个历程内的多个历程,而UNIX/Linux上的Oracle
利用多个自力的,利用互相自力的内存空间(译注:UNIX上也有多线
程的部分:MultithreadedServer,MTS,相称于前文提到的listener
的多线程版本。)NT上的完成体例制止了历程间通讯,有小小的功能
上风,但UNIX上的完成体例供应了高很多的牢靠性和数据完全性,因
为一个Oracle历程不成能净化另外一个Oracle历程的地点空间。(译注:
在NT和VMS上,创立一个新的历程比创立一个新的线程高贵很多,并且
NT的历程间切换很慢,因而微软倡议程序员只需有大概就利用多线程。
在UNIX上,创建新历程是对照高效的。而在Linux上,创建新历程和新
的内核线程,kernelthread都利用统一个基础体系挪用,效力相称高。)

在32位的硬件体系上,Linux的ext2文件体系的限定是最年夜文件为2G,
NT为4G。这其实不太影响Oracle的用户,由于表空间tablespace能够扩
展到多个文件上,但仍是有小小的效力成绩。固然,64位的Linux
(Alpha,Ultra-Sparc,PA-RISC)会打消这些限定,64位的Solaris
(Solaris7)也一样。(译注:这里实在有一些成绩,待我查明再向
列位看官交卸)。


一些好工具/停止语

Oracle同时公布了OracleApplicationServer(OAS)的Linux版本。
对OAS的深切切磋在本文局限以外,但它的确是毗连后端Oracle数据
库,创建Internet或Intranet使用的一个强无力的工具。OAS供应
JAVA开辟才能,能够将HTTP和IIOP与OCI收集接口串在一同,具有
友爱的界面以便计划WEB表单和报表,另有其他便利的工具。

Oracle云云盛行,天然也有响应的一批开源软件(OpenSource)
工具。个中的OWSkiller是一个基于JAVAServlet的能够替换OAS
的WEB接口工具,与ApacheWEB服务器、Apache的JservJAVAServelet
模块集成,供应对Oracle数据库的会见。(译注:OWS,OracleWeb
Server是OracleApplicationServer初期版本的称号)。
您能够在MattsHouse找到更多的工具以办理Oracle的存储历程、
供应疾速的报表功效。

把握Oracle可不是举手之劳的事,但也没有需要望而生畏。的确,
世上有很多更简单办理的数据库,但假如您必要初级的SQL,大概
PL/SQL的功效,大概trigger,大概各类扩大,大概先辈的买卖管
理,大概必需和Oracle体系共存,您会发明Linux是一个极佳的
Oracle平台。您已在Linux的天下中探究了如许远,必定也能应
付Oracle的应战。
(breakage  奥索)
索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。
作者: 乐观    时间: 2015-1-19 20:28
无法深入到数据库系统层面去了解和探究
作者: 莫相离    时间: 2015-1-27 19:20
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
作者: 小女巫    时间: 2015-2-5 10:39
另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);
作者: 飘灵儿    时间: 2015-2-11 09:26
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
作者: 海妖    时间: 2015-3-2 08:57
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
作者: 只想知道    时间: 2015-3-17 19:11
大侠们有推荐的书籍和学习方法写下吧。
作者: 蒙在股里    时间: 2015-3-24 21:38
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2