完美卸载oracle数据库的方法

2024-06-09

完美卸载oracle数据库的方法(精选14篇)

完美卸载oracle数据库的方法 第1篇

数据库每次只要装失败了,卸载都是非常麻烦的,经过多方面收集,现在总结oracle数据库的卸载方法。试过了,OK 。

一、Linux平台 Linux平台下卸载Oracle 非常简单,即:删除Oracle安装目录下的所有文件和文件夹即可。

二、Windows平台

其实这篇文章我主要想就在Windows平台上如何彻底的卸载Oracle进行说明。

因为Oracle在Windows下的卸载颇有一些麻烦,如果不能完全卸载有可能影响将来的再次安装!

常规卸载方法是运行Oracle的自带的卸载程序,可遗憾的是我在卸载时总不能完全卸载,当我再次安装Oracle时,就会出现莫名其妙的问题,

并且这种卸载方式比较麻烦,比较慢,下面我介绍一种比较快并且能够彻底卸载Oracle的方法。

1 .关闭oracle所有的服务。可以在windows的服务管理器中关闭;

2 .打开注册表:regedit 打开路径: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices删除该路径下的所有以oracle 开始的服

务名称,这个键是标识Oracle在windows下注册的各种服务!

3 .打开注册表,找到路径: HKEY_LOCAL_MACHINESOFTWAREORACLE 删除该oracle目录,该目录下注册着Oracle数据库的软件安装信息,

4 .删除注册的oracle事件日志,打开注册表 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication 删除注册表的

以oracle开头的所有项目。

5 .删除环境变量path中关于oracle的内容。 鼠标右键右单击“我的电脑 -->属性 -->高级 -->环境变量-->PATH 变量。 删除Oracle在该值中的内容。

注意:path中记录着一堆操作系统的目录,在windows中各个目录之间使用分号(;)隔开的,删除时注意。

建议:删除PATH环境变量中关于Oracle的值时, 将该值全部拷贝到文本编辑器中, 找到对应的Oracle的值,删除后,再拷贝修改的串,粘贴到

PATH环境变量中, 这样相对而言比较安全。

6 .重新启动操作系统。 以上1~5个步骤操作完毕后,重新启动操作系统。

7 .重启操作系统后各种Oracle相关的进程都不会加载了。这时删除Oracle_Home下的所有数据。 (Oracle_Home指Oracle程序的安装目录)

8 .删除C:Program Files下oracle目录。 (该目录视Oracle安装所在路径而定)

9 .删除开始菜单下oracle项,如: C:Documents and SettingsAll Users「开始」菜单程序Oracle - Ora10g 不同的安装这个目录稍有不同。

如果不删除开始菜单下的Oracle相关菜单目录,没关系,这个不影响再次安装Oracle.当再次安装Oracle时,该菜单会被替换。至此,Windows

平台下Oracle就彻底卸载了。

完美卸载oracle数据库的方法 第2篇

系统环境:

1、操作系统:Windows 2000 Server,机器内存128M

2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版

3、安装路径:D:ORACLE

卸载步骤:

1、开始->设置->控制面板->管理工具->服务

停止所有Oracle服务,

2、开始->程序->Oracle - OraHome81->Oracle Installation Products->Universal Installer

卸装所有Oracle产品

3、运行regedit,选择HKEY_LOCAL_MACHINE OFTWAREORACLE,按del键删除这个入口,

4、运行regedit,选择HKEY_LOCAL_MACHINE YSTEMCurrentControlSet ervices,滚动这个列表,删除所有Oracle入口

5、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标

6、重新启动计算机,重起后才能完全删除Oracle所在目录

7、删除与Oracle有关的文件,选择Oracle所在的缺省目录C:Oracle,删除这个入口目录及所有子目录,

并从Windows 2000目录(一般为C:WINNT)下删除以下文件

ORACLE.INI、oradim80.INI

完美卸载oracle数据库的方法 第3篇

在SOA(Service-oriented architecture,面向服务架构)的设计和部署中,数据库是其最重要的底层支持平台之一,目前Oracle数据库广泛应用于各类信息管理系统,成为大型SOA设计的首选。Oracle数据库是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。

当前,信息技术在生产中的应用日趋广泛,其中很多应用要处理的数据量是比较庞大的,如何处理这些海量的数据以保障系统的响应速度成为系统设计中越来越需要解决的关键问题。下面将从Oracle数据库的索引、SQL语句以及临时表这三方面叙述如何进行Oracle的优化。

2. Oracle的索引

Oracle提供大量的索引选项,使用索引的目的是为了加快查询速度、减少I/O操作和消除磁盘排序,那么在何种情况下建立索引才能发挥索引的作用呢?通常情况下建立索引的规则[2]可描述如下:

(1)表的主键和外键必须有索引;

(2)对经常与其他表进行连接的表的连接字段应该建立索引;

(3)经常出现在Where子句中的字段应该建立索引(尤其是数据量较大的表的字段);

(4)选择性高的字段应该建立索引;

索引的选择性是指索引列里不同值的数目与表中记录数的比。如果表中有1000个记录,表索引列有950个不同的值,那么这个索引的选择性就是0.95。最好的可能性选择是1.0,依据非空值列的唯一索引,通常其选择性为1.0。

(5)小字段应该建立索引,对于较长的文本字段甚至超长字段,不要建索引;

(6)复合索引的建立需要经过仔细分析,尽量考虑用单字段索引代替;

(1)正确选择复合索引中主列字段,一般是选择“选择性”较好的字段;

(2)复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段的查询是否极少甚至没有?如果以上两种情况或两者之一,则应该建立复合索引,否则考虑单字段索引;

(3)如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

(4)复合索引所包含的字段一般不要超过3个,否则需要仔细考虑其必要性;

(5)如果既有单字段索引,又有包含这几个字段的复合索引,一般可以删除复合索引;

(6)建立复合索引的特殊情况:如果表中的数据相当稳定且字段不多,可以考虑充分索引一个表,即创建一个复合索引,它包括所有在查询期间通常会被选择的列,查询所要求的所有数据可以通过索引访问提供,避免了索引扫描随后的任何表访问。

(7)频繁进行插入、删除操作的表,不要建立过多索引;

(8)删除无用索引,避免对执行计划造成负面影响;

以上是一些建立索引时较为普遍的判断依据。太多的索引与不充分、不正确的索引对性能都毫无益处,因为在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。

3. SQL语句的优化

正确地使用索引,可以理使用资源,使得数据的查询速度加快。但是,建立索引之后,并非就意味着查询时的速度得到了提高,这时还需要有良好的SQL语句进行支持,才能使得查询中利用索引从而提高查询的速度。下面将对如何在SQL语句中利用索引来提高查询速度进行一下分析。

不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。

(2)联接列

对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。比如下面的sql语句

select*from oil where oil_name||''||oil_id='胜坨shengtuo';

要查询油田为“胜坨shengtuo”的油田的数据,假设在oil_id列已经建了索引,此sql语句虽然也能实现正确的查询,但系统优化器对基于oil_id创建的索引却没有使用。如果改为以下的sql语句

select*from oil where oil_name='胜坨’and oil_id=‘shengtuo';

Oracle系统就可以采用基于oil_id创建的索引。

(3)带通配符(%)的like语句

同样以上面的例子来看这种情况。目前的需求是这样的,要求在oil表中查询名称中包含胜坨的油田。可以采用如下的查询SQL语句:

select*from employee where oil_name like'%胜坨%';

在以上sql语句中通配符(%)在搜寻词首出现,所以Oracle系统不使用oil_id的索引。不过在很多情况下可能无法避免这种情况,但是需要了解的是如此使用通配符会降低查询速度。不过当通配符出现在字符串的其它位置时,优化器就可以利用索引了,例如以下的查询就可以利用索引:

select*from employee where oil_name like'胜坨%';

(4)Order by语句

order by语句决定了Oracle如何将返回的查询结果排序。order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(像联接或者附加等)。任何在order by语句的非索引项或者有计算表达式都将降低查询速度。

仔细检查order by语句以找出非索引项或者表达式,它们会降低性能。解决这个问题的办法就是重写order by语句以使用索引,也可以为所使用的列建立另外一个索引,同时应绝对避免在order by子句中使用表达式。

在查询中,我们经常在where子句使用一些逻辑表达式,如大于、小于、等于以及不等于等等,也会用到and(与)、or(或)以及not(非)。NOT可用来对任何逻辑运算符号取反,比如

如果要使用NOT,则应在取反的短语前面加上括号,并在短语前面加上not运算符。not运算符包含在另外一个逻辑运算符中,这就是不等于(<>)运算符。也可以说,即使不在查询where子句中显式地加入not词,not仍在运算符中。

看下面两条sql语句:

select*from oil where productoil<>3000;

select*from oil where productoil<3000 or productoil>3000;

虽然这两种查询的结果一样,但是第二种查询方案会比第一种查询方案更快些。第二种查询允许Oracle对productoil列使用索引,而第一种查询则不能使用索引。

在查询中,我们也经常会用到两列进行比较的情况,最简单的方法是在where句子中使用子查询,而这种子查询一般有两种形式。

一种是利用in操作符:...where column in(select*from...where...);

另一种是使用exist操作符:...where exists(select'X'from...where...);

对于这两种格式的子查询语句,一般都会使用第一种是用in操作符的查询,因为这种语句比较容易些,也很直观,但实际上却是第二种格式的子查询效率会更高。在Oracle中可以将几乎所有的in操作符子查询改写为使用exists的子查询。

第二种格式中,子查询以‘select'X'’开始。运用exists子句不管子查询从表中抽取什么数据它只查看where子句的特点,这样优化器就不必遍历整个表而仅根据索引就可完成工作(这里假定在where语句中使用的列存在索引)。相对于IN子句来说,exists使用相连子查询,构造起来要比in子查询困难一些。

通过使用exists,Oracle系统会首先检查主查询,然后运行子查询直到找到第一个匹配项,这就节省了时间。Oracle系统在执行in子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用exists比使用in通常查询速度快的原因。

4. 临时表

目前大部分使用Oracle作为数据库的系统数据量都比较庞大,在使用时我们经常会用到有多个表关联的情况,而且这些表大部分都比较庞大,但是当进行关联的时候却发现某一个表或几个表关联之后得到的结果集很小而且查询这个结果集的速度也非常快,那么这时候我们就可以考虑在Oracle中创建“临时表”。这样在工程中多次用到这些数据时直接查询临时表的速度要快很多,而当用完之后表中的数据就没用了,而且Oracle的临时表创建之后基本不占用表空间。

与使用永久表不同,添加或者更改临时表中的数据并不会生成重做日志条目,但是,它会生成撤销日志条目。永久表与临时表之间的另一项区别是片段的分配。临时表使用临时片段,并且在表中实际插入数据之前,不会向表分配临时片段。

ORACLE数据库系统的临时表有两种,一种是事务型临时表,一种是会话型临时表。事物型临时表是当一个事务结束时清空临时表的内容;而会话型临时表就当一个会话中断或者被重新连接时数据表的内容就会清空了。ORACLE数据库在清除临时表时,只清除数据,而不清楚临时表的本身。ORACLE还提供了一种更加细分的事务型临时表。一个会话中,可能有多个事务。也就是说,ORACLE清空临时型数据表的时间更加细腻,可以根据同一个会话中的不同事务来清空临时表。另外还要说明的一点就是,ORACLE的会话型临时中的内容对于各个用户来说,内容都是独立的。具体的说,就是各个用户在会话的过程中,都可以往一张临时表中存储数据;但是用户查询临时表中的数据的时候,只能够查询到自己所创建的内容,而不能看到其他用户所增加的记录。这对于临时表的安全性来说,是非常有保障的。

当然临时表也有局限性,比如:(1)临时表只在当前连接内有效;(2)临时表不建立索引,所以如果数据量比较大或进行多次查询时,不推荐使用;(3)数据处理比较复杂的时候时较快,反之视图快点。

5. 总结

综上所述,在进行简单查询时,充分利用索引,并合理的优化SQL语句来有效的利用索引,可以减少响应时间。而在工程中利用临时表减少数据的访问量、提高数据库操作的效率,从而减少响应时间。但是以上的优化方法都是作为参考用的,优化必须随着系统应用情况的变化和数据量的变化而调整,灵活地采取优化手段才能有效地提高系统效率。

摘要:数据库应用开发工作中,所遇到的软件运行速度瓶颈通常发生在大量的查询、统计、分析等数据库操作中。因此如何处理这些海量的数据以保障系统的响应速度成为系统设计中越来越需要解决的关键问题。该文分析了Oracle数据库索引以及临时表在数据库查询中的应用,并对使用SQL语句基于索引对数据库的效率进行优化的实现方法提出了几种方法。

关键词:Oracle数据库,索引,SQL语句,临时表

参考文献

[1]张诗雨,陈汶滨.基于索引的SQL语句优化方法探讨[J].计算机与现代化,2009年第3期

[2]龚维荣,周顺平,万波.浅谈Oracle数据库基于索引的SQL语句优化方法[J].计算机工程与应用,2003年第5期.196-198

完美卸载oracle数据库的方法 第4篇

关键词:Oracle;同步策略;Redo日志

中图分类号:TP311.13文献标识码:A文章编号:1007-9599 (2010) 09-0000-01

Research on Oracle Remote Database Synchronization Method

Chen Zhibo,Tang xian

(Henan Agricultural University,Huayu College,Shangqiu476006,China)

Abstract:This article discusses the distributed environment to achieve synchronization strategy based on Oracle database,and data synchronization system needs to resolve several key issues and put forward a feasible distributed database system as data synchronization solution.

Keywords:Oracle;Synchronization strategies;Redo Log

分布式數据库在逻辑上是一个统一的整体,在物理上则是分别存储在不同的物理节点上,数据库系统间的数据有效同步成为一个必须要解决的问题。因此必须建立一套可靠的远程数据库同步方案。

一、数据库同步策略

在分布式数据库中保证数据同步的策略有两种:分布式事务和多副本数据近似一致方案。

(一)分布式事务采用两阶段提交协议或者三阶段提交协议等类似协议来保证事务的原子性。

(二)多副本间数据近似一致的方案。各数据副本的修改是异步的,也就是说各副本将不保证任何时刻数据库绝对的一致性,而保持松散一致性。

二、数据库同步系统的关键问题研究

(一)Oracle数据库日志

Oracle重做(Redo)日志记录了所有的发生在缓存中的变化,其中包括有数据、索引和回滚段的变更。只有当事务的变更记录在日志中标志为递交,才能认为事务已经完成,变更后的数据才会在后台进程的控制下写回该数据所在的数据文件中。如果用户没有递交,或是由于其它故障而导致没有递交,则对数据库的变更只会存在日志文件中而不会写入数据文件。而如果递交后在写数据文件时出错,这时由于日志文件中已经有了该事务的递交记录,数据库恢复程序会查找到对应的日志记录并在缓存中进行重做,最后再把结果写到数据文件中。

(二)LogMiner工具的使用

Oracle虽然在日志中详细记录数据操作的活动,LogMiner工具可以提取数据库日志的内容,获得对于数据库操作的DML语句,从而可以查明数据库的逻辑更改情况、检查并更正用户的误操作、执行数据更改的事后审计和执行变化分析等。

LogMiner工具的主要用途有:1.跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能。2.回退数据库的变化:回退特定的变化数据,减少point-in-time recover的执行。3.优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。

为了使LogMiner重构出的SQL语句易于识别,我们需要将Oracle数据库中的内部编号转化成相应的名称,这就需要用到数据字典,LogMiner利用DBMS_LOGMNR_D.BUILD()过程来提取数据字典信息。

三、数据同步系统的设计

在分布式环境下开发数据交换系统,面对的主要问题还是增量数据如何同步以及数据同步的效率问题。在基于Oracle数据库的环境下,增量数据同步必须解决数据库日志的解析以及增量数据在目标计算机快速入库的问题。

利用LogMiner解析oracle系统日志是实现分布式数据交换系统所要解决前提之一。对LogMiner解析出的日志进行SQL语句分析重构(针对目标数据库的快速入库接口重构)是实现分布式数据同步系统要解决的前提之二。

本文提出的数据同步系统由三大模块构成,分为目的端、数据源端和控制端。1.数据源端根据控制端的要求,操纵地方各局数据库,提供系统所需的源数据。2.目的端根据用户在控制端的设置,在规定的时间内,抽取取数据源端的数据,并进行转换入库。3.控制端操纵数据源端和目的端服务运行,并提供GUI界面供用户设置系统运行所需配置信息。

在系统运行时,控制端先通过用户设置的源数据端信息和目的端信息,连接源数据端和目的端获取数据库表信息和字段信息;用户通过展示的表信息和字段信息,配置源数据端表和目的端表的映射关系;同时指定数据库日志文件的ftp信息和数据同步时间,然后将映射关系,同步时间,ftp上传路径发送给源数据端监听端口;将同步时间发送给目的端监听端口;源数据端在固定时间间隔,启动SQLPLUS运行LOGMNR脚本,进行日志转储,然后根据用户设定的映射关系进行解析、转换、保存;在同步时间到达时,将保存的解析结果上传;服务端在指定时间获得解析结果然后执行入库。

四、结论

本文根据分布式数据库的技术特点,对Oracle远程数据库同步方法进行了研究分析,提出了在分布式环境下实现基于Oracle数据库的数据同步系统的设计方法。本文所提出的数据同步解决方案是一种比较高效的开发技术,具有一定的理论和现实意义。

参考文献:

[1]李素萍.分布式数据库的同步更新技术研究[J].中国科技信息,2008,16:94

[2]杨辛宝,刘玉.Oracle数据库重做日志文件的分析及其应用[J].信息技术,2005,4:23

完美卸载oracle数据库的方法 第5篇

2、通过控制面版-〉服务,停掉所有ORACLE服务

3、打开注册表(REGEDIT命令),删除HKEY_LOCAL_MACHINESOFTWAREORACLE

4、打开注册表中的 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices删除以ORACLE开头的所有服务

5、删除HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogApplication下以ORACLE开头的所有服务

6、关闭REGEDIT

7、打开控制面版-〉系统-〉环境变量

8、如果ORACLE安装了JRE,就删除%ORACLE_HOME%BIN和JRE路径,比如 ORACLEORA81BIN;G: Program FilesOraclejre1.1.7bin

9、删除WinntProfilesAll UsersStart MenuProgramsOracle 和WinntProfilesAll UsersStart MenuProgramsOracle

10、删除Program FilesOracle

11、重新启动机器

12、删除所有ORACLE目录(在注册表HKEY_LOCAL_MACHINESOFTWAREORACLEORACLE_HOMES下)

在 Windows 95 / Windows 98:

1. 打开注册表HKEY_LOCAL_MACHINESOFTWAREORACLE.

2.删除前面步骤中的第3步中的ORACLE

3. 删除AUTOEXEC.BAT 中的 %ORACLE_HOME%bin 和 JRE

4. 删除所有ORACLE目录

5. Program FilesOracle

6. WindowsStart MenuProgramsOracle - WindowsStartMenuProgramsOracle

如何卸载oracle 9i 第6篇

1、停止所有Oracle服务

2、删除注册表中的所有关于Oracle项

(1)在HKEY_LOCAL_MACHINESOFTWARE下,删除Oracle目录

(2)在HKEY_LOCAL_MACHINESYSTEMControlSet001Services下,删除所有Oracle项

(3)在HKEY_LOCAL_MACHINESYSTEMControlSet002Services下,删除所有Oracle项

(4)在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices下,删除所有Oracle项

(5)在HKEY_CLASSES_ROOT下,删除所有Oracle项

3、删除硬盘上所有Oracle文件

(1)Oracle安装文件

(2)系统目录下,在Program files文件夹中的Oracle文件

4、重启,完成卸载,

如何卸载oracle 9i

完美卸载oracle数据库的方法 第7篇

这篇文章主要介绍了python链接Oracle数据库的方法,实例分析了Python使用cx_Oracle模块操作Oracle数据库的相关技巧,需要的朋友可以参考下

本文实例讲述了python链接Oracle数据库的方法,分享给大家供大家参考。具体如下:

这里使用python链接Oracle数据库需要引用cx_Oracle库

#coding=UTF-8 import cx_Oracle def hello: ‘‘‘Hello cx_Oracle示例: 1)打印数据库版本信息. 2)查询表数据.‘‘‘ conn = cx_Oracle.connect(“obs61”,“obs61”,“tx8i.hp”) cur = conn.cursor() try:print “Oracle Version:%s” % conn.versionprint “Table SUB_POLICY rows:”cur.execute(‘select * from wlan_future_event‘)for row in cur: print row finally:cur.close()conn.close() hello()

完美卸载oracle数据库的方法 第8篇

关键词:数据库,Oracle,REDHAT

随着我院信息化发展的不断深入和客户端数量的持续增加,对HIS服务器处理性能、内存要求不断提高,针对这种业务要求,必须对我院现有数据库升级。我院原有数据库系统运行在“X445(32位)+Windwos 2000+4 GB内存+Oracle8i”的系统架构中,由于Oracle数据库在32位的硬件平台上有内存限制(SGA最大1.7 GB),对内存的扩展上受到限制;在Oracle 8i版本的数据库中无法实现数据库的负载均衡(RAC),但是在不断增加的业务需求方面,无法保证数据库在单台服务器上安全、稳定地运行。针对以上问题只有升级现有硬件平台和数据库版本才能解决,在升级后我院的系统架构为“X3800(64位)+RED HAT 5+16G内存+Oracle 10g”,解决了32位硬件平台下Oracle数据库对内存的限制,为后续实现RAC奠定了基础。

1 升级过程

经过前期反复测试后,决定操作系统由Windows平台迁移到RED HAT 5,数据库升级采用全库的导出、导入,实施步骤如下。

1.1 操作系统安装软件及系统参数修改

1.2 检查安装包

检查是否具备以下安装包:

另外,在REDHAT LINUX5中有类似Windows下的“软件安装、删除”菜单,可以用它来继续安装必要的软件包。

1.3 安装Oracle

(1)新增组和用户:

(2)创建Oracle的安装目录,并把权限付给oracle用户:

本次安装的目录是:Oracle自身的应用程序安装在/oracle目录下,数据库的数据文件安装在/oradata文件系统下,此文件系统建立在磁盘阵列上。所以必须将2个目录的权限都更改成oracle:oinstall。

(3)因为Oracle的官方只支持到RHEL4为止,所以要修改版本说明,编辑文件/etc/redhat-release把Red Hat Enterprise Linux Server release 5。

(Tikanga)改成版本4:redhat-4(本次安装中这么更改没有用)。

另外一个方法是:(本次安装中没有这么更改)修改安装文件

(4)编辑/etc/profile文件,设置Oracle环境变量,添加如下部分(本次安装oracle的环境变量在/home/oracle目录下的.bash_profile文件中设置):

之后,执行$unlimit验证一下。

(5)开始安装。解压缩oracle 10g安装盘,然后新建终端,在文本模式下用ROOT登陆,切换到安装目录下:

#./runInstaller-ignoresysprereqs。

1.4 升级数据库到Oracle10.2.0.4

将Oracle10.2.0.4的数据库升级包展开后执行./runInstaller,选择数据库的安装目录即可完成升级。

1.5 创建数据库

执行dbca创建数据库,参数如下:

(1)数据库名称是DBSERVER,实例名称是ORCL,和原有数据库设置相同,保持客户端连接设置不更改。

(2)SGA的大小设置为7 000 MB,PGA的大小设置为4 000 MB,PROCESS=1 000;增加内存使用,分配给Oracle数据库的内存共11 GB。

(3)数据库字符集选择ASCII7,国家字符集选择UTF-8,保持和原有数据库一致,如果不一致导入后的数据将为乱码。

(4)激活归档,归档目录为e:archive。(5)采用专用数据库模式。

(6)建立原有数据库对应的表空间。

2 数据导出导入

(1)从原有服务器上导出数据时,报错如下:

经查由于java_pool_size设置太小,将java_pool_size改成32 MB后导出成功。

(2)数据导入时报错为SYSTEM、SYSMAN等一些同义词、数据表的错误,这些错误不影响业务数据的导入,不处理这些错误。

(3)导出导入命令如下:

导出:

导入:

3 数据验证

(1)查看导出、导入生成的日志文件,对比日志中导出数据表条数是否相同,有无严重的错误。

(2)使用PB连接到数据库,查看数据的完整性。

(3)编译没有正常运行的触发器过程。

(4)客户端程序连接数据库,测试数据库连接和查询大数据速度。

4 结论

我院的数据库升级由于是从8i升级到10g,版本跨度比较大,存在着一定的风险,在升级过程中要确保原有服务器的完整性,如果升级不成功可以退回到原有的数据库中。由于医院业务的复杂性和数据库升级风险性的存在,在升级之前一定要做好测试,我院最初10g的补丁是升级到10.2.0.3,但是这个版本在我院的应用中就出现了Oracle的BUG,最后版本升级到10.2.0.4这个BUG才得以解决。

经过这次升级,我院的HIS服务器性能得到了很大的提高,由于升级后的服务器是64位硬件平台,改变了以前内存使用扩展受到Oracle数据库在32位硬件平台下的限制;服务器操作系统的由Windows 2000升级到了RED HAT 5,系统的稳定性、安全性明显提高。

参考文献

[1]夏洪斌,陈金雄,陈薇薇.“军卫一号”数据库从Oracle8.17到Oracle10G的升级实现[J].医疗卫生装备,2008,29(4):40-44.

[2]张帆,张红君,刘聪.“军卫一号”Oracle数据库升级的实现[J].解放军医院管理杂志,2007,14(7):522-523.

[3]谢育涛,张文玲.HIS系统数据库Oracle7.3到Oracle10G的升级[J].医学信息,2007,20(9):38-39.

[4]刘志敏.Oracle数据库应用管理解决方案[M].北京:电子工业出版社,2002.

完美卸载oracle数据库的方法 第9篇

摘 要:随着科技的发展和不断进步,越来越多的企业或部门都开始高度重视数据库的应用,同时应用水平的高低也决定了信息化程度的先进与否,目前无论是在市场领域还是技术水平方面来看,ORACLE都是占据主导地位的数据库,而且当今社会迫切需要能够熟练运用ORACLE的人才,因此,培养具备ORACLE高技能的人才成为数据库课程教学过程中的重中之重,本文笔者将就其课程教学所存在的不足和解决对策进行了研究。

关键词:数据库;教学方法;探讨;研究

一、ORACLE的简述

ORACLE主要分管理與开发两个方面,管理要求熟练掌握数据库ORACLE的使用原理,能够有一个紧密的思维和全面操控的能力,开发则是编写触发器和存储过程等,它要求较高的创造能力和逻辑思维能力。无论是开发还是管理对于ORACLE数据库都是起着非常重要的作用,必须严格挑选能够胜任这两大方面的人才。通常,ORACLE数据库的体系结构特点主要包含归档日志、密码、参数文件,服务器、用户进程,数据库文件和实例等。

二、数据库课程教学过程存在的问题

虽然开设ORACLE数据库的相关课程能够满足社会在这方面的人才需求,但是在目前我国以往的教学过程中还存在一定的不足,有待不断的完善和改进,主要体现在以下四个方面:

其一,大多数老师都规定学生在自己日常使用的电脑上面装备ORACLE软件,但是学生的基本技能操作水平有限,有的人可能无法胜任ORACLE软件的正确安装过程,而对于这些未成功安装软件的同学,老师也只是简单劝说学生及时安装软件,却并没有对学生存在的问题进行解答,也没有为学生进行详细的软件安装讲解,最终导致学生的对其的安装不够了解,影响了学习的效果。

其二,一般大多数学生都存在懒惰的心理,一遇到问题就急着请教老师,缺乏主动思考并独立解决问题的能力,在课堂上学生也不善于总结并做笔记,每次向老师请教疑难问题老师大都会耐心的讲解,但是这样导致学生对老师的依赖性很大,自己动脑思考的时候很少。

其三,老师往往过于注重学生所做实验报告的正确性,但却忽略了对实验报告出现错误的学生的鼓励,没能借此机会帮助学生更好更牢固的掌握相关的知识点,避免下次再犯同样的错误。

其四,在学生心目中,大家都觉得ORACLE数据库课程的学习都是相对较难的,不仅内容繁杂,而且知识的理解也比较困难,所以从刚开始学习就缺乏自信心,进而导致对数据库课程的学习失去兴趣,甚至缺乏主观能动性。

二、解决ORACLE数据库课程教学的策略

(一)帮助并引导学生正确安装数据库

由于ORACLE的安装过程相对较复杂,有时候可能需要多次才能安装成功,所以对于那些安装不成功的学生就不能在业余时间使用数据库,这样就大大的削减了学生对ORACLE数据库学习的主观能动性,因此,作为专业老师应该保证每个学生的每台电脑都成功安装上了数据库,学校要能够开设专业的ORACLE数据库安装课程,从而来针对安装的流程以及注意事项进行讲解,并且老师能够亲自对学生进行教导,这样既增进了师生间的感情,又令学生能在业余时不断对软件进行研究学习。

(二)增开ORACLE软件安装课程

为了能够更好的对学生进行教学,使学生能够了解到ORACLE软件的正确安装流程,那么学校一定要设置相应的ORACLE软件安装课程,这样使专业的老师能够对学生进行教导,手把手的教学生进行安装,这样能够有效的促进学生了解到正确的安装流程。并且学生若是在安装中遇到了问题,也能够及时的与老师进行探讨,从而来得到解答。同时学生自己动手安装,也能够提升学生的实践能力,培养学生的思维判断能力。

(三)重视实验报告,确保学生对知识点全面了解

正确认识批改学生实验报告的重要性,对待有错误问题出现的实验报告,老师应该进行分类总结,然后在课堂上与学生共同研究和思考出现问题的原因,并强化学生在这一方面的不足之处,帮助学生牢固掌握知识点,同时,对于学生提出的疑问,老师应该考证学生是否认真思考并从书中寻找答案,然后在学生经过深度思考和研究的前提下,帮助学生解答疑难问题,这样就会使学生对自己提出的问题记忆更深刻,提高学生自身分析和解决问题的实际能力。

结束语:

通过以上对以往的数据库ORACLE课程教学的分析和研究,在教学过程中仍然存在一定的问题和不足之处,老师应不断研究并发现教学过程中的问题及时采取相应的改进措施,同时教育部门也应给予高度的重视,争取为企业或用人部门培养出适合其快速发展的高技能人才,也为学生自身带来更大的价值,增加就业率,只要大家共同努力,相信不久的将来我国定能在计算机领域达到一个全新的境界。

参考文献:

[1] 姚金涛,孔宇彦,李强,祝胜林.高校“Oracle数据库应用”课程教学方式的研究[J]. 中国电力教育.,2010 (04):11-12.

[2] 方巍,文学志.特色大学计算机专业Oracle课程教学探索与实践[J]. 中国电力教育,2011 (10):24-26.

完美卸载oracle数据库的方法 第10篇

很多朋友只用了oracle的删除,但很多情况下,他会发现重新安装时,点了下一步安装界面就消失了,往往无奈下只好重装系统,其实只是你数据库没删干净,删干净就不会出现这种情况了。

实现方法:

1、开始->设置->控制面板->管理工具->服务

停止所有Oracle服务。

2、开始->程序->Oracle - OraHome81->Oracle Installation Products->

Universal Installer

卸装所有Oracle产品,但Universal Installer本身不能被删除

5、运行regedit,选择HKEY_LOCAL_MACHINESOFTWAREORACLE,按del键删除这个入口。

6、运行regedit,选择HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices,滚动

这个列表,删除所有Oracle入口。

7、运行refedit,

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication,

删除所有Oracle入口,

8、开始->设置->控制面板->系统->高级->环境变量

删除环境变量CLASSPATH和PATH中有关Oracle的设定

9、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标

10、删除Program FilesOracle目录

11、重新启动计算机,重起后才能完全删除Oracle所在目录

12、删除与Oracle有关的文件,选择Oracle所在的缺省目录C:Oracle,删除这个入

口目录及所有子目录,并从Windows2000目录(一般为C:WINNT)下删除以下文

件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。

13、WIN.INI文件中若有[ORACLE]的标记段,删除该段

14、如有必要,删除所有Oracle相关的ODBC的DSN

15、到事件查看器中,删除Oracle相关的日志

说明:

如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装。安装时,选择一个新的目录,则,安装完毕并重新启动后,老的目录及文件就可以删除掉了

(责任编辑:铭铭 mingming_ky@126.com TEL:(010)68476636)

完美卸载oracle数据库的方法 第11篇

作者:Sephiroth 字体:[增加 减小] 类型:转载

import cx_Oracle dns_tns=cx_Oracle.makedsn(”192.168.0.288“,1521,”skynet“) print dns_tns con = cx_Oracle.connect(‘alibaba‘, ‘zhimakamen‘, dns_tns) cur=con.cursor() for index,line in enumerate(file(”f2.csv“)): sql=”“”insert into iq_data_B011F8286A1B2000A (field1,field2,field3,field4) values (“”“ for fields in (line.split(”,“)): sql=sql+”‘“+fields+”‘,“ cur.execute(sql[:-1]+”)") con.commit() con.close()

希望本文所述对大家的Python程序设计有所帮助,

完美卸载oracle数据库的方法 第12篇

Oracle是当今世界最强大、使用最广泛的数据库软件,11g和12c是目前的主流产品。从安全性考虑,一般采用Oralce作服务器或后台数据库,前台可以使用Visual Studio2010软件基于Visual C#使用ADO.NET技术进行数据库连接。

VisualStudio 2010是微软公司开发的,它是目前较流行的软件开发环境,Visual C#2010是其中的一个组成部分,Visual C#2010是C#编程集成开发环境(IDE),它支持基于网络应用的开发。

2 数据库访问技术

数据库访问技术是为了解决应用程序和数据库管理系统(DBMS)之间的数据通信问题。随着软件的进步和数据库技术的迅速发展,数据库访问技术主要经历了ODBC、DAO、RDO、OLE DB、ADO和ADO.NET几个阶段。

2.1 ODBC技术

ODBC (Open DataBase Connectivity),译为开放数据库互连,是第一个使用SQL访问不同关系数据库的数据访问技术。ODBC提供了一组对数据库访问的标准API (应用程序编程接口),几乎所有关系数据库都提供了ODBC驱动程序,可见ODBC的应用非常广泛。虽然ODBC可以访问所有关系数据库,但不能访问对象数据库及其他非关系数据库。此外,ODBC在使用时需要向系统进行数据源注册,增加了配置难度。

2.2 OLE DB技术

OLE DB是基于COM (Component Object Model)接口,可以实现应用程序和数据源之间的无缝连接。OLE DB为关系数据库和非关系数据库都提供了统一的接口,因此,它对数据库的支持相比ODBC来说具有更广泛性。

与ODBC一样,OLE DB也是底层控制接口。利用OLE DB设计数据库时,应用程序需要编写大量代码,因此难度较大。

2.3 ADO技术

ADO是基于OLE DB的访问接口,继承了OLE DB的优点,同时又对OLE DB的接口进行了封装,具有易于使用、访问效率高、功能强大的特点。与OLE DB不同,ADO属于数据库访问的高层接口。

2.4 ADO.NET技术

ADO.NET是基于.NET框架结构、面向分布式和以XML数据格式为核心的数据访问技术,利用它可以访问各类关系数据库和其他OLE DB或ODBC提供程序的数据源。

ADO是OLE DB的改进,而ADO.NET的数据访问方式与ADO完全不同。ADO.NET使用了一种基于XML的暂留和传输格式,因此,具有跨平台性和良好的交互性。

通过上面对ODBC、OLE DB、ADO和ADO.NET访问技术的介绍,比较其特点得到表1。

3 访问Oralce数据库的方法

在Visual C#2010环境中,可以使用多种方法访问Oracle11g,下面用实例(要求显示Oracle系统中orcl数据库订单表orders的内容)来阐述。

3.1 通过OLE DB.NET Framework数据提供程序来访问

(1)创建窗口应用程序,在Form中添加buttonl和dataGridViewl控件。

(2)使用System.Data.OleDb命名空间,给出数据源orcl,用户名为system,密码为orcl,主要代码如下:

3.2 通过Oracle.Net Framework提供程序来访问

该种方法要求只有在系统上安装Oracle客户端软件,才能连接Oracle数据源。Oracle.Net Framework提供程序类处在System.Data.OracleClient命名空间的System.Data.Oracleclient.dll程序集中。部分代码如下:

3.3 使用Oracle公司面向.NET的ODP.NET来访问

ODP.NET (Oracle Data Provider For.NET),该方法需要安装ODP.NET或者ODCA (Oracle Data Access Components),为了便于在Visual Studio 2010中开发Oracle应用程序,一般安装ODCA中的ODT.NET。

本例中数据库管理系统为Oracle11g,因而与之对应的ODCA为ODTwithODAC1110621,并且在程序中要引用Oracle.DataAccess.client,主要代码如下:

4 结语

本文主要探讨了在Visual C#2010环境中如何访问Oracle数据库,为了开发基于Oracle的应用程序,还可以选用Java开发环境。在开发过程中,可以采用本文介绍的几种数据库访问方法,若对速度要求特别高,就要尽量选择Oracle提供的专门的开发工具。

摘要:首先介绍了当今广泛使用的几种数据库访问技术,并进行了比较。最后,通过具体实例阐述了Vi sual C社环境下访问Oracle数据库的三种方法,并给出了相关代码。

关键词:数据库访问技术,Visual C#,Oracle,数据库

参考文献

[1]龚根华,王炜立.ADO.NET数据访问技术[M].北京:清华大学出版社,2012.

完美卸载oracle数据库的方法 第13篇

关键词: 日志 内存命中率 等待事件 实例活动

中图分类号: TP39 文献标识码: A文章编号: 1007-3973 (2010) 04-061-02

随着数据库系统的普遍使用,一方面,各类型企业海量数据信息的存储变得不再困难,越来越多的企业以数据为核心开展自身业务;另一方面,随着数据库系统的长期、深入使用,数据量日积月累的海量增加,数据库逐渐成为企业系统性能性能问题的高发区。

解决数据库的性能问题,提高系统运行速度逐渐成为各DBA的主要任务之一。数据库性能问题调整工作贯穿于整个数据库生存周期,从数据库的设计,实施开始,一直到结束使用。但由于数据库性能问题的时效性、隐蔽性以及突然性等特性使问题的定位变得异常困难。本文结合了一些常见的性能分析手段,枚举了性能问题的定位方法,希望能抛砖引玉使数据库的性能问题定位更规范化、流程化。

1 日志监控

由于性能问题常常会伴随着一些系统异常,或者是一些异常发生的先兆,所以监控数据库系统日志是定位性能故障的一个基本点。

1.1 库警告日志监控

Oracle在运行过程中,会在BDUMP路径下的警告日志文件中记录数据库的一些运行情况,包括系统启动参数、日志切换情况、数据库异常等。大部分性能问题发生的同时都会伴随着一些异常信息如:死锁、回滚段溢出、临时表空间满等。

1.2监听警告日志监控

监听日志记录数据库的每个连接(无论是正常的还是非法的)的链接情况,查看该日志可以获取数据库链接情况,当出现链接相关的性能问题,如:PGA耗尽或达到UNIX最大链接数等就应该查询该文件。

2 OS系统性能监控

由于OS是数据库系统运行的基础,也是数据库系统的载体,所以数据库性能问题一般反映到OS系统上就是CPU、内存、I/O资源的消耗殆尽。所以OS层出现资源短缺的时候,亦是数据出现资源短缺的时候。

2.1 TOP命令监控内存/进程/CPU

top命令用来显示执行中的程序进程和其他状况,使用权限是所有用户;top命令提供了实时的对系统处理器的状态监视,通过该命令可以查看数据库进程对CPU、内存等资源的占用情况,并从OS进程PID查找出故障SQL。

2.2VMSTAT监控内存情况

vmstat 命令报告关于内核线程的统计信息,包括处于运行和等待队列中的、内存中的、页面调度中的、磁盘中的、中断、系统调用、上下文切换和CPU活动的内核线程。该命令可以确定系统内存的整体消耗情况。

2.3IOSTAT监控I/O情况

iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。该命令可以查看系统的整体I/O消耗状态。

3 等待事件监控

在任何一个时间点,每个Oracle进程都正在忙于服务一个请求或者等待某些事件的发生。Oracle的等待事件是衡量Oracle运行状况的重要依据及指标,分为:空闲事件――Oracle正等待某种工作,非空闲等待事件――专门针对Oracle的活动,指数据库任务或应用运行过程中发生的等待

3.1 系统等待事件

通过v$system_event视图,查询从实例启动后各个等待事件的概括。根据系统等待信息的历史影象,并通过两个snapshot获取等待项增量,可以确定这段时间内系统的总体等待信息。从数据库系统级别判断存在等待的资源瓶颈。

3.2会话等待事件

V$session_wait提供了任何情况下session在数据库中当前正在等待什么(如果session当前什么也没在做,则显示它最后的等待事件)。当系统存在性能问题时,可使用该视图进一步定位引起等待事件的会话等信息。

4 内存命中率监控

监控内存命中率,可以有效地定位由内存参数分配与实际数据库运行状态不匹配等,由数据库内存引起的性能问题故障。

4.1 字典缓存命中率

数据字典缓存区是存储在共享池中的,它缓存了最近访问的数据字典信息。在内存中缓存这些信息将大大减少了时间和解析SQL语句所必须的I/O。字典缓冲区的命中率≥95%认为是理想的。

4.2 库缓存命中率

库高速缓存区是系统全局区(SGA)中的一块区域。Oracle 对最近执行的SQL语句执行计划和解析树进行缓存,也包括了PL/SQL代码的缓存备份。库高速缓存区的命中率表明了代码重用的频繁程度。通常来说,命中率接近100%是理想值。

4.3 数据库高速缓存区命中率

数据库高速缓存区,以下称为高速缓存区,它存放着内存中最近被访问的数据块。通过查看高速缓存器的命中率,DBA可以判断出数据库高速缓存器的规模是否合理。如果命中率≥90%,可以认为参数设置是合理的,否则说明缓存中的很多数据无法满足数据库访问的需要,增加了系统I/O操作的次数。

4.4 闩命中率

获得Latch的次数与请求Latch的次数的比率。该指标的值应接近100%,如果低于99%,可以考虑采取一定的方法来降低对Latch的争用。

4.5 内存排序命中率

指排序操作在内存中进行的比率。当查询需要排序的时候,数据库会话首先选择在内存中进行排序,当内存大小不足的时候,将使用临时表空间进行磁盘排序,但磁盘排序效率和内存排序效率相差好几个数量级。该指标的值应接近100%,如果指标的值较低,则表示出现了大量排序时的磁盘I/O操作。

5 实例活动情况监控

针对性能问题期间,对实例的各个内部模块的活动和各种资源使用情况的统计,主要包括CPU使用情况,SQL*Net消息,链接的行存取和PGA使用情况等,从数据库的实际活动情况可以分析出数据库系统的负载情况,主要活动内容等。

5.1 系统活动情况

v$sysstat视图可用于监控系统资源使用情况,以及系统资源利用率的变化。正因如此多的性能数据,检查某区间内系统资源使用情况可以这样做,在一个时间段开始时创建一个视图数据快照,结束时再创建一个,二者之间各统计项值的不同 (end value - begin value) 即是这一时间段内的系统资源消耗情况。

5.2 会话活动情况

v$sesstat存储session从login到logout的详细资源使用统计。类似于v$sysstat可从该视图查询出每一会话的资源消耗情况。

6STATPACK/AWR检测

通过Statspack/AWR我们可以很容易的确定Oracle数据库的瓶颈所在,记录数据库性能状态,也可以使远程技术支持人员迅速了解你的数据库运行状况。

7 自建JOB监控实时视图

由于会话等待事件,会话活动等均为实时视图,无历史记录,而STATPACK/AWR有时不能抓取想要的信息,此时,需要建立一套临时记录表,编写存储过程,定时记录相关的实时情况,再根据空闲时段的视图对比,获取系统的瓶颈。

8 通过自建视图对比检测

由于系统等待事件视图与系统实例活动视图等系统级视图记录的都是由系统启动以来的信息,并不能体现出增量变化情况,此时可创建临时表记录系统表信息,然后在使用当前系统表信息与之对比,以获取在故障时段的增量变化,以便从变化中定位到系统瓶颈。

9 结束语

ORACLE数据库性能问题出现机率,会随着数据库系统的使用时间与使用频率会成几何倍数上升,但性能问题一般出现都会呈现明显的时段性、随机性,这使得故障重现,或者在故障发生期间及时查找出故障问题变得难上加难。

数据库的性能问题定位是一个系统工程,涉及的方面很多。如何有效地进行定位,数据库管理员需要经过反反复复的过程,且要注重各方面的努力才会取得整体效果。这些都需要在大量的实践工作中不断地积累经验,从而更好地进行数据库的调优而解决问题的关键是找到真正的性能问题。

参考文献:

[1] 杨厚云,龚汉明,武装. Oracle数据库性能优化方案[J].机械工业学院学报,2006年12月第21卷第4期.

[2] ITPUB数据库管理版http://www.itpub.net/forum-2-1.html .

[3] 盖国强,冯春培,叶梁,等Oracle 数据库性能优化[M].人民邮电出版社,2005年1月.

完美卸载oracle数据库的方法 第14篇

结构化查询语言 (SQL) 是访问关系型数据库的通用语言, 其执行特点是非过程化, 即不用指明执行的具体方法和途径, 而是简单地调用相应语句来直接取得结果即可。SQL语言既是一种用于查询和更新的交互式数据库语言, 又是一种应用程序进行数据库访问时所采取的编程式数据库语言。

在编写访问数据库的程序时, 必须从普通的编程语言开始 (如C语言) , 再把SQL加入到程序中。所以, 嵌入式SQL语言就是将SQL语句直接嵌入到程序的源代码中, 与其他高级程序设计语言混合。专用的SQL预编译程序将嵌入的SQL语句转换为能被程序设计语言 (如C语言) 的编译器识别的函数调用。然后, 所选编程语言的编译器编译源代码为可执行程序。各个数据库厂商都采用嵌入SQL语言, 并且都符合ANSI/ISO的标准。

嵌入SQL执行的主要部分 (以静态SQL为例) :

1.1 在程序中使用include SQLCA语句定义并描述了SQLCA的结构。

SQLCA用于应用程序和数据库之间的通讯, 其中的SQL-CODE返回SQL语句执行后的结果状态。

1.2 在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义宿主变量。

宿主变量可被SQL语句引用, 也可以被编程语言语句引用, 用于将程序中的数据通过SQL语句传给数据库管理器, 或接收查询的结果。在SQL语句中, 主变量前有“:”标志以示区别。

1.3 在每次访问数据库前必须做CONNECT操作以连接到某个数据库上。

这时应该保证数据库实例已经启动。

1.4 执行数据库操作语句。

它将所需数据查出, 并将它放在宿主变量中。该语句返回一个结果或通过游标返回多个结果, 也可以包含update、ins e rt和de le te语句。

1.5 最后断开数据库的连接。

2 静态SQL和动态SQL

嵌入式SQL语句为编程提供了一定的灵活性, 使用户可以在程序运行过程中根据实际需要输入子句中某些变量的值。这些SQL语句的共同特点是, 语句中主变量的个数与数据类型在预编译时都是确定的, 只有主变量的值是程序运行过程中动态输入的, 这类嵌入式SQL语句为静态SQL语句。静态SQL在PL/SQL块中使用的SQL语句在编译时是明确的, 执行的是确定对象。静态SQL语言, 在编译时已经确定了引用的表和列。宿主变量不改变表和列信息。可以使用主变量改变查询参数值, 但是不能用主变量代替表名或列名。

动态SQL是指在PL/SQL块编译时SQL语句是不确定的, 如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理, 只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。动态SQL语言不在编译时确定SQL的表和列, 而是让程序在运行时提供, 并将SQL语句文本传给DBMS执行, 只在执行时才产生执行计划。动态SQL语句首先执行PRE-PARE语句要求DBMS分析、确认和优化语句, 并为其生成执行计划。DBMS还设置SQLCODE以表明语句中发现的错误。当程序执行完“PREPARE”语句后, 就可以用EXECUTE语句执行执行计划, 并设置SQLCODE, 以表明完成状态。

3 ORACLE中使用动态SQL的方法

在ORACLE中使用动态SQL, 共有四种方法:

3.1 使用EXECUTE IMMEDIATE命令实现

具体语法为:

EXEC SQL EXECUTE IMMEDIATE { :hos t_s tring|s tring_lite ral};

其中, host_variable和string是存放完整T-SQL语句。比如下面的程序片段用于执行用户输入的任意合法SQL命令。

EXECUTE IMMEDIATE命令的作用是:分析该语句的语法, 然后执行该语句。适合于仅执行一次的语句。

3.2 支持语句包含输入宿主变量

这种方法支持语句包含输入宿主变量。首先做PREPARE操作, 然后通过EXECUTE执行。语法为:

EXEC SQL PREPARE statement_nam e FROM{:hos t_s tring|s tring_lite ral};

该语句接收含有SQL语句的宿主变量, 并送到ORACLE, O-RACLE编译语句并生成执行计划。在语句串中包含一个“?”表明参数, 当执行语句时, ORACLE需要参数来替代这些“?”。PREPRARE执行的结果是DBMS用语句名标志准备后的语句。在执行SQL语句时, EXECUTE语句后面是这个语句名。EXECUTE语句的语法为:

EXECUTE语句名USING宿主变量|DESCRIPTOR描述符名

其作用是, 请求ORACLE执行PREPARE语句准备好的语句。当要执行的动态语句中包含一或多个参数标志时, 在EXECUTE语句必须为每一个参数提供值。这样的话, EXECUTE语句用宿主变量值逐一代替准备语句中的参数标志 (“?”或其他占位符) , 从而, 为动态执行语句提供了输入值。

使用主变量提供值, USING子句中的主变量数必须同动态语句中的参数标志数一致, 而且每一个主变量的数据类型必须同相应参数所需的数据类型相一致。各主变量也可以有一个伴随主变量的指示符变量。当处理EXECUTE语句时, 如果指示符变量包含一个负值, 就把NULL值赋予相应的参数标志。除了使用主变量为参数提供值, 也可以通过SQLDA提供值。

3.3 查询的列数或宿主变量数在预编译时已确定, 但数据库中的对象未定

此方法适用于查询的列数或输入宿主变量数在预编译时已确定, 但是数据库中的对象, 如表、列名等信息未确定的情况。这些对象名不能是宿主变量。因此, 必须通过以下语句来完成:

如下面程序用此方法完成动态查询:

3.4 查询的列数或者宿主变量的个数未确定

在预编译时, 查询的列数或者宿主变量的个数还不能确定, 因为不知道具体的返回个数, 所以不能使用输出宿主变量。这是因为还不知道应该定义多少个宿主变量。这时就需要SQLDA结构和DE-SCRIBE命令。SQLDA包含了动态查询的列描述信息。对于输入宿主变量, 也可以使用SQLDA来完成不确定的参数说明。可以通过以下语句来完成:

在上述语句中, DESCRIBE SELECT LIST的作用是将PRE-PARE后的动态查询语句的列名、数据类型、长度等信息保存在SQLDA中。DESCRIBE BIND VARIABLES检查PREPARE后的动态查询语句的每个占位符的名字、数据类型、长度等信息。并将它存放在SQLDA中, 然后, 使用SQLDA提示用户数据参数值。

3.5 ORACLE中动态SQL的混合使用方法

ORACLE中动态SQL的不同使用方法之间可以混用。如:在一个查询中, 列的个数确定, 但是查询中的占位符不确定, 这时, 可以结合方法3和方法4, 即使用方法3的FETCH语句和方法4的OPEN语句, 如:

EXEC SQL FETCH e m p_curs or INTO hos t_variable_lis t;

反之, 如果查询中占位符的个数确定, 而列数不确定, 则可以使用方法3的OPEN语句, 如:

EXEC SQL OPEN curs or_nam e[USING hos t_variable_lis t];

摘要:在以数据库为基础的应用程序开发中, 有时不得不把SQL语句直接嵌入到某种高级语言中使用, 利用高级语言的过程性结构来弥补SQL语言实现复杂应用方面的不足。动态SQL方法允许在程序运行过程中临时“组装”SQL语句, 为嵌入式SQL提供了更大的灵活性和适用性。本文以业界广为使用的ORACLE数据库为基础, 讨论了ORACLE数据库使用动态SQL的主要方法。

关键词:ORCALE,嵌入式SQL,动态SQL

参考文献

[1]《基于Oracle的高性能动态SQL程序开发》作者:冯杰.

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

【完美卸载oracle数据库的方法】相关文章:

追求完美的镜子05-09

杨帆的完美人生05-13

完美的群体范文05-25

完美的团队范文05-25

完美主义的失落06-25

作文最完美的形式05-12

活动完美收官的句子06-18

“完美”简历的九大标准06-22

完美的作文500字06-26

完美的人范文05-20

上一篇:银行现金清分流程下一篇:民生工程宣传活动