我目前正在通过批处理进行调试,该批处理执行大量 DML 语句,但不会立即执行提交。能够在事务未提交的情况下查看来自另一个会话的“待处理”更改会很好。这可能吗?
例子:
Insert into table myTable (col1, col2) values ("col1", "col2");
--Somehow view the pending transaction maybe by system view?....
...other DML statements....
commit;
Run Code Online (Sandbox Code Playgroud) 我的主要技能是使用 SQL Server,但有人要求我对 Oracle 查询进行一些调整。我编写了以下 SQL:
declare @startDate int
select @startDate = 20110501
Run Code Online (Sandbox Code Playgroud)
我得到这个错误:
declare @startDate int
select @startDate = 20110501
Error at line 1
ORA-06550: line 1, column 9:
PLS-00103: Encountered the symbol "@" when expecting one of the following:
begin function package pragma procedure subtype type use
<an identifier> <a double-quoted delimited-identifier> form
current cursor
Run Code Online (Sandbox Code Playgroud)
如何在 Oracle 中声明和使用变量?
我一直在阅读composite indexes有关订购的信息,但我有点困惑。这个文档(不到一半)说
通常,您应该将最常使用的列放在索引中。
然而,不久之后它说
创建一个组合索引,将最具选择性的列放在首位;也就是说,具有最多值的列。
换句话说,Oracle 也在这里说
如果所有键在 WHERE 子句中的使用频率相同,则在 CREATE INDEX 语句中将这些键从选择性最高到选择性最低的顺序最能提高查询性能。
但是,我发现了一个不同的答案。它说
将选择最少的列排在最前面,将选择最多的列排在最后。在与列有联系的情况下,更有可能单独使用。
我引用的第一个文档说你应该首先使用最常用的,而 SO 答案说这应该只用于打破平局。然后他们在订购上也有所不同。
该文档还谈到skip scanning并说
如果复合索引的前导列中的不同值很少,而索引的非前导键中有许多不同的值,则跳过扫描是有利的。
另一篇文章说
前缀列应该是最有辨别力,在查询中使用最广泛的
我认为最有辨别力的就是最独特的。
所有这些研究仍然让我想到同样的问题;最具选择性的列应该是第一个还是最后一个?第一列是否应该是抢七局中使用最多且最具选择性的列?
这些文章似乎相互矛盾,但它们确实提供了一些示例。从我收集的,它似乎是更有效的least selective column是第一个在订购,如果你正期待Index Skip Scans。但我不确定这是否正确。
在使用生产数据的副本测试一些迁移脚本(脚本与开发数据一起运行良好)时,我发现了一个奇怪的情况。CONSTRAINT 已更改,因此我发出 DROP + ADD 命令:
ALTER TABLE A_DUP_CALLE
DROP CONSTRAINT A_DUP_CALLE_UK1;
ALTER TABLE A_DUP_CALLE
ADD CONSTRAINT A_DUP_CALLE_UK1 UNIQUE (
CONTROL_ID,
CALLE_AYTO_DUPL
)
ENABLE;
Run Code Online (Sandbox Code Playgroud)
DROP 命令运行良好,但 ADD 命令失败。现在,我陷入了一个恶性循环。我无法删除约束,因为它不存在(初始删除按预期工作):
ORA-02443: 无法删除约束 - 不存在的约束
我无法创建它,因为名称已经存在:
ORA-00955: 名称已被现有对象使用
我A_DUP_CALLE_UK1在 SQL Developer 的搜索框中输入内容,然后……就在那里!所有者、表名、表景观……一切都匹配:它不是同名的不同对象,它是我的原始约束。该表出现在约束详细信息中,但该约束未出现在表的详细信息中。
我的问题:
(服务器是 10g XE,我没有足够的声望来创建标签。)
数据库:Oracle 10g
操作系统:Windows Server 2003 64 位
我查询 Web 应用程序生成的 Oracle 会话列表(按 program=w3wp.exe 过滤)
select * from V$session
where UPPER(program) LIKE '%W3%'
order by logon_time
Run Code Online (Sandbox Code Playgroud)

根据 Logon_Time,为什么 31/07/2012 或 01/08/2012 或今天(21/08/2012)之前的任何会话仍然活动?
我在 sqlnet.ora 上配置了: SQLNET.EXPIRE_TIME= 20 所以这意味着每 20 分钟 Oracle 都会检查连接是否仍然处于活动状态。
所有用户架构都有默认配置文件。这意味着没有会话永远不会过期或死亡?

在回复 Phil 的评论时添加:

添加响应 Phil 的回答:

是否有“更好”的方法来重写SELECT多个列使用相同CASE WHEN条件的子句,以便条件只检查一次?
请参阅下面的示例。
SELECT
CASE testStatus
WHEN 'A' THEN 'Authorized'
WHEN 'C' THEN 'Completed'
WHEN 'P' THEN 'In Progress'
WHEN 'X' THEN 'Cancelled'
END AS Status,
CASE testStatus
WHEN 'A' THEN authTime
WHEN 'C' THEN cmplTime
WHEN 'P' THEN strtTime
WHEN 'X' THEN cancTime
END AS lastEventTime,
CASE testStatus
WHEN 'A' THEN authBy
WHEN 'C' THEN cmplBy
WHEN 'P' THEN strtBy
WHEN 'X' THEN cancBy
END AS lastEventUser
FROM test
Run Code Online (Sandbox Code Playgroud)
在非 sql 伪代码中,代码可能如下所示:
CASE testStatus
WHEN …Run Code Online (Sandbox Code Playgroud) 如何在不创建任何表的情况下在oracle sql查询中创建增量数?我曾尝试使用“with”子句,但没有得到预期的结果。我正在使用 oracle 10g
这是我尝试的代码,它似乎不起作用:
WITH
TABLE3 AS ( SELECT 2008 YEARS FROM dual WHERE 1=1
union all
select t3.YEARS+1 from TABLE3 t3
WHERE 1=1 AND t3.YEARS < 2011
)
select YEARS from TABLE3
Run Code Online (Sandbox Code Playgroud)
我想要的预期结果是:
2008
2009
2010
2011
Run Code Online (Sandbox Code Playgroud) 我想找到 oracle 10g 中表上的索引消耗的实际空间。我不打算包括 oracle 保留的空间以供将来使用。(不应该考虑oracle 的开销。)我想要使用的字节而不是分配的字节。
你能帮我继续前进吗?
另外,有没有办法找到表中长字段的实际大小。
PS:vsize() 和 dbms_lob.getlength() 不起作用。
晚了,我一直面临着很多行锁争用。争用的表似乎是一个特定的表。
一般是这样的——
大约 5 分钟后,前端似乎没有响应。检查会话显示行锁争用。每个人都抛出的“解决方案”是终止会话:/
作为数据库开发人员
如果这个问题感觉过于开放/信息不足,请随时编辑/让我知道 - 我会尽力添加一些额外的信息。
有问题的表有很多插入和更新,我想说它是最繁忙的表之一。SP 相当复杂 - 为简化起见 - 它从各种表中获取数据,将其填充到工作表中,在工作表上发生大量算术运算,并将工作表的结果插入/更新到相关表中。
数据库版本为 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit。逻辑流在两个会话中以相同的顺序执行,事务不会保持打开太长时间(或者至少我认为是这样),并且在事务的主动执行期间发生锁定。
更新:表格行数比我预期的要大,大约有 310 万行。此外,在跟踪会话后,我发现该表的几个更新语句没有使用索引。为什么会这样 - 我不确定。where 子句中引用的列已编入索引。我目前正在重建索引。
我想知道是否有人可以验证我对这 3 个与 Oracle 数据库相关的术语之间差异的理解。
许多来源混淆了这些术语并且没有详细解释它们,因此查找信息有点困难。
从我收集到的:
希望有人可以验证这些要点!谢谢!
oracle-10g ×10
oracle ×8
locking ×1
oracle-11g ×1
oracle-xe ×1
rdbms ×1
syntax ×1
transaction ×1