Questions tagged «oracle»

所有版本的Oracle数据库。如果该上下文在问题中很重要,请添加特定于版本的标记,例如oracle-11g-r2。请勿用于Oracle产品(例如应用程序或中间件)或Oracle拥有的其他数据库产品(例如MySQL或BerkeleyDB)。

3
我可以更改Oracle数据库的SID吗?
服务器是Oracle Database 11g企业版11.1.0.7.0版-64位 有没有简单快捷的方法来更改服务器上测试数据库的SID? 删除和重新创建数据库是我的一个选择。但我正在寻找需要更少时间的东西。 在客户端tnsnames.ora中分配名称的另一个选项容易出错,因为它们不是集中管理的。 与在SQL Server上删除和创建数据库的时间相比,创建新的Oracle数据库所需的时间过长。进一步在SQL Server上,您可以重命名SQL Server实例。[通常,您重命名运行SQL-Server的服务器,并且在重命名服务器之前也会遇到一些问题]。

1
Oracle 11g侦听器失败,并出现ORA-12514和ORA-12505错误
我在开发计算机上本地运行Oracle 11g实例,并且可以直接通过SqlPlus连接到本地实例: c:\>sqlplus ace SQL*Plus: Release 11.2.0.2.0 Production on Mon Mar 11 11:50:20 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved. Enter password: Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - Beta SQL> select count(*) from my_table ; COUNT(*) ---------- 5297 但是我无法通过侦听器连接到它: c:\>sqlplus -L "user/pw@(DESCRIPTION = (ADDRESS …

3
JOIN条件和WHERE条件之间有执行差异吗?
这两个示例查询之间是否存在性能差异? 查询1: select count(*) from table1 a join table2 b on b.key_col=a.key_col where b.tag = 'Y' 查询2; select count(*) from table1 a join table2 b on b.key_col=a.key_col and b.tag = 'Y' 注意唯一的区别是补充条件的位置。第一个使用WHERE子句,第二个将条件添加到ON子句。 当我在Teradata系统上运行这些查询时,说明计划是相同的,并且JOIN步骤显示了每种情况下的附加条件。但是,在有关MySQL的SO问题上,答案之一是建议使用第二种样式,因为WHERE处理是在进行联接之后进行的。 对这样的查询进行编码时,是否要遵循一般规则?我猜它必须是平台相关的,因为它显然对我的数据库没有影响,但这也许只是Teradata的功能。而且,如果它是依赖于平台的,我非常希望获得一些文档参考;我真的不知道该找什么。

1
复制Oracle数据库用户
我们将聘请外部审核员对Oracle数据库进行审查。他们将运行一个工具来执行检查,为此,他们需要一个可以连接到数据库并从中获取信息的用户ID。 为此,我们在数据库中已有一个用户。但是,它是生产ID,因此我们无法将其锁定。我们想克隆/复制此ID,包括其角色和权利。 在Oracle中有没有办法做到这一点?
17 oracle 

3
NVL代表什么?
代表什么NVL?我说的是Oracle和Informix(也许还有其他)函数,用于从查询结果中过滤出非NULL值(类似于COALESCE其他数据库)。

1
单排表的术语?
是否有一个特定的术语来描述基数为1的关系? 我特别考虑的是RDBMS“特殊”单行表,例如DUAL(Oracle),SYSIBM.SYSDUMMY1(DB2,Derby)和RDB$DATABASE(Interbase,Firebird)。

7
综合指标:选择性最强的列优先?
我一直在阅读composite indexes有关订购的信息,我有些困惑。该文档(至少不到一半)说 通常,应将预期最常使用的列放在索引的第一位。 然而,不久之后说 创建一个将最有选择性的列放在首位的复合索引;即,具有最多值的列。 甲骨文也在这里说 如果在WHERE子句中平等地使用所有键,则在CREATE INDEX语句中将这些键从最有选择性的顺序排列到最不有选择性的顺序可以最大程度地提高查询性能。 但是,我找到了一个SO答案,但答案却有所不同。它说 排列这些列,其中最不具选择性的列在前,最不具选择性的列在最后。如果是与柱子捆绑在一起,则更可能单独使用。 我引用的第一个文档说您应该首先去最常用的文档,而SO回答则应该只用于平局。然后它们的订购也有所不同。 该文档还讨论skip scanning并说 如果在复合索引的前导列中只有几个不同的值,而在索引的非前导键中有很多不同的值,则跳过扫描是有利的。 另一篇文章说 前缀列应该是查询中最具区分性和最广泛使用的 我相信最有区别的意思将是最独特的。 所有这些研究仍然将我引向同一问题。最有选择性的栏应该在第一还是最后?在抢七局中,第一栏应该是使用最多,选择最多的栏吗? 这些文章似乎相互矛盾,但是它们确实提供了一些示例。从我收集到的信息来看,如果您期望,那么成为订单中least selective column的第一名似乎更有效率Index Skip Scans。但我不确定这是否正确。

3
Oracle没有为长键使用唯一索引
我的测试数据库中有一个包含25万行的表。(有几亿个产品正在生产,我们在那里也可以观察到相同的问题。)该表具有nvarchar2(50)字符串标识符(不是null),并且具有唯一索引(不是PK)。 标识符由第一部分组成,该部分在我的测试数据库中具有8个不同的值(在生产中大约有1000个),然后是@符号,最后是一个1到6位数字的数字。例如,可能有5万行以“ ABCD_BGX1741F_2006_13_20110808.xml @”开头,然后是5万个不同的数字。 当我根据其标识符查询单行时,基数估计为1,成本非常低,可以正常工作。当我在一个IN表达式或一个OR表达式中查询带有多个标识符的多行时,索引的估计是完全错误的,因此使用了全表扫描。如果我用一个索引强加索引,它会非常快,实际上全表扫描的执行速度要慢一个数量级(并且生产速度要慢得多)。因此,这是一个优化程序问题。 作为测试,我使用完全相同的DDL和完全相同的内容复制了该表(在相同的模式+表空间中)。我在第一个表上重新创建了唯一索引以取得良好效果,并在克隆表上创建了完全相同的索引。我做了一个DBMS_STATS.GATHER_SCHEMA_STATS('schemaname',estimate_percent=>100,cascade=>true);。您甚至可以看到索引名称是连续的。因此,现在两个表之间的唯一区别是,第一个表是在很长一段时间内以随机顺序加载的,块分散在磁盘上(与其他几个大表一起放在一个表空间中),第二个表是成批加载的插入选择。除此之外,我无法想象任何区别。(自上次大删除以来,原始表已缩小,此后没有一个删除。) 这是病假表和克隆表的查询计划(黑色笔刷下的字符串在图片中相同,灰色笔刷下的字符串也一样): (在此示例中,有1867行以黑色刷过的标识符开头。2行查询产生的基数为1867 * 2,3行查询产生的基数为1867 * 3,依此类推。巧合的是,Oracle似乎并不在乎标识符的结尾。) 什么可能导致此行为?显然,在生产中重新创建表将非常昂贵。 USER_TABLES:http : //i.stack.imgur.com/nDWze.jpg USER_INDEXES:http : //i.stack.imgur.com/DG9um.jpg 我只更改了架构和表空间名称。您可以看到表名和索引名与查询计划屏幕快照上的相同。

1
为什么两周不活动后Oracle会话仍然有效
数据库:Oracle 10g 操作系统:Windows Server 2003 64位 我查询Web应用程序生成的Oracle会话列表(按program = w3wp.exe筛选) select * from V$session where UPPER(program) LIKE '%W3%' order by logon_time 根据Logon_Time,为什么在2012年7月31日或2012年8月1日或今天(2012年8月21日)之前的任何会议中仍存在活动会话? 我在sqlnet.ora上进行了配置:SQLNET.EXPIRE_TIME = 20因此,这意味着Oracle每20分钟检查一次连接是否仍处于活动状态。 所有用户方案都有默认配置文件。这意味着没有会话将永不过期或死亡吗? 在回应Phil的评论时添加: 补充了Phil的回答:

2
使用WITH进行多项操作
有没有一种方法可以使用该WITH语句执行多个操作? 就像是 WITH T AS ( SELECT * FROM Tbl ) BEGIN OPEN P_OUTCURSOR FOR SELECT * FROM T; SELECT COUNT(*) INTO P_OUTCOUNT FROM T; END; 我想选择一些数据及其数量...
16 oracle  select  cte 

3
如何区分SQL和PL / SQL?
我知道这个问题听起来太愚蠢了,但是我从不理解这部分。 SQL * Plus可与SQL和PL / SQL一起使用。我怎么知道某些代码是SQL还是PL / SQL?如果我的代码具有for循环,那么它不再是SQL吗? PL / SQL是SQL的扩展,使其具有循环,条件等。那么默认情况下,任何SQL代码是PL / SQL代码吗?是不是 SQL和PL / SQL之间是否有界线? 触发该问题的区分黑白SQL和PL / SQL的两个示例: 这两个create table语句有什么区别? /programming/2267386/oracle-11g-varray-of-objects/2267813#2267813

4
SQL * Plus命令末尾的分号的意义是什么?
有些语句(例如create table,insert into等)最后以分号表示: CREATE TABLE employees_demo ( employee_id NUMBER(6) , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn_demo NOT NULL ) ; 而其他人喜欢 set echo on connect system/manager 也不要使用分号。 这背后的原因是什么?我如何决定自己将分号放在哪里?

2
特殊的Oracle外连接语法案例
我在应该从Oracle外连接语法移植到SQL标准外连接语法的查询中看到了以下内容: SELECT ... FROM A, B, C, D, E WHERE A.A_ID = B.A_ID AND B.B_ID = C.A_ID(+) AND B.B_KEY = C.B_KEY(+) AND C.C_ID = D.C_ID(+) AND B.A_ID = E.A_ID(+) AND B.B_KEY = E.B_KEY(+) AND 'CONSTANT' = C.X_ID(+) 现在,翻译外部联接语法通常是一个机械过程,但是最后一行让我感到困惑。这是什么意思?它有什么作用?
16 oracle  join  syntax 



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.