oracle的基本知识,OraclePLSQL基础知识及其相关概念
oracle的基本知识,OraclePLSQL基础知识及其相关概念详细介绍
本文目录一览: Oracle数据库基本知识
Oracle数据库基本知识
Oracle Database,又名OracleRDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。本文为大家分享的是Oracle数据库的基本知识,希望对大家有所帮助!
它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的适应高吞吐量的数据库解决方案。
介绍
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。
Oracle数据库最新版本为OracleDatabase 12c。Oracle数据库12c引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。
就业前景
从就业与择业的角度来讲,计算机相关专业的大学生从事oracle方面的技术是职业发展中的最佳选择。
其一、就业面广:ORACLE帮助拓展技术人员择业的广度,全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位,大学生在校期间兴趣广泛,每个人兴趣特长各异,不论你想进入金融行业还是电信行业或者政府机构,ORACLE都能够在你的职业发展中给你最强有力的支撑,成为你最贴身的金饭碗。
其二、技术层次深:如果期望进入IT服务或者产品公司,Oracle技术能够帮助提高就业的深度。Oracle技术已经成为全球每个IT公司必选的软件技术之一,熟练掌握Oracle技术能够为从业人员带来技术应用上的优势,同时为IT技术的深入应用起到非常关键的作用。掌握 Oracle技术,是IT从业人员了解全面信息化整体解决方案的基础。
其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。
Oracle数据库漏洞分析:无需用户名和密码进入你的数据库
一般性的数据库漏洞,都是在成功连接或登录数据库后实现入侵;本文介绍两个在2012年暴露的Oracle漏洞,通过这两种漏洞的结合,可以在不掌握用户名/密码的情况下入侵Oracle,从而完成对数据的窃取或者破坏。这两个漏洞就是CVE-2012-1675和CVE-2012-3137。
引言
国内外很多重要的系统都采用Oracle作为数据存储的数据库;在Oracle中存储着企业或政府大量敏感的信息,在金钱或政治的诱导下,内外部黑客会想法利用管理、网络、主机或数据库的自身漏洞尝试入侵到数据库中,以达到自身的目的。
本文的作者通过对Oracle俩种漏洞的组合研究,设计了一套在不掌握用户名/密码的方式入侵到Oracle中;这种方法,比传统的需要登录到数据库中的入侵方法,具有更大的安全隐患和破坏性。
本文希望通过对这两个漏洞和攻击方法的介绍,能够引起相关人员的重视,完善对数据库安全的措施。
1、概要介绍
本文提供的方法是基于漏洞CVE-2012-1675和CVE-2012-3137对oracle数据库的攻击测试的方法。
CVE-2012-1675漏洞是Oracle允许攻击者在不提供用户名/密码的'情况下,向远程“TNS Listener”组件处理的数据投毒的漏洞。攻击者可利用此漏洞将数据库服务器的合法“TNS Listener”组件中的数据转向到攻击者控制的系统,导致控制远程组件的数据库实例,造成组件和合法数据库之间的中间人攻击、会话劫持或拒绝服务攻击。
CVE-2012-3137漏洞是Oracle Database 10g/11g身份验证协议实现中存在一个设计缺陷,攻击者无需认证即可远程获取数据库用户密码哈希相关数据,从而可以离线暴力破解用户密码,进一步控制数据库系统。
我们通过如下的步骤和过程可以实现对Oracle的入侵:
(1)利用CVE-2012-1675进行TNS劫持,在监听下利用远程注册,注册同名数据库实例;
(2)新登陆的用户,在TNS的负载均衡策略下,有可能流量登录到伪造的监听服务上;
(3)该监听服务对用户的登陆过程进行监控,并将相关数据流量转发到真实的数据库上;
(4)利用CVE-2012-3137获得通讯过程中的认证相关信息;
(5)对认证相关信息进行离线的暴力破解,获得登陆的密码;
(6)试用破解的用户名/密码登陆Oracle,完成对Oracle中数据的访问;
2、通过CVE-2012-1675进行TNS劫持
该漏洞存在于Oracle的所有版本,并且Oracle至今仅是发布了警告性通知,并未提供解决方案。
要想利用CVE-2012-1675漏洞做TNS劫持,首先需要了解TNS机制。如下图所示oracle 通过在本地解析网络服务名到目标主机IP地址,服务端口号,目标数据库名,把这些信息发送到oracle服务器端监听程序,最后再由监听程序递送DBMS。
其中关键点在于监听会按照目标数据库名递送到名称正确的数据库。那么如果一个监听下有2个同名数据库。监听将自动按照负载均衡把这次访问发送到负载低的数据库上,进行连接访问。数据库注册到监听的方法就决定了,能否同时注册同名数据库在同一个监听下。注册方式分为本地注册和远程注册,通过修改参数可以调整为远程注册。
下面是一段可用的TNS劫持的过程:
1.在劫持机上创建一个和目标数据库实例同名的数据库实例。
2.在劫持机上修改 tnsnames.ora 文件
添加
listener_name=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=目标机器IP)(PORT=目标机器端口)))
3.在劫持机上用SQL*Plus 顺序执行下面步骤。
1.$ sqlplus / as sysdba
2. SQL> ALTER SYSTEM SETREMOTE_LISTENER='LISTENER_NAME';
3. SQL> ALTER SYSTEM REGISTER;
4.多个客户端,向数据库发起登录。会劫持到一部分客户端的登录信息。
最终达到效果如下图所示:
按照猜想同一个监听下有2个同名实例。客户端访问监听,监听按照客户端中的数据库名信息分配数据库,由于监听下有2个同名数据库,客户端链接很可能会被分配到劫持者的数据库实例下,再通过配置劫持者的本地监听把客户端请求指回原数据库。结构图如下:
测试客户端链接196次。目标数据库实例获得113次,劫持数据库实例获得83次基本满足负载均衡的假设。(注上面实例是local server 下面实例是 remote server)
通过以上方式我们可以截获约一半左右客户端发送到服务器的合法链接。其中获得了服务器IP、端口号、数据库位置、实例名、登录用户名等一系列明文信息和4组密文信息(AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA)。
3、通过CVE-2012-3137进行密码破解
CVE-2012-3137受影响的数据库版本有11.2.0.3,11.2.0.2,11.1.0.7,有使用了SHA-1加密算法的10.2.0.5和10.2.0.4,还有使用了SHA-1的10.2.0.3(运行在z/OS下)版本。
虽然这个漏洞在11.2.0.3中已经解决,但是仅仅数据库客户端和服务器都升级到11.2.0.3并且sqlnet.ora文件中增加SQLNET.ALLOWED_LOGON_VERSION=12才有效。
正如CVE-2012-3137所描述Oracle为了防止第三方通过网络获取登录信息包。而对密码进行了加密处理。本部分只以oracle11.1密码如何破解为例进行说明。
在发起连接之后(oracle牵手完成),客户端和服务器经过协商确定要使用的验证协议。要完成这个任务,客户端首先向数据库发送一个包。包中包含客户端主要信息和所请求的加密方式。数据库确认加密方式有效后,发送一个确认服务包如下图所示:
在通过安全网络服务完成任何所要求的协议之后,数据库用户被O3logon(oracle验证方式) 进行验证,这个协议执行一个序列来向数据库证明客户端拥有密码。为了避免网络第三方截获到密码。首先客户端发送用户名到数据库来表明用户身份。数据库端根据加密协议,其中96位的作为数据库端密钥,20位的作为偏移量,它对每个连接都是不同的。一个典型的数据库端发给客户端的密钥如下:
AUTH_SESSKEY.....COCDD89FIGODKWASDF……………………
客户端根据加密算法向服务器端发送96位的客户端密钥和64位的密码密钥。服务器端计算客户端传入的密码密钥。如果计算后密码密文和数据库中存储的16位密码密文一致则验证通过。
根据这个过程可知上面TNS劫持包中取得的加密信息:AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA这四个值是解密的关键。我们把他们按照SHA1,MD5,AES192进行一系列处理。最终通过数据字典碰撞得到密码明文。
下面这段网上公布的一段示例代码,这段代码与笔者的思路不完全相同,但也能大概地说明这个漏洞的攻击过程:
import hashlib
from Crypto.Cipher import AES
def decrypt(session,salt,password):
pass_hash= hashlib.sha1(password+salt)
key =pass_hash.digest() + '\x00\x00\x00\x00'
decryptor= AES.new(key,AES.MODE_CBC)
plain =decryptor.decrypt(session)
returnplain
session_hex ='EA2043CB8B46E3864311C68BDC161F8CA170363C1E6F57F3EBC6435F541A8239B6DBA16EAAB5422553A7598143E78767'
salt_hex = 'A7193E546377EC56639E'
passwords = ['test','password',''oracle','demo']
for password in passwords:
session_id= decrypt(session_hex.decode('hex'),salt_hex.decode('hex'),password)
print'Decrypted session_id for password "%s" is %s' %(password,session_id.encode('hex'))
ifsession_id[40:] == '\x08\x08\x08\x08\x08\x08\x08\x08':
print'PASSWORD IS "%s"' % password
break
4、建议的预防措施
根据以上两段分析,我们可以有如下的预防措施:
(1)在条件许可的情况下,对Oracle进行补丁升级,对Oracle打cpuoct2012-1515893补丁;注意对于cpuoct2012-1515893补丁要求服务器端和应用服务器端同时升级,否则应用系统将无法访问Oracle;
(2)若无法对Oracle升级,要购买或安装具备虚拟补丁功能的数据库安全产品,防止对CVE-2012-3137和CVE-2012-1675的利用;
(3)建立足够强健的口令,不要使用8位以下密码,或者字典库中的口令。
;
Oracle认证基本知识介绍
一、 oracle,仅次于微软的世界第二大软件公司
oracle虽然规模很大,但名声不像微软、ibm那样显赫,很多非计算机专业的在校学生不知道oracle是何物。但是如果你是一位想在毕业后进入it行业的学生,那么,你必须知道什么是oracle。
首先,oracle是一家软件公司。这家1977成立于加利福尼亚的软件公司是世界上第一个推出关系型数据管理系统(rdbms)的公司。现在,他们的rdbms被广泛应用于各种操作环境:windows nt、基于unix系统的小型机、ibm大型机以及一些专用硬件操作系统平台。事实上,oracle已经成为世界上最大的rdbms供应商,并且是世界上最主要的信息处理软件供应商。现在,oracle是仅次于微软公司的世界第二大软件公司,2000年的销售额为101亿美元。现在oracle在世界范围内大约聘用了4万3千多名专业技术人员,在美国本土有2万1千名。有趣的是,即使在美国本土,oracle的技术人员(主要是程序员)中有40%是印度人,中国人是第二多的,其次才是美国人。
然后,oracle是一个庞大的品牌系统。如前所述,oracle不仅在全球最先推出了rdbms,并且事实上掌握着这个市场的大部分份额,由于oracle 公司的rdbms都以oracle为名,所以,在某种程度上oracle己经成为了rdbms的代名词。而近几年来,oracle不断积极地扩展自己的业务,成功地开发了许多横向和纵向的产品,譬如oracle自己设计生产的oracle服务器,面对商业客户的商业交易系统(oracle exchange),oracle数据中心等等。同时,oracle还成功开发出了很多面对程序员的开发工具,譬如著名的designer/2000计算机辅助系统工程(case)工具和developer/2000开发包,这些工具作为“设计器”和“开发器”,有力地帮助了程序员的开发工作,也有力地提高了oracle的声誉。此外,oracle还开发了一系列面对不同对象的应用软件,它们被统称为oracle应用软件。这些软件使得oracle被广泛应用到各个领域,同时也为oracle带来滚滚财源。比较常见的oracle软件产品包括:
·oracle财务软件(oracle financial) ·oracle制造业软件(oracle manufacturing) ·oracle人力资源软件(oracle human resources) ·oracle自动控制软件(oracle automotive) ·oracle 商业交易系统(oracle exchange)
以及其他的应用软件。这些软件连同oraclerdbms使得oracle成为一个庞大的品牌系统,深入到了人们生产和生活的各个领域。
由于oracle拥有多年在各种行业下的多种解决方案,拥有基于不同客户环境的oracle rdmbs服务器工具及规模巨大的应用软件系统,而且,这个庞大的系统正在不同程度、不同层次地为各行各业所广泛应用。因此,能够熟练掌握这个系统的某些方面及适应这个系统的不断更新的专业工程师必然是各界急需的人才,有着良好的就业前景。事实上,oracle公司也认识到了这一点,这就是oracle认证专家——ocp(oracle certified professional)的由来。 二、oracle认证种类介绍
oracle认证专家——ocp,是由oracle公司授权国际考试认证中心对考生进行的资格认证。考生按考试标准要求参加几门课程的考试(一般为3—5门),在通过全部考试后,便可获得ocp的专家认证。
目前ocp认证考试分为:
database administrator:数据库管理员考试认证,简称dba。数据库管理员负责对数据库进行日常的管理、备份及数据库崩溃后的恢复问题。
database operator:数据库操作员认证考试,简称dbo。数据库操作员主要是基于windows nt的oracle 8数据库管理,能够熟练应用oem等工具完成对数据库的操作及日常的管理工作。
database developer:数据库开发员认证考试,简称dev。数据库开发员应能熟练掌握用developer/2000的工具建立各种forms应用程序,建立各种标准的以及自定义的报表。
java developer:java开发人员考试。
application consultant: oracle产品应用咨询顾问。
其中,oracle dba是最吃香,但也是最难考的一个认证。在oracle的官方网站上,对dba有以下说明:
oracle dba专家可以跟上如今日趋复杂的系统环境要求。最好的dba们都在幕后工作,他们小心地维护着系统,使得系统可以每天都平稳地运转,并且防止意外灾难的发生,譬如数据库崩溃或者成小时地宕机。这项艰巨的任务需要对oracle数据库的结构和运行方式有着广泛泛深入的了解,并且有丰富的实战经验。最好的dba可以在取得最佳运行状态及防止他们公司停止运行的突发事件中找到平衡。oracle dba认证考试就是提供一个证明该人可以胜任oracle dba这一职务的认证。本认证考试设计了5门独立的考试,使你可以利用良好的知识获得一个专家认证。
三、如何参加考试?
ocp认证的所有考试也是通过prometric公司组织的,具体的考试事宜请访问它的官方网站:
目前ocp每门考试的费用为125美元。 四、如何准备考试?
1、oracle公司推荐的官方准备途径
一般来讲,oracle的考试内容比较多,并且考题也很细,对动手能力要求很强。因此,为了有足够的把握,一定要提前充分准备,而且一定要注重动手实践。在oracle官方网站上推荐的通过认证的途径如下,可以进行参考。
oracle大学:oracle大学提供的教师引导及基于技术的训练(instructor-led training and technology- based training)是准备ocp认证的最好方式,这些课程将为你打下需要通过ocp认证的知识基础。你可以查阅一下课程表来选择理想的准备方式,你当地的oracle大学可以在这方面给你一些最好的建议。你可以访问oracle的网站,获得更多的信息。
自己准备:实战经验是加深你对oracle考试内容理解的最好方式。oracle建议你将理论学习拓展,在实际工作或是练习中使用新学到的技巧和知识来自学。
考试内容检查表:使用考试内容检查表(test content checklist)来确定你必须准备的所有题目。oracle会不断地更新考试内容检查表,所以请访问oracle网站 ,下载最新的考试指南。
其它考试工具:模拟考试题及自我测试软件可以帮助你更好地准备ocp认证考试。oracle和自我测试软件公司(self test software)联合出品了一些高质量的考试软件以帮助考生更好地准备ocp认证考试,这些软件可以通过 oracle 网站 定购。
事实上,绝大部分的大陆同学都是通过参加培训班来准备考试的,它们不仅辅导通过考试的知识,而且其他信息包括如何报名,考场上如何应考,都可以得到辅导。以上oracle官方的介绍只是一般地对你进行一下有关备考的初级教育,事实上,正像我们前面说过的,作为一个庞大的数据库系统,要想掌握好oracle(更不要说完全掌握了——我甚至怀疑是否有人真正完全掌握过oracle),从任何角度而言都不是一件易事。除非你有足够的决心和耐心,准备将oracle当作你的职业之路并致力于数据库技术的研究,你才有可能真正了解这个庞杂系统的精髓。以下的一些论述将有助于你对oracle有一个初步的了解。 2、oracle数据库技术基本知识
(1)oracle数据库涵盖了数据库技术的方方面面。
尽管关系型数据库从原理上来讲并不是很难,有一些数据库知识的人掌握这些原理并不会花很大的气力,而且,一般的关系型数据库软件,譬如 sql server,用起来并不复杂,但oracle绝对与众不同。作为有史以来最成功的关系型数据库软件,oracle的实现方式和管理维护手段非常丰富,它涉及到很多方面的细节技术。单从任何一个侧面来理解它,是难观其全貌的。要想真的精通它,没有两三年功夫是不行的。单是oracle的技术文档,就足够淹没你的! 具体说来,oracle技术包括以下几个主要方面:oracle系统结构和原理、oracle数据库的安装和配置、oracle数据库的管理、oracle的数据备份与恢复技术、oracle的性能调整、oracle的新产品特性(java支持、应用服务器、时间空间系列、文本服务等)、oracle的并行服务器技术、oracle的数据仓库技术、oracle的对象类型和对象一关系模型等技术……
毫不夸张地说,以上任何一个部分单独拿出来都是很大的题目!
(2)oracle技术发展快,技术的关联性大。
尽管oracle只是一个数据库系统,但在实际应用中,你不可能只面对数据库本身。譬如,你在做oracle数据库的网络管理,你将不可避免地遇到如何与网络通讯、防火墙的技术兼容的问题。同理,你在做其它方面的工作,也肯定有方方面面的技术关联问题需要解决。而且更要命的是,这些技术(包括oracle本身)发展速度都非常快,这就使得跟上它们的发展成为一件十分费劲的事情。
不过幸运的是,我们并不需要同时了解oracle的所有方面,oracle提供了很多应用方向,我们可以按照偏好,选择其中的一个方向,集中时间和精力,努力在这个方向做到有所成就还不是一件很难的事情。由于oracle目前已是世界上最主要的数据库供应商和第二大软件公司,oracle的数据库技术已经被广泛应用于各个领域,因而市场上对oracle人才的需求量是相当之大,获得ocp认证不愁找不到工作。而以后我们可以在工作中学以致用,再努力地钻研oracle数据库及相关技术。
3、入门者如何起步?
说了这么多,想必您可能已经有些心动,那么,面对oracle这样一个庞然大物,你也许会觉得无从下手。为此,我们有一些建议:
(1)找一本有关数据库原理的书,掌握关系数据库的基本原理——如果你没有学过这样的课程的话。
(2)阅读参考书并结合上机操作,掌握sql的一般原理及基本用法。
(3)至少买一本oracle入门级的参考书,并找到一台安装了oracle的某个版本(oracle7.3以上,最好是 oracle 8)计算机,建立起上机学习环境。
其中第三点尤其重要,因为没有实践经验,想通过oracle认证只是痴人说梦。或者如果你的预算比较充分,你可以选择参加培训。在选择培训班的时候一定要选择oracle授权的培训班,这样培训的质量才有保证,同时,在报名考试的时候还可以享受一定的折扣。
与其他很多考试不同,ocp并没有真正意义上的参考书,你要做的就是在上机中不断熟悉oracle的各种应用,书只是用来查阅和参考的。因为从根本上来讲,oracle数据库是一门实践性很强的技术,而oracle认证主要考的是动手能力。因此,没有实践经验,而只靠背学习资料是根本无法通过oracle认证考试的。以下是市面上常见的一些书,在此列出,希望能对大家有一些帮助。
初级的:《轻松掌握sql结构化查询语言》,《轻松掌握oracle数据库开发》,《oracle开发指南》,《oracle初学者指南》,《oracle8 pl/sql程序设计》。
高级的;《oracle服务器技术精粹》,《oracle8/8i开发使用手册》,《oracle8份与恢复手册》,《oracle8性能优化与管理手册》。 五、获得ocp认证的好处
在oracle的官方同站上,oracle公司详细列举了获得ocp认证的种种好处,虽然有自卖自夸之嫌,但总的来说还是很有道理的。大家不妨跟我们一起看看。
总的来说,it业对专家的要求很高,职业竞争压力很大。无论是新进入这个行业的人,还是此行业中的老手,都需要知道他们的那些技术背景能真正吸引到雇主的眼光。同时,雇主们也需要一个标准帮助他们挑选出那些技术上真正过硬的雇员。ocp认证就能够帮助it业界建立起面向特定职位的选择标准。ocp认证是一个有价值的、业界承认的标准,这个标准可以证明持证者的知识和能力水平。
oracle认证对技术专家的好处:ocp认证可以给你一个鲜明的优势。ocp认证可以表明你对某一职位及相关的oracle产品有着深刻的理解。成为一个ocp认证专家可以帮助你被更多的雇主注意到,并且增加你获得it业最具挑战性机遇的机会。ocp认证专家们证实了ocp认证的价值:97%的 ocp认为他们获益于ocp认证;89%的ocp认为获得认证后,他们在oracle专家的职位上更具信心;96%的ocp认为他们会建议职业学校(professional college,普遍存在于美国的一种职业教育方式)开相应的课程。
oracle认证对it雇主的好处:ocp认证同时可以帮助it业的人事经理在应聘者中挑选出符合挑战性职位的员工。对于那些每年把员工送去培训的公司,认证可以保证他们在培训上的钱没有白花--他们的员工获得了对于深入理解和必要的知识。公司也可以把认证和员工的职业发展联合起来,这样可以增强员工的忠诚度及他们在职业岗位上的表现。同时,雇用获得认证的专家可以直接提高公司的实力,国际数据公司(international data corporation)的一项研究显示了这一点。这项研究指出获得认证的专家比那些没有通过认证的平均每人每天多处理40%的支持电话;雇用认证专家的公司比那些没有雇用的公司宕机的时间少49%;对大多数公司的调查显示,在不到9个月内,认证专家为他们节约的费用就超过了他们送专家去培训并获得认证的费用。
OraclePLSQL基础知识及其相关概念
结构化查询语言(Structured Query Language 简称SQL)是用来访问关系型数据库一种通用语言 属于第四代语言( GL) 其执行特点是非过程化 即不用指明执行的具体方法和途径 而是简单地调用相应语句来直接取得结果即可 显然 这种不关注任何实现细节的语言对于开发者来说有着极大的便利 然而 有些复杂的业务流程要求相应的程序来描述 这种情况下 GL就有些无能为力了 Oracle L/SQL的出现正是为了解决这一问题 Oracle PL/SQL是一种过程化语言 属于第三代语言 它与C C++ Java等语言一样关注于处理细节 可以用来实现比较复杂的业务逻辑
一 编程基础知识
程序结构
Oracle PL/SQL程序都是以块(block)为基本单位 整个Oracle PL/SQL块分三部分 声明部分(用declare开头) 执行部分(以 begin开头)和异常处理部分(以exception开头) 其中执行部分是必须的 其他两个部分可选 无论Oracle PL/SQL程序段的代码量有多大 其基本结构就是由这三部分组成
控制结构
Oracle PL/SQL程序段中有三种程序结构 条件结构 循环结构和顺序结构
) 条件结构
与其它语言完全类似 语法结构如下
if condition then
statement
else
statement
end if ;
)循环结构
这一结构与其他语言不太一样 在PL/SQL程序中有三种循环结构
a loop … end loop;
b while condition loop … end loop;
c for variable in low_bound upper_bound loop … end loop;
其中的 … 代表循环体
)顺序结构
实际就是goto的运用 不过从程序控制的角度来看 尽量少用goto可以使得程序结构更加的清晰
变量声明与赋值
Oracle PL/SQL主要用于数据库编程 所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的 大体分为数字型 布尔型 字符型和日期型 这里简单介绍两种常用数据类型 number varchar
)number 用来存储整数和浮点数 范围为1e ~ e 其使用语法为 number[(precision scale)]
其中(precision scale)是可选的 precision表示所有数字的个数 scale表示小数点右边数字的个数
)varchar 用来存储变长的字符串 其使用语法为 varchar [(size)]
其中size为可选 表示该字符串所能存储的最大长度
在Oracle PL/SQL中声明变量与其他语言不太一样 它采用从右往左的方式声明 比如声明一个number类型的变量v_id 那其形式应为 v_id nunmer;
如果给上面的v_id变量赋值 不能用 = 应该用 := 即形式为:v_id := ;
SQL基本命令
PL/SQL使用的数据库操作语言还是基于SQL的 所以熟悉SQL是进行Oracle PL/SQL编程的基础 SQL语言的分类情况大致如下
) 数据定义语言(DDL) Create Drop Grant Revoke …
) 数据操纵语言(DML) Update Insert Delete …
) 数据控制语言(DCL) Commit Rollback Savapoint …
) 其他 Alter System Connect Allocate …
具体的语法结构可以参阅其他关于SQL语言的资料 这里不再赘述
二 过程与函数
Oracle PL/SQL中的过程和函数与其他语言的过程和函数一样 都是为了执行一定的任务而组合在一起的语句 过程无返回值 函数有返回值
其语法结构为
过程 Create or replace procedure procname(参数列表) as PL/SQL语句块
函数 Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块
三 游标
游标的定义为 用游标来指代一个DML SQL操作返回的结果集 即当一个对数据库的查询操作返回一组结果集时 用游标来标注这组结果集 以后通过对游标的操作来获取结果集中的数据信息 这里特别提出游标的概念 是因为它在PL/SQL的编程中非常的重要 定义游标的语法结构如下 cursor cursor_name is SQL语句;
四 其他概念
Oracle PL/SQL中包的概念很重要 主要是对一组功能相近的过程和函数进行封装 类似于面向对象中的名字空间的概念
lishixinzhi/Article/program/Oracle/201311/18883
Oracle数据库基础知识:SELECT语句
Oracle数据库基础知识:SELECT语句
SELECT语句是指用来查询、添加、 和删除数据库中数据的语句, 和删除数据库中数据的语句 , 它们 是 SELECT 、 INSERT 、 UPDATE 、 DELETE等. 下面是Oracle数据库基础知识——SELECT语句,希望对大家有所帮助!
普通用户连接conn scott/tiger
超级管理员连接 conn “sys/sys as sysdba”
Disconnect 断开连接
把SQL存到文件 save c:\1.txt
Ed c:\1.txt编辑SQL语句
@c:\1.txt运行SQL语句
Desc emp描述EMP结构
Select * from tab 查看该用户下大所有对象
Show user显示当前用户
书写SQL语句的原则
大小写不敏感,但单引和双引内的大小写是敏感的。切记!
关键字不能缩写
可以分行书写,但关键字不能被跨行书写,单引内也不要跨行书写。
一般每个子句是一行
可以排版来增加可读性
字符串用单引
列的别名用双引
SELECT语句
1、 简单的Select语句
Select * from table 不指定查询的字段
Select attr1,attr2 from table指定查询某些字段
Select attr1,attr2 from table where attr1=xxx查询符合条件的指定字段
2、 使用算术表达式 + - / *
表达式的运算是有优先级的,和程序中的一样,先乘除后加减,括号强制优先级.
+ - * /
先乘除,后加减,括号强制优先级
Select ename,12*sal+300 from emp;
Select ename,12*(sal+300) from emp;
3、 连接运算符 ||
4、 使用字段别名 as
别名的'使用原则
1。区分同名列的名称
2。非法的表达式合法化
3。按照你的意愿显示列的名称
4。特殊的别名要双引
5。直接写列的后面
6。使用as增加可读性
5、 空值 is null
Null值不等于0,也不等于空格。
Null值是未赋值的值,不入索引。
NULL是双刃剑,使用好了提高性能,你对它不了解,往往是错误的根源,切记!
查询NULL值
因为null不等于null,所以没有行被选出。未知不等于未知,无穷不等于无穷.
6、去除重复行 distinct
SELECT 语句显示重复的行。用DISTINCT语法来去掉重复的行。
如果我们想去掉重复的行,我们需要distinct关键字。
在ORACLE数据库的10G前版本,该语句需要排序才能去掉重复的行,而在10G中数据库并不需要
排序,而是使用HASH算法来去掉重复的行,由于避免了排序,从而极大的提高了SQL语句的效率,
因为10G的SQL内核改写了。效率更加的高。因为没有排序,所以输出也是无序的。
7、查询结果排序 order by asc(desc)
Where和order by 子句
语法
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)]
[order by column|expression| alias ];
Where 一定要放在FROM 子句的后面。
显示表的部分行和部分列,使用where子句过滤出想要的行
Select deptno,ename from emp Where deptno=10;
Order by 放在最后,用来排序显示结果
不指明都是二进制排序,如果你想按照拼音,部首,笔画,法语等特殊的排序模式,请设定排序的环境
变量,关于国家语言的支持问题我们再DBA体系结构中描述。
默认是升序asc
降序要指定desc
8、比较运算符 > < (!= or <>) between and
? And运算
Select ename,deptno,sal From emp Where deptno=30 and sal>1200;
ENAME DEPTNO SAL
---------- ------ ----------
ALLEN 30 1600
WARD 30 1250
MARTIN 30 1250
BLAKE 30 2850
TURNER 30 1500
两个条件的交集,必须同时满足。
?in操作 not in
含上下界
In操作,穷举,据说穷举不能超过1000个值,我没有去验证。一般我们也不会穷举到1000个值,如
果到1000请改写你的SQL。
Select deptno,ename,sal from emp Where deptno in(10,20);
9、模糊查询 like
% 表示零或多个字符
_ 表示一个字符
对于特殊符号可使用ESCAPE 标识符来查找
Like运算
_ 通配一个,仅匹配一个字符,
% 通配没有或多个字符
10、逻辑运算符 or and not
OR运算
Select ename,deptno,sal From emp Where deptno=30 or sal>1200;
ENAME DEPTNO SAL
---------- ------ ----------
ALLEN 30 1600
WARD 30 1250
JONES 20 2975
MARTIN 30 1250
BLAKE 30 2850
CLARK 10 2450
KING 10 5000
TURNER 30 1500
JAMES 30 950
FORD 20 3000
MILLER 10 1300
两个条件的并集,满足一个就可以。
? not运算
Select ename,deptno,sal From emp Where ename not like 'T%';
ENAME DEPTNO SAL
---------- ------ ----------
SMITH 20 800
ALLEN 30 1600
新手必须了解的oracle入门知识
oracle入门知识
一个表空间只能属于一个数据库每个数据库最少有一个控制文件(建议 个 分别放在不同的磁盘上)
每个数据库最少有一个表空间(SYSTEM表空间)
建立SYSTEM表空间的目的是尽量将目的相同的表存放在一起 以提高使用效率 只应存放数据字典
每个数据库最少有两个联机日志组 每组最少一个联机日志文件
一个数据文件只能属于一个表空间一个数据文件一旦被加入到一个表空间中 就不能再从这个表空间中移走 也不能再加入到其他表空间中
建立新的表空间需要建立新的数据文件
MIT后 数据不一定立即写盘(数据文件)
一个事务即使不被提交 也会被写入到重做日志中
oracle server可以同时启动多个数据库
一套操作系统上可以安装多个版本的ORACLE数据库系统(UNIX可以 NT不可以)
lishixinzhi/Article/program/Oracle/201311/16610
Oracle数据库知识点:SQLPLUS介绍
Oracle数据库知识点:SQLPLUS介绍
SQLPLUS是ORACLE公司开发的很简洁的管理工具,SQLPLUS是最好的,最核心的ORACLE管理工具。SQLPLUS简洁而高效,舍弃浮华,反璞归真。使用sqlplus,进入sqlplus并进行简单的操作目的.是熟悉oracle的小工具sqlplus的使用。
1、如何进入SQLPLUS界面
进入DOS,然后键入如下命令
C:\>sqlplus /nolog
进入字符界面
C:\>sqlplusw /nolog
进入windows界面,windows平台特有的。
/nolog是不登录的意思。只进入SQLPLUS程序提示界面。
等待你输入命令。
2、SQLPLUS的基本操作
Sql>connect / as sysdba
连接到本地的最高帐号
Sql>help index
Enter Help <p>请指定专题slug。</p> for help.
Sql>show all
显示当前SQLPLUS的环境设置
Sql>show user
显示当前所登录的用户信息
SQL> clear screen
有的时候sqlplus会显示的有点乱,光标不在最后,请清屏.
3、一些常用命令
Spool
命令是将屏幕的显示输入到文本文件内,以便查看,有点象屏幕转存。
SPOOL C:\1.TXT
SELECT * FROM EMP;
SPOOL OFF
以上三行就将SPOOL和SPOOL OFF所夹的屏幕输出到c:\1.txt文件中。
Spool c:\1.txt append
Select * from dept;
Spool off
加APPEND命令的含义是续写c:\1.txt,如果不加,将会把原来的c:\1.txt覆盖,这是10G的新特性,
以前的数据库版本不能续写,只能指定新的文件名称。
Run
运行SQLPLUS缓冲区内的SQL语句,可以缩写为r
/
与run命令相同,运行SQLPLUS缓冲区内的SQL语句
@脚本
@%oracle_home%\rdbms\admin\utlxplan.sql
该句话的含义为运行指定的脚本。
@@为运行相对路径下的脚本,一般是在大脚本调用小脚本的时候使用。
Save
将当前SQLPLUS缓冲区内的SQL语句保存到指定的文件中
如save c:\2.txt
Get
将文件中的SQL语句调入到SQLPLUS缓冲区内。
如 get c:\2.txt
Edit
编辑当前SQLPLUS缓冲区内的SQL语句,如ed
注释
--是注释当前行
/* */是注释多行
PS:注意书写语句的时候要加上分号 ” ; ”
;
浅谈应该如何理解Oracle的架构知识
1、物理结构Oracle物理结构由控制文件、数据文件、重做日志文件、参数文件、归档文件、口令文件组成一个数据库中的数据存储在磁盘 1、物理结构Oracle物理结构由控制文件、数据文件、重做日志文件、参数文件、归档文件、口令文件组成一个数据库中的数据存储在磁盘上物理文件,被使用时,调入内存。其中控制文件、数据文件、重做日志文件、跟踪文件及警告日志(trace files,alert files)属于数据库文件;参数文件(parameter file)口令文件(password file)是非数据库文件。数据文件:存储数据的文件.数据文件典型地代表了根据他们使用的磁盘空间和数量所决定的一个Oracle数据库的容积。由于性能原因,每一种类型的数据放在相应的一个或一系列文件中,将这些文件放在不同的磁盘中。types:.data dictionary .data.redo data .index.temporary data 等等控制文件:包含维护和验证数据库完整性的必要信息、例如,控制文件用于识别数据文件和重做日志文件,一个数据库至少需要一个控制文件.控制文件内容◆数据库名◆表空间信息◆所有数据文件的名字和位置◆所有redo日志文件的名字和位置◆当前的日志序列号◆检查点信息◆关于redo日志和归档的当前状态信息控制文件的使用过程控制文件把Oracle引导到数据库文件的其它部分。启动一个实例时,Oracle 从参数文件中读取控制文件的名字和位置。安装数据库时,Oracle 打开控制文件。最终打开数据库时,Oracle 从控制文件中读取数据文件的列表并打开其中的每个文件。重做日志文件含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件.跟踪文件及警告日志(Trace Files and Alert Files)在instance 中运行的每一个后台进程都有一个跟踪文件(trace file)与之相连。Trace file 记载后台进程所遇到的重大事件的信息。警告日志( Alert Log)是一种特殊的跟踪文件,,每个数据库都有一个跟踪文件,同步记载数据库的消息和错误.参数文件:包括大量影响Oracle数据库实例功能的设定,如以下设定:◆数据库控制文件的定位◆Oracle用来缓存从磁盘上读取的数据的内存数量◆默认的优化程序的选择.
ORACLE数据库的入门知识问题。
1.远程登录oracle需要配置tnsnames.ora把其中的host改为远程登录的ip,端口不一定是默认的1521,
2.我不太明白你说的第二个问题,数据库实例用哪个pl可以看到你装的实例。
3.select * from user_tables 可以看到你以什么身份登录的下的表,如果你用自己的用户去登录,应该显示的就是你当前用户下的表,可以用sys或者system用户用此语句,这样可以看到表。
4.查看什么用户 得看你有啥权限 ,就是说你用的什么的权限问题。
1、关于配置使用PLSQL Developer的问题,只要你通过oracle的工具“Net Configuration Assistant”将所有数据库都配置了即在tnsname.ora中都有记录,PLSQL Developer就可以使用了。
2、查看服务器上有几个数据库,最直接的方法就是到“控制面板-管理工具-服务”下查看有几个“OracleService”开头的服务,就说明有几个数据库。
3、你可以直接使用PLSQL Developer连接到数据库上查看,数据库中有几个用户,每个用户下有几张表,非常方便。
4、数据库常用的命令,你到网上输入关键字,一搜一大堆。
1.本机先安装oracle client或者server,可以去www.oracle.com下载安装。
2.如果是linux、unix的系统可以在terminal下使用如下命令 ps -ef |grep ora_smon|grep -v grep
来查看出现 ora_smon_xxx 后面的xxx表示数据库的SID 如果有多个的话,那就说明服务器上运行着多个实例,如果是windows系统那就看services.msc里面以ora开头的相关服务有几个了。
3.可以使用dba_tables这个系统数据字典来查看某个用户有那些表,当然前提是当前连接的用户需要相关的权限比如 select any dictionary 权限,只要有这个权限就可以查看dba_tables
4.常用命令太多 这些你以后随着你的学习的深入再逐渐了解吧 这里就不列举了。
补1. 见1
补2.如果你已经连接到oracle服务端了的话 可以查看系统字典v$database的platform_name字段(不知道是否理解对你的问题)另外可以使用ssh工具远程连接linux服务器查看相关信息比如putty、secureCRT等工具。
补3.使用dba_users查看数据库的用户
oracle中 是什么
字符串连接,相当于 mssql中的 +
比如:
‘abc’ || 'def' 结果为:'abcdef'
相当于
‘abc’ + 'def'
连接字符串的意思
相当于“+”
字符串连接
select 'a'||'b' from dual;
输出结果:ab
连接作用。 也就是可以把两个字段百的数据或者某些字符组成我们想要的表达形式
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。
ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。
扩展资料:
Oracle数据库最新版本为Oracle Database 19c。Oracle数据库12c 引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。
此外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。