Oracle

阅读 / 问答 / 标签

oracle 中的sin函数里面的值是什么

sin 是“正弦”的英文 sine 的缩写所以读音是 [sain] 六种三角函数 sin sine [sain] 正弦 cos cosine [kou"sain] 余弦 tan (tg) tangent ["tandЗent] 正切 cot (ct) cotangent [kou"tandЗent] 余切 sec secant ["si:kant] 正割 csc cosecant [kou"si:kant] 余割

Oracle Purge和drop的区别

9i之前没有回收站这个功能,所以也没有purge这个命令,9i之后,新增加了回收站功能,drop table并不是真正的将表删除,实际上只是将表改一个名字,只有purge之后才是真正的删除表;比如drop table t1; drop table t1 purge;Oracle 10g提供的flashback drop 新特性为了加快用户错误操作的恢复,Oracle10g提供了flashback drop的功能。而在以前的版本中,除了不完全恢复,通常没有一个好的解决办法。Oracle 10g的flashback drop功能,允许你从当前数据库中恢复一个被drop了的对象,在执行drop操作时,现在Oracle不是真正删除它,而是将该对象自动将放入回收站。对于一个对象的删除,其实仅仅就是简单的重令名操作。所谓的回收站,是一个虚拟的容器,用于存放所有被删除的对象。在回收站中,被删除的对象将占用创建时的同样的空间,你甚至还可以对已经删除的表查询,也可以利用flashback功能来恢复它,这个就是flashback drop功能。回收站内的相关信息可以从recyclebin/user_recyclebin/dba_recyclebin等视图中获取,或者通过SQL*Plus的show recyclebin 命令查看。使用purge recyclebin可以清除回收站中的所有对象。类似的我们可以通过purge user_recyclebin或者是purge dba_recyclebin来清除不同的回收站对象。通过PURGE TABLESPACE TSNAME,PURGE TABLESPACE TSNAME USER USERNAME命令来选择清除回收站。

Oracle Purge和drop的区别

purge是drop的一个参数,加了以后,那么删除的这张表就完全不能恢复了。如果不加purge,那么还是可以恢复的。相当于windows的放入回收站。不加puege删除的表,可以通过show recyclebin显示出来的,加了puege就像shift+del,也就是删除了。

Oracle Purge和drop的区别

perge有清空的意思,drop是删除的意思。purge的用法主要有两种:1.用在drop的后面作为一个删除参数 2.purge recyclebin.或着purge table XXXXX至于drop可以理解成windows的系统命令删除。1。但是不加purge参数的删除,就是一个删除键,删除后oracle会把删除的表放在用户自己的recyclebin(回收站)中(理解类似与win系统的删除)。加了purge就是shift+delete,也就是完全删除。2。purge recyclebin是清空本用户回收站,purge table XXXXX则是清除回收站内的某张表(也就是说这张表已经被drop删除了(没加purge参数),这里是彻底删除它,类似win系统,删除回收站内的某个文件)。

oracle 查询主表有那些子表

这个跟sql没有太大关系,找你们的建模人员要一份模型文档就可以了

oracle数据库中 如何查询类型为number(7,2)允许为空 没有为该列赋值的数据

select owner , table_name , column_name from dba_tab_columns where DATA_TYPE="NUMBER" and nullable="Y" and DATA_DEFAULT is null and DATA_PRECISION=7 and dATA_SCALE=2 ;

Oracle ORA-01451: 要修改为 NULL 的列无法修改为 NULL,是什么原因

产生此错误的原因是Oracle中不允许将NULL字段修改为NULL字段。如果要修改可在之前判断一下,然后再修改,给出样例代码如下:declarevisnull varchar2(4);beginselect nullableinto visnullfrom user_tab_columnswhere table_name = upper("tblStockInspect")and column_name = upper("FDepartID");if visnull = "N" thenexecute immediate "alter table tblStockInspect modify FDepartID int null";end if;end;

Oracle ORA-01451: 要修改为 NULL 的列无法修改为 NULL,是什么原因?

可能是主键包含该列字段,主键不能为空,把该字段从主键移除即可

oracle中:要修改为null的列无法修改为null

id列你之前不是定义为不允许为null吗。。。

oracle怎么校验字段是否为非空约束

desc 表名

高分求:ORACLE merge语句的返回值 在线等!急

hibernate3.0以上使用merge()来合并两个session中的同一对象 a different object with the same identifier value was already associated with the session 一个经典的hibernate错误:a different object with the same identifier value was already associated with the session xxxx hibernate3.0以上使用merge()来合并两个session中的同一对象 具体到我自己的代码就是 public Object getDomain(Object obj) { getHibernateTemplate().refresh(obj); return obj; } public void deleteDomain(Object obj) { obj = getHibernateTemplate().merge(obj); getHibernateTemplate().delete(obj); }

oracle里sob是什么意思

--取两个日期间的工作天数 SELECT COUNT(*) INTO vn FROM (SELECT vod + ROWNUM - 1 RN FROM DUAL CONNECT BY ROWNUM <= vnd - vod) WHERE TO_CHAR(RN, "D") BETWEEN 2 AND 6; --返回数字 RETURN vn; --异常判断并返回-1EXCEPTION WHEN OTHERS THEN RETURN -1;END fun_get_workdays;然后select id,fun_get_workdays(begin_date date, end_date date) from table

oracle 使用shrink space会有什么问题

从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理(ASSM),就可以使用这个特性缩小段,即降低HWM。需要强调一点,10g的这个新特性,仅对ASSM表空间有效,否则会报 ORA-10635: Invalid segment or tablespace type。

oracle 不知道哪个表需要shrink怎么办

SELECT"Segment Advice------------------------------"||chr(10)||"TABLESPACE_NAME :"||TABLESPACE_NAME ||chr(10)||"SEGMENT_OWNER :"||SEGMENT_OWNER ||chr(10)||"SEGMENT_NAME :"||SEGMENT_NAME ||chr(10)||"ALLOCATED_SPACE :"||ALLOCATED_SPACE ||chr(10)||"RECLAIMABLE_SPACE:"||RECLAIMABLE_SPACE ||chr(10)||"SOLUTION 1 :"||c1 ||chr(10)||"SOLUTION 2 :"||c2 ||chr(10)||"SOLUTION 3 :"||c3 AdviceFROMtable(DBMS_SPACE.ASA_RECOMMENDATIONS("FALSE","FALSE","FALSE"));这个sql可以帮你找到需要shrink的表并提供shrink 的建议

在oracle存储过程中建立序列

好 用函数实现

如何禁用oracle database vault

  您好,我来为您解答:  检查是否启用或者禁用Oracle Database Vault  步骤1:禁用Oracle Database Vault  步骤2:执行需要的任务  步骤3:启用Oracle Database Vault  希望我的回答对你有帮助。

oracle undo表空间被删除,数据库无法启动,请问如何恢复

undo表空间使用到了100%,也不至于要删掉吧。把数据文件设置成自动扩展就是了undo表空间是循环使用的。不清楚你数据库目前的状态,版本,参数设置不好回答

Oracle数据库 ORA-01555快照过旧是怎么回事?怎么解决?

用户user1对表进行了更新操作,用户user2在user1还没有进行提交前读表中数据,而且是大批量的读取(打个比方:耗时3分钟)而在这3分钟内user1进行了提交操作,那又会产生什么影响呢?这个时候怎么保证读写一致性呢?这个时候DBMS就要保证有足够大的undo表空间来存放修改前的数值,,以保证user2读取的数据是修改前的一致数据.然后下次再读取时候就是更新后的数据了.ora-01555快照过旧就是因为undo空间不够大,其中一部分undo数据被覆盖了,用户无法获得修改前的数据。undo数据分为三种:活动的undo:未提交事务的undo数据,这些undo数据永远不能覆盖,用于回滚rollback事务。过期的undo:已提交事务的undo数据,这些undo数据可以覆盖。未过期的undo:事务已提交,但事务提交前,有些查询正在进行,它要读取的是提交前的数据,这部分数据就是未过期数据。如果这部分undo数据被覆盖了,就会发生ora-01555错误。一个解决方法是,指定undo表空间参数UNDO_TABLESPACE,并将undo空间管理方法设置成自动扩展:UNDO_MANAGEMENT=AUTO。这种方法可能产生的结果是:因为undo表空间装了太多未过期(unexpired)的undo数据,新的transaction无法向其中写入undo数据,这时transaction就会发生ORA-30036错误。

oracle undo表空间被删除,数据库无法启动,请问如何恢复

首先,undo表空间满是正常的,oracle自然会重用或者扩展它,一般不用管它。然后,现在要解决的话,需要先把undotablespace设置成手动,启动数据库,创建新的undotablespace。把新的设置成默认的。假设你的库现在是mounted状态1创建PFILE(如果已有就是更新)SQL>createpfilefromspfile;2关闭数据库SQL>shutdownimmediate3在你的$ORACLE_HOME/dbs目录下面找个叫做init<数据库>.ora的文件,把其中有undo_management=AUTO的一行改成undo_management=MANUAL如果没有就在文件末尾填一行4以sysdba身份连接数据库SQL>connect"/assysdba"用刚才改过的文件启动数据库SQL>startuppfile=<刚才的文件全路径和名字>这步是最关键的,如果成功,后面就没问题了5drop掉原来的表空间SQL>droptablespace<原来的undo表空间名字>includingcontents;6创建新的undo表空间SQL>createUNDOtablespaceundotbs2datafile"/u01/app/oracle/oradata/orcl/undotbs02.dbf"size100Mautoextendon;7关闭数据库,SQL>shutdownimmediate在开始那个init文件里设置UNDO_MANAGEMENT=AUTO和UNDO_TABLESPACE=UNDOTBS28再做一次第四步9更新spfileSQL>createspfilefrompfile;10关闭数据库,正常重新启动SQL>shutdownimmediateSQL>startup11去网上教你删undo那个地方骂它。非常想当然的做法。没有任何理由这么做12让你的工程师去学oracle培训以上步骤的中的第5步可能会出问题。我不确认。。。但是即使第5步不成功,问题应该也不大

Oracle的UNDO表空间和临时表空间

处理方法有两种,一是添加undo表空间的数据文件,二是切换undotablespace.这种情况下多用在undo表空间已经非常大的情况。1增加数据文件sql>altertablespaceundoadddatafile"d:undo02.dbf"size100mreuse;表空间已更改。2切换undo表空间1、建立新的表空间undotbs2sql>createundotablespaceundotbs2datafile"d:undo03.dbf"size100mreuse;表空间已创建。2、切换到新建的undo表空间上来,操作如下sql>altersystemsetundo_tablespace=undotbs2scope=both;系统已更改。3、将原来的undo表空间,置为脱机:sql>altertablespaceundooffline;表空间已更改。4、删除原来的undo表空间:sql>droptablespaceundoincludingcontentsanddatafilescascadeconstraints表空间已删除。如果只是droptablespaceundo,则只会在删除控制文件里的记录,并不会物理删除文件。dropundo表空间的时候必须是在未使用的情况下才能进行。如果undo表空间正在使用(例如事务失败,但是还没有恢复成功),那么drop表空间命令将失败。在drop表空间的时候可以使用includingcontents。

oracle 如何扩展undo表空间

1、添加一个新的undo表空间2、切换到新的undo表空间3、等旧undo表空间上没有事务了再删除

oracle什么决定UNDO表空间的大小

UNDO表空间用于存放UNDO数据,当执行DML操作时,oracle会将这些操作的旧数据写入到UNDO段,以保证可以回滚或者一致读等,而临时表空间主要用来做查询和存放一些缓冲区数据。你听说UNDO也是临时表可能是因为这两个表空间都不会永久保存数据的原因。-------------------------------------------------------------------------oracle undo表空间undo表空间用于存放undo数据,当执行DML操作(insert、update、delete)时,oracle会将这些操作的旧数据写入到undo段。undo数据的作用1.回退事务当执行DML操作修改数据后,旧数据被存放在undo段中。只要数据为提交、回滚段未写满或者回滚段为超时的情况下,旧数据都能被回滚回来。2.读一致性通过DML操作后的数据没有提交之前,其他用户读取的数据都是回滚段里面的旧数据。使用undo参数1.undo_management该初始化参数用于指定undo数据的管理方式。如果要使用自动管理模式,必须设置为auto,如果使用手工管理模式必须设置该参数为manual,使用自动管理模式时,oracle会使用undo表空间管理,使用手工管理模式时,oracle会使用回滚段管理undo数据。需要注意,使用自动管理模式时,如果没有配置初始化参数UNDO_TABLESPACE,oracle会自动选择第一个可用的UNDO表空间存放UNDO数据,如果没有可用的UNDO表空间,oracle会使用SYSTEM回滚段存放UNDO记录,并在ALTER文件中记载警告。2,UNDO_TABLESPACE该初始化参数用于指定例程所要使用的UNDO表空间,使用自动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间.在RAC(Real Application Cluster)结构中,因为一个UNDO表空间不能由多个例程同时使用,所有必须为每个例程配置一个独立的UNDO表空间.3,UNDO_RETENTION该初始化参数用于控制UNDO数据的最大保留时间,其默认值为900秒,从9i开始,通过配置该初始化参数,可以指定undo数据的保留时间,从而确定倒叙查询特征(Flashback Query)可以查看到的最早时间点.手工管理回滚段的规划:SQL> show parameter undo;NAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_management string AUTOundo_retention integer 900undo_tablespace string UNDOTBS1SQL> show parameter transactions;NAME TYPE VALUE------------------------------------ ----------- ------------------------------transactions integer 187 ----------系统准备支持的事务连接数量。transactions_per_rollback_segment integer 5 --------------每个回滚段支持的事务连接数量。回滚段数=187/5SQL> show parameter rollback;NAME TYPE VALUE------------------------------------ ----------- ----------fast_start_parallel_rollback string LOWrollback_segments string ----------------------设置回滚段的数量transactions_per_rollback_segment integer 5SQL>当数据库启动的时候会判断私有回滚段是否满足我们事务的要求,如果满足则打开数据库;否则数据库会去找公有回滚段。

oracle中undo表空间是用来保存什么的?

oracle会将没有commit或rollback的数据放入undo表空间updateinsertdelete 都会使用undo表空间,select 应该不会,会使用temp表空间你不是插入10万的数据了吗,在执行 commit或rollback 之前 会使用undo表空间

oracle中undo表空间是用来保存什么的?

  oracle中undo是用来存放回滚数据的。x0dx0a  撤销(Undo)数据是反转DML语句结果所需的信息。撤销数据通常被称为“回滚数据”,在过去的Oracle版本中,“回滚数据”和“撤销数据”可以交替使用,但从 9i版本开始,这两个术语有所不同:功能相同,但管理方式不同。只要某个事务修改了数据,那么更新前的原有数据就会被写入一个回滚段或撤销段。回滚段在 11g版本中依然存在,但从9i版本开始,Oracle数据库引入了可供选择的撤销段。Oracle强烈建议所有数据库都应当使用撤销段,回滚段只被保留用于向后兼容 。x0dx0a  undo表空间:x0dx0a  一个数据库可以存在多个撤销表空间,但是在任意给定时刻都只能使用一个撤销表空间。撤销表空间必须被创建为持久的、本地管理的并且能够自动扩展分配空间的表空间。x0dx0a  事务与undo段:x0dx0a  在某个事务启动时,Oracle会为其指派一个撤销段。任何一个事务都只能受一个撤销段保护,一个事务生成的撤销数据无法被分配到多个撤销段中。x0dx0a  在某个事务更新表和索引数据块时,回滚该变化所需的信息会被写入指定撤销表空间的数据块。撤销数据在提交后过期的事实意味着可以采用循环方式使用撤销段。如果使用原有的、人工管理的回滚段,那么调整的重要环节是控制具体事务分别受哪些回滚段保护。

ORACLE数据库的started 状态是什么具体情况?

started 是一般启动到nomount状态,一般出现这个,数据可能在加载数据控制文件、数据文件和日志文件出现的问题你可以尝试先关闭数据库,再次启动。如果有错误,提示如ORA-00205之类的错误,根据错误查找解决方法。

在oracle数据库插入日期时格式不对

Oracle 日期格式就是这样的

Oracle VM Virtualbox打不开开VM ware虚拟机(即vmdk文件)

1、首先双击已经安装安的Oracle VM VirtualBoxl软件,打开虚拟机管理器界面。2、然后在虚拟机管理器界面中点击【新建】按钮,打开新建对话框。3、在新建对话框中的【名称】输入框中输入要新建虚拟系统的名称,【类型】下拉列表框中选择我们虚拟系统的类型,然后点击【创建】按钮。4、创建虚拟硬盘界面【文件大小】中拖动滑块就能改变文件大小。虚拟硬盘文件类型选择VHD。单击【创建】按钮。就创建好了虚拟系统。

Oracle数据库integer类型,可以存小数么

Oracle数据库,有 integer 类型么?

mysql和oracle的区别

一、并发性并发性是oltp数据库最重要的特性,但并发涉及到资源的获取、共享与锁定。mysql:mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。oracle:oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以oracle对并发性的支持要好很多。二、一致性oracle:oracle支持serializable的隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session查询时,如果对应的数据块发生变化,oracle会在undo表空间中为这个session构造它查询时的旧的数据块。mysql:mysql没有类似oracle的构造多版本数据块的机制,只支持read commited的隔离级别。一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。session更新数据时,要加上排它锁,其他session无法访问数据。三、事务oracle很早就完全支持事务。mysql在innodb存储引擎的行级锁的情况下才支持事务。四、数据持久性oracle保证提交的数据均可恢复,因为oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,如果出现数据库或主机异常重启,重启后oracle可以考联机在线日志恢复客户提交的数据。mysql:默认提交sql语句,但如果更新过程中出现db或主机重启的问题,也许会丢失数据。五、提交方式oracle默认不自动提交,需要用户手动提交。mysql默认是自动提交。六、逻辑备份oracle逻辑备份时不锁定数据,且备份的数据是一致的。mysql逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用。七、热备份oracle有成熟的热备工具rman,热备时,不影响用户使用数据库。即使备份的数据库不一致,也可以在恢复时通过归档日志和联机重做日志进行一致的回复。mysql:myisam的引擎,用mysql自带的mysqlhostcopy热备时,需要给表加读锁,影响dml操作。innodb的引擎,它会备份innodb的表和索引,但是不会备份.frm文件。用ibbackup备份时,会有一个日志文件记录备份期间的数据变化,因此可以不用锁表,不影响其他用户使用数据库。但此工具是收费的。innobackup是结合ibbackup使用的一个脚本,他会协助对.frm文件的备份。八、sql语句的扩展和灵活性mysql对sql语句有很多非常实用而方便的扩展,比如limit功能,insert可以一次插入多行数据,select某些管理数据可以不加from。oracle在这方面感觉更加稳重传统一些。九、复制oracle:既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理较复杂。mysql:复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据。且需要手工切换丛库到主库。十、性能诊断oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等mysql的诊断调优方法较少,主要有慢查询日志。十一、权限与安全mysql的用户与主机有关,感觉没有什么意义,另外更容易被仿冒主机及ip有可乘之机。oracle的权限与安全概念比较传统,中规中矩。十二、分区表和分区索引oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。mysql的分区表还不太成熟稳定。十三、管理工具oracle有多种成熟的命令行、图形界面、web管理工具,还有很多第三方的管理工具,管理极其方便高效。mysql管理工具较少,在linux下的管理工具的安装有时要安装额外的包(phpmyadmin, etc),有一定复杂性。

oracle的oltp处理怎么做

数据库具体是OLTP还是OLAP取决于你的业务类型,具体到Oracle数据库上应该就是一些参数的不同,以及我们设计数据库结构和程序的时候采用的方法不同,所以没这么绝对得。例如我们使用dbca建立Oracle数据库时,可选的模板除了OLTP、数据仓库(OLAP),也有一个模板是一般用途,也就是兼有二者的特点。至于你的数据库有没有OLAP的技术特性,倒是可以在sqlplus登录时看到,如:]$ sqlplus / as sysdbaSQL*Plus: Release 11.1.0.6.0 - Production on Wed May 2 11:45:45 2012Copyright (c) 1982, 2007, Oracle. All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options或者执行dbca,选择修改数据库选项,也可以看到一些信息。

如何查看oracle是oltp还是olap

除了楼上说的以外,还可以在日志文件和trace文件中看到:Trace file d:myprojectoracle11gdiag dbmsorclorcl raceorcl_ora_45460.trcOracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsWindows NT Version V6.1 CPU : 2 - type 586, 2 Physical CoresProcess Affinity : 0x0x00000000Memory (Avail/Total): Ph:139M/2011M, Ph+PgF:552M/4263M, VA:1191M/2047M Instance name: orclRedo thread mounted by this instance: 1Oracle process number: 38Windows thread id: 45460, image: ORACLE.EXE (SHAD)

oracle 10g DBCA创建数据库的时候 选择一般用途 事务处理 定制数据库 数据舱 这几个之间的区别是什么

一般用途=兼顾OLTP和OLAP事务处理=OLTP数据仓库=OLAP定制数据库=自定义

oracle如何完成数据库优化

1、1、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。 2、2、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。 3、3、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。 4、4、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。 5、5、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。 6、6、调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。 实际上,上述数据库优化措施之间是相互联系的。ORACLE数据库性能恶化表现基本上都是用户响应时间比较长,需要用户长时间的等待。但性能恶化的原因却是多种多样的,有时是多个因素共同造成了性能恶化的结果,这就需要数据库管理员有比较全面的计算机知识,能够敏感地察觉到影响数据库性能的主要原因所在。另外,良好的数据库管理工具对于优化数据库性能也是很重要的。 ORACLE数据库性能优化工具 常用的数据库性能优化工具有: 1、1、ORACLE数据库在线数据字典,ORACLE在线数据字典能够反映出ORACLE动态运行情况,对于调整数据库性能是很有帮助的。 2、2、操作系统工具,例如UNIX操作系统的vmstat,iostat等命令可以查看到系统系统级内存和硬盘I/O的使用情况,这些工具对于管理员弄清出系统瓶颈出现在什么地方有时候很有用。 3、3、SQL语言跟踪工具(SQL TRACE FACILITY),SQL语言跟踪工具可以记录SQL语句的执行情况,管理员可以使用虚拟表来调整实例,使用SQL语句跟踪文件调整应用程序性能。SQL语言跟踪工具将结果输出成一个操作系统的文件,管理员可以使用TKPROF工具查看这些文件。 4、4、ORACLE Enterprise Manager(OEM),这是一个图形的用户管理界面,用户可以使用它方便地进行数据库管理而不必记住复杂的ORACLE数据库管理的命令。 5、5、EXPLAIN PLAN——SQL语言优化命令,使用这个命令可以帮助程序员写出高效的SQL语言。 ORACLE数据库的系统性能评估 信息系统的类型不同,需要关注的数据库参数也是不同的。数据库管理员需要根据自己的信息系统的类型着重考虑不同的数据库参数。 1、1、在线事务处理信息系统(OLTP),这种类型的信息系统一般需要有大量的Insert、Update操作,典型的系统包括民航机票发售系统、银行储蓄系统等。OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,这类系统使用的ORACLE数据库需要主要考虑下述参数: l l 数据库回滚段是否足够? l l 是否需要建立ORACLE数据库索引、聚集、散列? l l 系统全局区(SGA)大小是否足够? l l SQL语句是否高效? 2、2、数据仓库系统(Data Warehousing),这种信息系统的主要任务是从ORACLE的海量数据中进行查询,得到数据之间的某些规律。数据库管理员需要为这种类型的ORACLE数据库着重考虑下述参数: l l 是否采用B*-索引或者bitmap索引? l l 是否采用并行SQL查询以提高查询效率? l l 是否采用PL/SQL函数编写存储过程? l l 有必要的话,需要建立并行数据库提高数据库的查询效率 SQL语句的调整原则 SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现,但是语句的执行效率是很不相同的。程序员可以使用EXPLAIN PLAN语句来比较各种实现方案,并选出最优的实现方案。总得来讲,程序员写SQL语句需要满足考虑如下规则: 1、1、尽量使用索引。试比较下面两条SQL语句: 语句A:SELECT dname, deptno FROM dept WHERE deptno NOT IN (SELECT deptno FROM emp); 语句B:SELECT dname, deptno FROM dept WHERE NOT EXISTS (SELECT deptno FROM emp WHERE dept.deptno = emp.deptno); 这两条查询语句实现的结果是相同的,但是执行语句A的时候,ORACLE会对整个emp表进行扫描,没有使用建立在emp表上的deptno索引,执行语句B的时候,由于在子查询中使用了联合查询,ORACLE只是对emp表进行的部分数据扫描,并利用了deptno列的索引,所以语句B的效率要比语句A的效率高一些。 2、2、选择联合查询的联合次序。考虑下面的例子: SELECT stuff FROM taba a, tabb b, tabc c WHERE a.acol between :alow and :ahigh AND b.bcol between :blow and :bhigh AND c.ccol between :clow and :chigh AND a.key1 = b.key1 AMD a.key2 = c.key2; 这个SQL例子中,程序员首先需要选择要查询的主表,因为主表要进行整个表数据的扫描,所以主表应该数据量最小,所以例子中表A的acol列的范围应该比表B和表C相应列的范围小。 3、3、在子查询中慎重使用IN或者NOT IN语句,使用where (NOT) exists的效果要好的多。 4、4、慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询。一般对视图的查询最好都分解为对数据表的直接查询效果要好一些。 5、5、可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间,连续的内存空间有益于存放大的SQL程序包。 6、6、ORACLE公司提供的DBMS_SHARED_POOL程序可以帮助程序员将某些经常使用的存储过程“钉”在SQL区中而不被换出内存,程序员对于经常使用并且占用内存很多的存储过程“钉”到内存中有利于提高最终用户的响应时间。 CPU参数的调整 CPU是服务器的一项重要资源,服务器良好的工作状态是在工作高峰时CPU的使用率在90%以上。如果空闲时间CPU使用率就在90%以上,说明服务器缺乏CPU资源,如果工作高峰时CPU使用率仍然很低,说明服务器CPU资源还比较富余。 使用操作相同命令可以看到CPU的使用情况,一般UNIX操作系统的服务器,可以使用sar –u命令查看CPU的使用率,NT操作系统的服务器,可以使用NT的性能管理器来查看CPU的使用率。 数据库管理员可以通过查看v$sysstat数据字典中“CPU used by this session”统计项得知ORACLE数据库使用的CPU时间,查看“OS User level CPU time”统计项得知操作系统用户态下的CPU时间,查看“OS System call CPU time”统计项得知操作系统系统态下的CPU时间,操作系统总的CPU时间就是用户态和系统态时间之和,如果ORACLE数据库使用的CPU时间占操作系统总的CPU时间90%以上,说明服务器CPU基本上被ORACLE数据库使用着,这是合理,反之,说明服务器CPU被其它程序占用过多,ORACLE数据库无法得到更多的CPU时间。 数据库管理员还可以通过查看v$sesstat数据字典来获得当前连接ORACLE数据库各个会话占用的CPU时间,从而得知什么会话耗用服务器CPU比较多。 出现CPU资源不足的情况是很多的:SQL语句的重解析、低效率的SQL语句、锁冲突都会引起CPU资源不足。 1、数据库管理员可以执行下述语句来查看SQL语句的解析情况: SELECT * FROM V$SYSSTAT WHERE NAME IN ("parse time cpu", "parse time elapsed", "parse count (hard)"); 这里parse time cpu是系统服务时间,parse time elapsed是响应时间,用户等待时间 waite time = parse time elapsed – parse time cpu 由此可以得到用户SQL语句平均解析等待时间=waite time / parse count。这个平均等待时间应该接近于0,如果平均解析等待时间过长,数据库管理员可以通过下述语句 SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA ORDER BY PARSE_CALLS; 来发现是什么SQL语句解析效率比较低。程序员可以优化这些语句,或者增加ORACLE参数SESSION_CACHED_CURSORS的值。 2、数据库管理员还可以通过下述语句: SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM V$SQLAREA; 查看低效率的SQL语句,优化这些语句也有助于提高CPU的利用率。 3、3、数据库管理员可以通过v$system_event数据字典中的“latch free”统计项查看ORACLE数据库的冲突情况,如果没有冲突的话,latch free查询出来没有结果。如果冲突太大的话,数据库管理员可以降低spin_count参数值,来消除高的CPU使用率。 内存参数的调整 内存参数的调整主要是指ORACLE数据库的系统全局区(SGA)的调整。SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 1、 1、 共享池由两部分构成:共享SQL区和数据字典缓冲区,共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。数据库管理员通过执行下述语句: select (sum(pins - reloads)) / sum(pins) "Lib Cache" from v$librarycache; 来查看共享SQL区的使用率。这个使用率应该在90%以上,否则需要增加共享池的大小。数据库管理员还可以执行下述语句: select (sum(gets - getmisses - usage - fixed)) / sum(gets) "Row Cache" from v$rowcache; 查看数据字典缓冲区的使用率,这个使用率也应该在90%以上,否则需要增加共享池的大小。 2、 2、 数据缓冲区。数据库管理员可以通过下述语句: SELECT name, value FROM v$sysstat WHERE name IN ("db block gets", "consistent gets","physical reads"); 来查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=1 - ( physical reads / (db block gets + consistent gets) )。 这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。 3、 3、 日志缓冲区。数据库管理员可以通过执行下述语句: select name,value from v$sysstat where name in ("redo entries","redo log space requests");查看日志缓冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请失败率: 申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。

如何查看oracle是oltp还是olap

数据库具体是OLTP还是OLAP取决于你的业务类型,具体到Oracle数据库上应该就是一些参数的不同,以及我们设计数据库结构和程序的时候采用的方法不同,所以没这么绝对得。例如我们使用dbca建立Oracle数据库时,可选的模板除了OLTP、数据仓库(OLAP),也有一个模板是一般用途,也就是兼有二者的特点。至于你的数据库有没有OLAP的技术特性,倒是可以在sqlplus登录时看到,如:]$sqlplus/assysdbaSQL*Plus:Release11.1.0.6.0-ProductiononWedMay211:45:452012Copyright(c)1982,2007,Oracle.Allrightsreserved.Connectedto:OracleDatabase11gEnterpriseEditionRelease11.1.0.6.0-ProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions或者执行dbca,选择修改数据库选项,也可以看到一些信息。

oracle创建存储过程编译错误 :PLS-00103: 出现符号 "UNFOLD_OUT_NO_CUS"在需要下列之一时:

这不是存储过程吧

数据库知识:Oracle中传输表空间

  Oracle中的传输表空间功能 用来将一个实例中的表空间和数据文件移到另一个实例中 执行起来方便 快捷 但是要使用该功能有一些限制 需要两个平台一致 必须有相同的字符集和多语言字符集   要求两个实例的db block size 大小相等 如不相等则需要兼容 以上等   具体步骤如下   SQL> example表空间试验 SQL> connect sys/system as sysdba Connected to Oracle Database g Enterprise Edition Release Connected as SYS SQL> execute dbms_tts transport_set_check( EXAMPLE TRUE); PL/SQL procedure successfully pleted SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS; VIOLATIONS SQL> 如果上面的查询可以查到记录 则说明不适合表空间传输条件 需要根据实际 SQL> 情况将对象移到别的表空间; SQL> C:Documents and Settingshawk>exp userid= sys/system as sysdba transport_table space=y tablespaces=EXAMPLE file = d:a dmp ; Export: Release Production on 星期三 月 : : Copyright (c) Oracle All rights reserved      连接到: Oracle Database g Enterprise Edition Release Production   With the Partitioning OLAP and Data Mining options   已导出 ZHS GBK 字符集和 AL UTF NCHAR 字符集   注: 将不导出表数据 (行)   即将导出可传输的表空间元数据   对于表空间 EXAMPLE       正在导出簇定义 正在导出表定义 正在导出表 REGIONS 正在导出表 COUNTRIES 正在导出表 LOCATIONS 正在导出表 DEPARTMENTS 正在导出表 JOBS 正在导出表 EMPLOYEES 正在导出表 JOB_HISTORY 正在导出表 CUSTOMERS 正在导出表 WAREHOUSES 正在导出表 ORDER_ITEMS 正在导出表 ORDERS 正在导出表 INVENTORIES 正在导出表 PRODUCT_INFORMATION 正在导出表 PRODUCT_DESCRIPTIONS 正在导出表 PROMOTIONS 正在导出表 ORDERS_QUEUETABLE 正在导出表 AQ$_ORDERS_QUEUETABLE_S 正在导出表 AQ$_ORDERS_QUEUETABLE_T 正在导出表 AQ$_ORDERS_QUEUETABLE_H 正在导出表 AQ$_ORDERS_QUEUETABLE_G 正在导出表 AQ$_ORDERS_QUEUETABLE_I 正在导出表 STREAMS_QUEUE_TABLE 正在导出表 AQ$_STREAMS_QUEUE_TABLE_S 正在导出表 AQ$_STREAMS_QUEUE_TABLE_T 正在导出表 AQ$_STREAMS_QUEUE_TABLE_H 正在导出表 AQ$_STREAMS_QUEUE_TABLE_G 正在导出表 AQ$_STREAMS_QUEUE_TABLE_I 正在导出表 TIMES 正在导出表 PRODUCTS 正在导出表 CHANNELS 正在导出表 PROMOTIONS 正在导出表 CUSTOMERS 正在导出表 COUNTRIES 正在导出表 SUPPLEMENTARY_DEMOGRAPHICS 正在导出表 CAL_MONTH_SALES_MV 正在导出表 FWEEK_PSCAT_SALES_MV 正在导出表 SALES 正在导出表 COSTS 正在导出表 MVIEW$_EXCEPTIONS 正在导出表 ONLINE_MEDIA 正在导出表 PRINT_MEDIA 正在导出引用完整性约束条件 正在导出触发器 结束导出可传输的表空间元数据   成功终止导出 没有出现警告         C:Documents and Settingshawk> C:Documents and Settingshawk> C:Documents and Settingshawk>copy D:systemora goradataora gEXAMPLE DB F d:EXAMPLE DBF 已复制 个文件      C:Documents and Settingshawk>imp userid= sys/system as sysdba file= d:a dmp transport_tablespace=y datafiles= d:EXAMPLE DBF Import: Release Production on 星期三 月 : : Copyright (c) Oracle All rights reserved 连接到: Oracle Database g Enterprise Edition Release Production With the Partitioning OLAP and Data Mining options   经由常规路径由 EXPORT:V 创建的导出文件   即将导入可传输的表空间元数据   已经完成 ZHS GBK 字符集和 AL UTF NCHAR 字符集中的导入    正在将 SYS 的对象导入到 SYS   IMP : 由于 ORACLE 错误 以下语句失败:    BEGIN sys dbms_plugts beginImpTablespace( EXAMPLE SYS    NULL NULL    NULL); END;   IMP : 遇到 ORACLE 错误   ORA : 表空间 EXAMPLE 已存在   ORA : 在 SYS DBMS_PLUGTS line   ORA : 在 line   IMP : 未成功终止导入       因为测试是在同一个实例中进行 所以出现上面的表空间已存在错误      SQL> alter tablespace example read write;      Tablespace altered    lishixinzhi/Article/program/Oracle/201311/18536

Oracle 11Gr2 Stream 同步求解

How to setup Oracle Streams Bi-Directionalhttp://www.askmaclean.com/archives/how-setup-oracle-bi-directional-streams.html

oracle流池是做什么的

由Oracle Streams 特性使用的一块内存区域。Oracle Streams也叫Oracle流,可以使一个数据库中的数据,事物处理和事件在本数据库内部传递,也可以使它们从一个数据库传递到另一个数据库中。流可以将被发布的信息传递到订阅它的目的地。简而言之Oracle Streams 就是满足了大部分的数据移动,事物处理传播以及事件管理的需要。

Oracle高级复制和流哪个效率更好

Oracle备份功能包括:高级复制(Advanced Replication)流复制(Streams Replication)备库(Dataguard)一 dataguard:dataguard在高可用及容灾方面一般是dba的首选,毕竟dataguard在这方面 存在压倒性的优势,不管是物理备用库(physical standby database)还是逻辑备用库(logical standby database),它们都具有一些共同的待征。配置和管理方面的成本:dataguard比stream replication简单方便;安全与稳定方面的成本:dataguard比stream replication稳定可靠。对对于一个24x7的系统来说,这些是非常重要的,系统宕机时间的增加不仅影响着公司的形象,还会影响公司的效益;采用dataguard,数据的安全性相当有保障,物理备用库可以在最短的时间完成故障切换,逻辑备用库在保障数据安全的同时, 也可以承担大量的报表等业务;由于dataguard的配置与管理比较简单,同理也降低了dba的工作强度;二 流复制:适用于如下情况:1、局部复制 stream可以只复制某些表或某些模式2、异构环境 充分利用现有的设备与技术3、远程容灾 stream对网络的要求较dataguard低stream replication有灵活的复制策略,不仅可以配置只复制某些表,还可以配置仅复制某些表上的ddl或dml,相比dataguard必须整个数据库复制而言,可以节省相当的存储投资,毕竟对于某些海量数据而言,有许多是不必要复制的。如果在异构环境,即不同的操作系统,那dataguard将会束手无策,非stream replication莫属,这样可以充分利用现有的环境,配置高用可方案,在异构环境,stream replication将会是advanced replication的强劲对手。stream replication传播的是经过logmnr挖掘并包装的逻辑改变记录(LCRs),相比dataguard传送archived redo log、advanced replication的mview log与mview刷新的方式,stream replication对网络的需求降低了很多,在远程异地容灾的过程中,租用网络带宽是一笔较高的费用,stream replication可以适当地降低这笔费用。三 高级复制:advanced replication相对于dataguard,缺点是:配置与管理较复杂、安全与稳定性不够;优点:局部复制、异构环境等。advanced replication是一种相当成熟的技术,在许多关键系统中得到成功的运用,相对于9iR2推出的stream replication而言,双方适用的环境虽然相当,比如都可以进行局部复制、异构复制、远程容灾等,advanced replication目前在稳定性与安全性方面更经得起考验。对比stream replication与advanced replication底层的实现技术,stream replication在实时性、稳定性、高效率、低消耗(较少的cpu/network资源)等方面更有优势,但凡一些新推出的功能,都或多或少存在一些不确定的因素。在10gR1中,oracle针对目前stream replication存在的弱点进行了增强,不仅提供了从advanced replication迁移到stream replication的脚本,还提供了stream replication的配置与监控工具,stream replication在配置与管理方面必将智能化、简单化,担负起与shareplex争夺企业数据复制市场的重任。四 高级复制与流复制区别高级复制与Streams Replication的原理是完全不同的,Streams Replication可以到表,用户,数据库级别,但高级复制似乎只能到表一级。Streams Replication不是高级复制的升级版。异构环境下,oracle的高可用和容灾有高级复制和stream 复制两种,两种的异同点如下:1.高级复制是基于触发器(trigger)原理,而stream是基于日志挖掘原理,因此stream复制对源数据库的性能影响更小,但实时性不如高级复制。2.高级复制复制的对象是基于数据库目标(object)的,如表、索引和存储过程,而stream复制可以针对表、方案(schema)和整个数据库,因此如果出于容灾整个数据库的考虑,stream复制的配置相对简单。3.高级复制是一种相当成熟的技术,在许多关键系统中得到成功的运用,相对于9iR2推出的stream复制,高级复制目前在稳定性与安全性方面更经得起考验。4.从发展的角度看,流的应用会越来越多,从oracle10g,oracle公司提供了从高级复制向流复制移植的工具,可以看出,oracle公司会更偏重于基于流的新技术。5.由于高级复制是基于触发器的,因此所有的复制对象结构(ddl)的改变,都必须通过oracle提供的复制包来实施,和应用结合的比较紧,更适合于开发者使用,而流复制则更适合dba来实施。6. 流复制支持双向数据复制,而高级复制会有冲突;7. 流复制支持异构数据库复制,而没有资料说明高级复制也有相同功能;两种实际使用来看,streams复制需要更少的带宽,2m带宽,如果 streams复制不行,高级复制大概更没戏,但是用streams最好别网络断线时间过长,不知道是bug还是oracle没考虑这种情况,如果复制停 顿一段时间,再恢复正常,大概是队列表中消息太多了,入队出队都很慢,非线性增长啊,这样就需要不短的一段时间来同步数据,高级复制就没这种状况。bug,反正10,2,0,1有一些,看你碰的到碰不到了,严重的能让你删掉队列表重建才行,意味着基本是重建整个复制了,不过想重复一下又不出现了;还有使用negative rule如果站点多了遇到大的更新事务速度就变得极慢,站点多了要先设计好结构;会不停在有apply进程的站点udump目录下生成trc文件,虽然还算不上很成熟,不过streams复制真是好东西,以后必定会取代高级复制,建议打10.2.0.3补丁,据说修正了不少bug.stream对系统的设计与维护方要有相当的对stream技术的把控能力,而大多数系分与 DBA对这个东西都没有经验,所以难以推广;dataguard胜在维护简单可靠,一般dba都可以维护。stream以后会的前景会非常广阔! 尤其是双向复制,解决了很多实际问题。

Oracle 11Grac1安装时设置 display=?(本机还是 远程机器的ip?) 为什么ip是远程机器的时候,总提示

没有设置合适的协议

如何使用lucene改造oracle数据库

Lucene一个常见的用例是在一个或者多个数据库表进行全文检索。 虽然MySql有全文检索的功能,但是如果字段和数据量增加,MySql的性能会减低很快。映射数据到Lucene用伪代码表示:String sql = “select id, firstname, lastname, phone, email fro...

JSP+JDBC(Thin模式)连接Oracle

在JSP中连接到Oracle一般有2种方式:1、Oracle JDBC的oci8方式2、Oracle JDBC的thin方式我比较喜欢第2种,因为WEB发布服务器与数据库服务器一般都不会放在同一台电脑中,而在使用thin方式连接时,Web服务器端无须安装oracle的客户端。在动手先代码之前,我们先把环境配置妥善。先从安装了Oracle的数据库服务器中,找到Oracle安装目录,然后将该目录下的jdbclibclasses12.jar文件拷贝到WEB发布服务器的某个目录。假设就直接放在C:根目录下吧,然后把该路径添加到‘系统--高级--环境变量"中变量名为‘CLASSPATH"的值中,如:D:Program FilesSQLLIBjavadb2java.zip;D:Program FilesSQLLIBjavauntime.zip;c:classes12.jar; 也就是让java能够找到这个包。配置好环境后,我们就开始开始动手写代码了。关于数据库连接的代码,应该写个专门的连接类来调用,没必要想网络上有些文章那样,直接写到JSP的代码中。关于连接的代码很简单private Connection newConnection(String user,String password) {Connection con = null;try {Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();con = DriverManager.getConnection (“jdbc:oracle:thin:@192.168.96.1:1521:oracle9i”,user,password);}catch (SQLException e) {return null;}return con;}如果帐号密码没有错,那这个函数就应该能返回个可用的连接。但如此简单的连接在一个项目中使用,是远远达不到效果的。我们可以在这个数据库连接类中加入更多的功能,如连接池等等。下面我就把该数据库连接类的代码详细的列出来,大家可以参考参考。/** @Title 公司网站* @Author: zf* @Version 1.0* @Memo:定义数据库连接及其数据库连接池等*/package com.kingson.db;import java.io.*;import java.sql.*;import java.util.*;import java.util.Date;public class DBConnectionManager {static private DBConnectionManager instance; // 唯一实例static private int clients;private Vector drivers = new Vector();private PrintWriter log;private Hashtable pools = new Hashtable();/*** 返回唯一实例.如果是第一次调用此方法,则创建实例** @return DBConnectionManager 唯一实例*/static synchronized public DBConnectionManager getInstance() {if (instance == null) {instance = new DBConnectionManager();}clients++;return instance;}/*** 建构函数私有以防止其它对象创建本类实例*/private DBConnectionManager() {init();}/*** 将连接对象返回给由名字指定的连接池** @param name 在属性文件中定义的连接池名字* @param con 连接对象*/public void freeConnection(String name, Connection con) {DBConnectionPool pool = (DBConnectionPool) pools.get(name);if (pool != null) {pool.freeConnection(con);}}/*** 获得一个可用的(空闲的)连接.如果没有可用连接,且已有连接数小于最大连接数* 限制,则创建并返回新连接** @param name 在属性文件中定义的连接池名字* @return Connection 可用连接或null*/public Connection getConnection(String name) {DBConnectionPool pool = (DBConnectionPool) pools.get(name);if (pool != null) {return pool.getConnection();}return null;}/*** 获得一个可用连接.若没有可用连接,且已有连接数小于最大连接数限制,* 则创建并返回新连接.否则,在指定的时间内等待其它线程释放连接.** @param name 连接池名字* @param time 以毫秒计的等待时间* @return Connection 可用连接或null*/public Connection getConnection(String name, long time) {DBConnectionPool pool = (DBConnectionPool) pools.get(name);if (pool != null) {return pool.getConnection(time);}return null;}/*** 关闭所有连接,撤销驱动程序的注册*/public synchronized void release() {// 等待直到最后一个客户程序调用if (--clients != 0) {return;}Enumeration allPools = pools.elements();while (allPools.hasMoreElements()) {DBConnectionPool pool = (DBConnectionPool) allPools.nextElement();pool.release();}Enumeration allDrivers = drivers.elements();while (allDrivers.hasMoreElements()) {Driver driver = (Driver) allDrivers.nextElement();try {DriverManager.deregisterDriver(driver);log("撤销JDBC驱动程序 " + driver.getClass().getName()+"的注册");}catch (SQLException e) {log(e, "无法撤销下列JDBC驱动程序的注册: " + driver.getClass().getName());}}}/*** 根据指定属性创建连接池实例.** @param props 连接池属性*/private void createPools(Properties props) {Enumeration propNames = props.propertyNames();while (propNames.hasMoreElements()) {String name = (String) propNames.nextElement();if (name.endsWith(".url")) {String poolName = name.substring(0, name.lastIndexOf("."));String url = props.getProperty(poolName + ".url");if (url == null) {log("没有为连接池" + poolName + "指定URL");continue;}String user = props.getProperty(poolName + ".user");String password = props.getProperty(poolName + ".password");String dbip = props.getProperty(poolName + ".db_ip", "192.168.96.1");String dbport = props.getProperty(poolName + ".db_port", "1521");String dbuid = props.getProperty(poolName + ".db_uid", "ORACLE9I");String maxconn = props.getProperty(poolName + ".maxconn", "0");//连接信息String dbInfo = user + "/" + password + "@" + dbip + ":" + dbport + ":" + dbuid;int max;try {max = Integer.valueOf(maxconn).intValue();}catch (NumberFormatException e) {log("错误的最大连接数限制: " + maxconn + " .连接池: " + poolName);max = 0;}DBConnectionPool pool = new DBConnectionPool(poolName, url,dbInfo, max);pools.put(poolName, pool);log("成功创建连接池" + poolName);}}}/*** 读取属性完成初始化*/private void init() {InputStream is = getClass().getResourceAsStream("db.properties");Properties dbProps = new Properties();try {dbProps.load(is);}catch (Exception e) {System.err.println("不能读取属性文件. " +"请确保db.properties在CLASSPATH指定的路径中");return;}String logFile = dbProps.getProperty("logfile", "newslog.txt");try {log = new PrintWriter(new FileWriter(logFile, true), true);}catch (IOException e) {System.err.println("无法打开日志文件: " + logFile);log = new PrintWriter(System.err);}loadDrivers(dbProps);createPools(dbProps);}/*** 装载和注册所有JDBC驱动程序** @param props 属性*/private void loadDrivers(Properties props) {String driverClasses = props.getProperty("driver");StringTokenizer st = new StringTokenizer(driverClasses);while (st.hasMoreElements()) {String driverClassName = st.nextToken().trim();try {Driver driver = (Driver)Class.forName(driverClassName).newInstance();DriverManager.registerDriver(driver);drivers.addElement(driver);log("成功注册JDBC驱动程序" + driverClassName);}catch (Exception e) {log("无法注册JDBC驱动程序: " +driverClassName + ", 错误: " + e);}}}/*** 将文本信息写入日志文件*/private void log(String msg) {log.println(new Date() + ": " + msg);}/*** 将文本信息与异常写入日志文件*/private void log(Throwable e, String msg) {log.println(new Date() + ": " + msg);e.printStackTrace(log);}/***************连接池类*************************************************//*** 此内部类定义了一个连接池.它能够根据要求创建新连接,直到预定的最* 大连接数为止.在返回连接给客户程序之前,它能够验证连接的有效性.*/class DBConnectionPool {private int checkedOut;private Vector freeConnections = new Vector();private int maxConn;private String name;private String URL;private String dbInfo;/*** 创建新的连接池** @param name 连接池名字* @param URL 数据库的JDBC URL* @param dbInfo 数据库连接信息* @param maxConn 此连接池允许建立的最大连接数*/public DBConnectionPool(String name, String URL, String dbInfo, int maxConn) {this.name = name;this.URL = URL;this.dbInfo = dbInfo;this.maxConn = maxConn;}/*** 将不再使用的连接返回给连接池** @param con 客户程序释放的连接*/public synchronized void freeConnection(Connection con) {// 将指定连接加入到向量末尾freeConnections.addElement(con);checkedOut--;notifyAll();}/*** 从连接池获得一个可用连接.如没有空闲的连接且当前连接数小于最大连接* 数限制,则创建新连接.如原来登记为可用的连接不再有效,则从向量删除之,* 然后递归调用自己以尝试新的可用连接.*/public synchronized Connection getConnection() {Connection con = null;if (freeConnections.size()0) {// 获取向量中第一个可用连接con = (Connection) freeConnections.firstElement();freeConnections.removeElementAt(0);try {if (con.isClosed()) {log("从连接池" + name+"删除一个无效连接");// 递归调用自己,尝试再次获取可用连接con = getConnection();}}catch (SQLException e) {log("从连接池" + name+"删除一个无效连接");// 递归调用自己,尝试再次获取可用连接con = getConnection();}}else if (maxConn == 0 || checkedOutmaxConn) {con = newConnection();}if (con != null) {checkedOut++;}return con;}/*** 从连接池获取可用连接.可以指定客户程序能够等待的最长时间* 参见前一个getConnection()方法.** @param timeout 以毫秒计的等待时间限制*/public synchronized Connection getConnection(long timeout) {long startTime = new Date().getTime();Connection con;while ((con = getConnection()) == null) {try {wait(timeout);}catch (InterruptedException e) {}if ((new Date().getTime() - startTime) = timeout) {// wait()返回的原因是超时return null;}}return con;}/*** 关闭所有连接*/public synchronized void release() {Enumeration allConnections = freeConnections.elements();while (allConnections.hasMoreElements()) {Connection con = (Connection) allConnections.nextElement();try {con.close();log("关闭连接池" + name+"中的一个连接");}catch (SQLException e) {log(e, "无法关闭连接池" + name+"中的连接");}}freeConnections.removeAllElements();}/*** 创建新的连接*/private Connection newConnection() {Connection con = null;try {con = DriverManager.getConnection(URL+dbInfo);log("连接池" + name+"创建一个新的连接");}catch (SQLException e) {log(e, "无法创建下列URL的连接: " + URL);return null;}return con;}}}

msb 是什么文件 oracle

msb files are Oracle message files, binary version. Whenever you get an error like ORA-1234 or IMP-123, relevant message files are read and the errors are fetched. These files are always open by Oracle processes (threads in windows).In UNIX, you have msg files in addition to msb. But msg files are never used by Oracle processes. They"re there only for humans to read and used by the oerr utility. They contain the same information as their msb counterpart.

oracle中的可不可以not minus的用法

不可以,只有union allminus

oracle里面的minus,换到sql2000里面是什么?

sql server是不支持minus的!可以考虑使用not exist

oracle的minus怎么使用?

oracle的minus返回第一个表中有、第二个表中没有的数据 CREATE TABLE union_tab_1 ( id INT, val VARCHAR(10));CREATE TABLE union_tab_2 ( id INT, val VARCHAR(10));INSERT INTO union_tab_1 VALUES(1, "A");INSERT INTO union_tab_1 VALUES(2, "B");INSERT INTO union_tab_1 VALUES(3, "C");INSERT INTO union_tab_2 VALUES(1, "A");INSERT INTO union_tab_2 VALUES(1, "A");INSERT INTO union_tab_2 VALUES(2, "B");INSERT INTO union_tab_2 VALUES(4, "D");SQL> SELECT * FROM union_tab_1 2 MINUS 3 SELECT * FROM union_tab_2; ID VAL---------- -------------------- 3 CSQL> SELECT * FROM union_tab_2 2 MINUS 3 SELECT * FROM union_tab_1; ID VAL---------- -------------------- 4 D

oracle中INTERSECT,MINUS用法

INTERSECT取两个表的交集,即A中的数据也在B中存在。例如:A表数据"A "B "C-- -- --a b ca1 b1 c1a2 b2 c2B表数据"A "B "C-- -- --a b ca1 b1 c1a3 b3 c3例句:select * from aintersectselect * from b结果为:"A "B "C-- -- --a b ca1 b1 c1MINUS和减法有点像,但他们多少是有点区别,例如:A表:"A "B "C-- -- --a b ca1 b1 c1a2 b2 c2B表数据"A "B "C-- -- --a b ca1 b1 c1a3 b3 c3select * from a minus select * from b"A "B "C-- -- --a2 b2 c2看了结果你会发现,B表中记录a3,b3,c3没有了,这就是他和减法的区别。A-B只减去了A、B共有的部分。

oracle里面Union和minus的问题

select * from A intersect select * from B;

oracle中INTERSECT,MINUS用法

intersect 就是交集,minus 就是差集。步骤举例如下:1、分别创建两张表,TEST_A及TEST_B;2、插入样例数据;insert into test_a values(1);insert into test_a values(2);insert into test_a values(3);insert into test_b values(1);insert into test_b values(2);commit;3、编写INTERSECT语句,select * from TEST_A t INTERSECT select * from TEST_B t;可以发现只有交集结果1、2;4、编写MINUS语句,select * from TEST_A t MINUS select * from TEST_B t;可以发现只有差集结果3;扩展资料1、交集就是两个结果集中都有的元素。假设有两个数集A和B,A包含1、2、3,B包含1、2,这两个数集都有1、2,那么A和B交在一起的部分1、2,就是A和B的交集。2、差集就是A中存在,但是B中不存在的数据集。假设有两个数集A和B,A包含1、2、3,B包含1、2,这两个数集差集就是1。

oracle 怎么查指定用户(例如scott)用到的表空间

select distinct tablespace_name from user_all_tables;

oracle19c怎么连接scott

通过代码来连接。oracle19c安装好之后导入scott.sql脚本(可以在oracle的安装目录的查找)之后在通过代码连接scott就可以登陆了。Oracle19c也就是12.2.0.3,是OracleDatabase12c和18c系列产品的最终版本,因此也是“长期支持”版本(以前称为“终端版本”)。

oracle 帐号scott被锁定 如何解锁

楼上很完整;要简单就登录控制台操作。

oracle 远程连接数据库命令,sqlplus 用户名/密码@();这条命令括号中该写什么内容

@后面写数据库ip或者自己配的tns里的自定义的名字

oracle中 如果字段1为空,则取字段2的值

这个问题,建议在程序端解决,而不是在SQL端解决

请问下oracle nav 函数的用法的问题

同意楼上的,如果本身没有数据是不会查到结果的,记住查到结果是在正确的where条件有返回值的情况。

如何让oracle函数中null值变为零?

nvl函数这个函数的格式是select nvl(arg,n) from dual;解释一下,就是如果arg这个参数是null的话,那么就用n这个数,这就跟赋值差不多。要是想让oracle函数中null值变为零:可以用这个语句:select nvl(arg,0) from dual这句话的意思就是,如果参数arg是Null的话,那么就用0,实际上也就是0代替了n的位置而已。

oracle 为什么nvl执行效率比is null

没明白想问 nvlnull值转换其值让返null呢 返null: select nvl("" ,null) from dual

Oracle使用左外连接时,左表中的一个id在右表(数据表以天为单位)中没有数据 使用nvl替换为0

1. 是用nvl替换null为数字0. nvl(id,0)2. select sum(xxx) from taba where id is null;

oracle 加了nvl 为什么字段为空时为什么不输出0,求解怎么设置字段为空输出0

你这个查询没有返回结果,当然就没有值了

oracle函数怎么能让null值变为零

使用nvl函数nvl(args,value):把SQL查询结果的NULL字段设置为缺省值。select nvl(栏位,0) from table

oracle nvl函数 转成空字符串后为什么还显示null

nvl(列名,值)您设置的值是什么?

请教一个Oracle里一个Sql语句,不知道哪儿有问题~

我觉得应该是这样子select * from A full join B on (NVL(A.a, " ") = NVL(B.a, " ") and ((NVL(A.b, " ") <> NVL(B.b, " ") or NVL(A.c, " ") <> NVL(B.c, " "))

VB中有类似ORACLE中NVL这个函数的函数吗

这个差不多iif(null,expr1,expr2)

oracle中是不是不能这样写select *,nvl((select a from b),0)值 from 表

select c.*,nvl(b.a,0)from talbe 表 c,b

table有a,b,c三个字段,类型为数值。oracle查出每行这3个字段值的平均值,为空的排除。比如a,b,c都有值

同意1楼和3楼。isnull(a,0)

SQLServer中左联接查询用left join,Oracle中用什么?

【答案】:左连接:select(nvl(a.c,0)-nvl(b.c,0)) from a,b where a.id(+)=b.id右连接:select(nvl(a.c,0)-nvl(b.c,0)) from a,b where a.id=b.id(+)自连接:select(nvl(a.c,0)-nvl(b.c,0)) from a,b where a.id(+)=b.id(+)说明:加号写在左就是左连接,写在右就是右连接,看加号的方法来定

Oracle数据库!!!行级触发器!!!:new:old怎么用????谢谢!!

CREATEORREPLACETRIGGERIUD_BBBBBEFOREinsertorupdateordeleteonEM_AAAAforeachrowdeclare--localvariablesherev_countnumber;beginIfInsertingThenselectcount(*)intov_countfromem_outlivewherefact_no=:new.fact_noandpnl_no=:new.pnl_noand((nvl(:new.if_flag,"0")="1"andnvl(in_date,"0")="0")or(nvl(:new.if_flag,"0")="1"andnvl(in_date,"0")<>"0"andin_date>=:new.date_start)or(nvl(:new.if_flag,"0")="0"andnvl(in_date,"0")="0"andout_date<=:new.date_end)or(nvl(:new.if_flag,"0")="0"andnvl(in_date,"0")<>"0"andin_date>=:new.date_startandout_date<=:new.date_end));ifv_count>0thenRAISE_APPLICATION_ERROR(-20001,"此员工在日期:"||:new.date_start||"之后已经登记外宿,不可以在厂里登记住宿!");ROLLBACK;RETURN;endif;ifnvl(:new.if_flag,"0")="1"thenupdateem_bedsetuse="1"wherefact_no=:new.fact_noandbuild_no=:new.build_noandfloor_no=:new.floor_noandroom_no=:new.room_noandbed_no=:new.bed_no;elsifnvl(:new.if_flag,"0")="0"thenupdateem_bedsetuse="0"wherefact_no=:new.fact_noandbuild_no=:new.build_noandfloor_no=:new.floor_noandroom_no=:new.room_noandbed_no=:new.bed_no;endif;endif;ifUpdatingthenselectcount(*)intov_countfromem_outlivewherefact_no=:new.fact_noandpnl_no=:new.pnl_noand((nvl(:new.if_flag,"0")="1"andnvl(in_date,"0")="0")or(nvl(:new.if_flag,"0")="1"andnvl(in_date,"0")<>"0"andin_date>=:new.date_start)or(nvl(:new.if_flag,"0")="0"andnvl(in_date,"0")="0"andout_date<=:new.date_end)or(nvl(:new.if_flag,"0")="0"andnvl(in_date,"0")<>"0"andin_date>=:new.date_startandout_date<=:new.date_end));ifv_count>0thenRAISE_APPLICATION_ERROR(-20001,"此员工在日期:"||:new.date_start||"之后已经登记外宿,不可以在厂里登记住宿!");ROLLBACK;RETURN;endif;ifnvl(:new.if_flag,"0")="1"andnvl(:old.if_flag,"0")="0"thenupdateem_bedsetuse="1"wherefact_no=:new.fact_noandbuild_no=:new.build_noandfloor_no=:new.floor_noandroom_no=:new.room_noandbed_no=:new.bed_no;elsifnvl(:new.if_flag,"0")="0"andnvl(:old.if_flag,"0")="1"thenupdateem_bedsetuse="0"wherefact_no=:new.fact_noandbuild_no=:new.build_noandfloor_no=:new.floor_noandroom_no=:new.room_noandbed_no=:new.bed_no;endif;endif;ifDeletingthenifnvl(:old.if_flag,"0")="1"thenupdateem_bedsetuse="0"wherefact_no=:old.fact_noandbuild_no=:old.build_noandfloor_no=:old.floor_noandroom_no=:old.room_noandbed_no=:old.bed_no;endif;endif;endIUD_EM_BEDPNL;

oracle nvl函数 转成空字符串后为什么还显示null

在Oracle中,空字符串就视为null对象。

oracle索引问题

理论上是这样子的,做不能说有了索引就一定能解决你的问题

C#中方法:如果字符串为空,则用其他字符串替换?像oracle中的nvl(a,b)。

我是不知道有这样的方法,但是用哪个三目的运算符还是不错的,呵呵~~string temp = a=="" ? b : a ; //这句话的意思是如果a==""为true,那么就给a赋b的值,否则就赋a的值。首先前提是 a,b都是string类型的,否则要强转。如果你想写问题中的 int a=int.prise(b) 解决判断b是否为空吗?(int.prise 这个好像不是c#吧)可以写成 int a=int.prise(b==""?0: Convert.ToInt32(b));大概是这个意思,这里b是string类型的(如果是int型的,为空的话,默认值就是0)Convert.ToInt32(b)这个方法,是c#中强转成int型的方法,前提b中的值,全是数字,否则也会报错

db2中是否有类似于oracle中nvl的函数

有,coalesce函数,还有一个是value函数,不过后面的并不是通用的,所以最好用前面的。

Access里如何实现空值替换,类似于oracle中的nvl函数

select nvl(field,0) from table nvl(field,0)是如果field字段为空时,赋予field字段显示为0

oracle的sql语句where语句中nvl函数的第一个参数可以使用宿主变量不,如where 字段名1=nvl(:va,字段名1)

可以

oraclenvl可以穿几个参数

两个。NVL函数的格式如下:NVL(expr1,expr2)。NVL(E1,E2)的功能为:如果E1为NULL,则函数返回E2,否则返回E1本身。但此函数有一定局限,所以就有了NVL2函数。拓展:NVL2函数:Oracle/PLSQL中的一个函数,Oracle在NVL函数的功能上扩展,提供了NVL2函数。NVL2(E1,E2,E3)的功能为:如果E1为NULL,则函数返回E3,若E1不为null,则返回E2。

sqlserver有没有类似oracle中nvl这样的函数

sqlserver中的isnull跟oracle中的nvl相似。ISNULL使用指定的替换值替换 NULL。语法ISNULL ( check_expression , replacement_value ) 参数check_expression将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。replacement_value在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。 返回类型返回与 check_expression 相同的类型。注释如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。

Oracle中nvl函数的用法和作用是什么?

如果是空值就替换成另一个值如nvl(字段,‘x")字段值等于null就这个函数得到的结果就是"x",一般用于存在空值比较的情况下,比如字段a与字段b都是int型,其中一个等于null另一个为非空值,你使用a<>b是不成立的,使用此条件查询你将丢失这条本来不相等的数据,可以如此用法nvl(字段,-1)<>nvl(字段,-1),这样就可以得到想要查询的数据,当然查询数据的前提是此字段值不能有-1值才能用这种写法

在oracle数据库中nvl()是什么函数?

NVL(exp1,exp2),如果exp1的计算结果为null值,则NVL()返回exp2。如果exp1的计算结果不是null值,则返回exp1。使用样例如下:1、创建测试表,create table test_nvl(value varchar2(50));2、插入测试数据insert into test_nvl values("123");insert into test_nvl values("456");insert into test_nvl values("");insert into test_nvl values("666");insert into test_nvl values("111");commit;3、查询表中全量数据,select t.*, rowid from test_nvl t;4、编写sql,使用nvl函数,可以发现空值转为了1; select t.*, nvl(value,1) value2 from test_nvl t;

oracle的nvl和nvl2是什么函数,两者区别是什么呢

推荐一篇对Oracle常用函数进行总结的文章。Oracle学习笔记——常用函数总结

oracle中nvl()函数有什么用啊?

判断 为不为空

Access里如何实现空值替换,类似于oracle中的nvl函数

IIf(expr, truepart, falsepart)用这个函数IIf(a.field1="","0",a.field)
 首页 上一页  1 2 3 4 5 6 7  下一页  尾页