Name Null Type
-------- -------- ---------
ID NOT NULL NUMBER(4)
GROUP_ID NUMBER(4)
TEXT CLOB
Run Code Online (Sandbox Code Playgroud)
上有一个 btree 索引group_id。以下是每个行group_id有多少行以及相应的百分比:
GROUP_ID COUNT PCT
---------------------- ---------------------- ----------------------
1 1 1
2 2 1
3 4 3
4 8 6
5 16 12
6 32 24
7 64 47
8 9 7
Run Code Online (Sandbox Code Playgroud)
我跑了这个
EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'TEST', cascade=>true);
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,这将为优化器收集统计信息。
现在,我记得看到 Oracle 不会使用索引并执行全表扫描,如果它检索所有行的 5% 以上左右。但是,当我运行此查询时,它仅在group_id7时才开始执行 FTS ,占所有行的 47%。
这是应该的方式吗?
我想知道是否可以指定一个时间点,然后“回滚”到该状态(撤消 DDL 和 DML 更改)。也许使用更改记录然后执行相反的操作?Oracle 在 10g 或 11g 中是否有任何类似的功能?
提前致谢,
凯尔
我的一个查询遇到了行锁争用。我已经找到了导致这种情况的表 - 那么下一步是什么?哪个会话导致此表被锁定?如何解除锁定?
我正在使用 Oracle 10g
我试图让我的审计文件更易于阅读,我将审计跟踪配置为 xml,扩展。问题是,如果我的服务器忙碌并重复使用 pids - 日志将被附加到同一个文件中。
我知道如果审计文件已经存在,有一种方法可以创建一个带有后缀的新文件。我怎样才能做到这一点?我使用 Oracle 10.0.4.0
我的一个(Oracle 10g)表随着时间的推移增长到大约 8.4 亿行。其上的一个索引 (DATE, NUMBER(38)) 目前占用 38GB。我想更改索引(例如,我认为它可以很好地利用 COMPRESS)但它因与 TEMP 已满相关的错误而失败 - 目前为 4GB。
有没有办法建立一个大于 TEMP 的索引?我意识到我可以导出表,截断它,创建新的和有趣的索引,然后重新加载,但这超出了我的承受能力......
我想通过 sqlplus 使用文本文件中提供的所有参数向 Oracle 发出参数化。有没有办法做到这一点?该查询包含的参数超出了提示人员的合理范围,我们希望在为此输入参数时消除用户错误。
我们需要发出参数化查询的原因是,我们看到直接 sql 语句和在我们的应用程序中作为参数化查询发出的相同查询之间的性能存在巨大差异。我们希望从链中删除任何应用程序代码,并且仅使用 Oracle 工具就可以明显看出差异。
对检查表的记录上次更新、修改或删除时间的一些研究使我找到了称为 ora_rowscn 的伪列。
首先,我这样做:
select max(ora_rowscn) from tablename;
我记下了这个数字。然后我执行插入、更新和删除,检查每个之前和之后的最大值。它似乎随着每种类型的变化而增加。
如果您想知道我为什么要这样做,我们会在 C# windows 服务中缓存实体列表。此服务在两个负载平衡的服务器上运行,因此每个服务器都有一个单独的实例运行。当服务器 A 上发生更新时,服务器 B 需要知道它。我想要做的是将 max(ora_rowscn) 缓存到一个变量中。每次我们的应用程序插入、更新或删除一条记录时,它都会从数据库中获得一个新的最大值。如果值不同,那么它显然知道它需要从数据库中获取一个新列表。
所以我的实际问题是:是否还有其他我应该注意的问题可能会导致插入、更新或删除记录而不增加该值?
编辑:有人可以添加ora_rowscn为标签吗?
我将 9i 安装升级到 11g,只有一个问题。不再支持 11g 和我们的旧版 8i 数据库之间的数据库链接。我必须每天将数据从 11g 传输到 8i 两三次,所以我认为可以使用 10g express 来链接数据库。数据将在 11g 中创建,写入 10g 中的表,然后写入 8i。(我同意这不是最优雅的解决方案,我可以使用高级队列表改进它)。
10g express 是否支持数据库链接到 Oracle 8i?
编辑:感谢提供 Oracle 文档的链接。有没有人真的用 10g express 做过这个?
编辑:8i 数据库是 Oracle8i 企业版 8.1.7.0.0 版 - 生产中间将是 windows 的 10g express 原始数据库是 Oracle 数据库 11g 企业版 11.2.0.1.0 版 - 生产
在 Oracle 中,数据文件是存储实际数据的系统文件。数据文件的集合构成表空间,最后,数据库是表空间的集合。
如果我对数据文件、表空间和数据库的概念有误,请纠正我。
我想详细了解Schema 和 Database 之间的区别。关于这种差异,在线资源很有帮助,但似乎令人困惑。
我正在使用 Oracle 数据库 10g。有一个包含有关客户信息的表格:
+----+------+---------------------+
| id | name | registered_at |
+----+------+---------------------+
| 1 | Ivan | 2016/08/01 15:09:01 |
| 2 | Alex | 2016/08/01 16:30:21 |
| 3 | John | 2016/08/01 16:31:05 |
| 4 | Hugo | 2016/08/01 15:08:00 |
| 5 | Anna | 2016/08/01 15:42:23 |
+----+------+---------------------+
Run Code Online (Sandbox Code Playgroud)
如何按regitered_at给定间隔(以分钟为单位)按列计算记录?
例如:间隔 = 10 分钟,日期时间范围从2016/08/01 15:00:00到2016/08/01 17:00:00. 结果应该是这样的:
+---------------------+---------------------+-----+
| start_ | end_ | cnt |
+---------------------+---------------------+-----+
| 2016/08/01 15:00:00 …Run Code Online (Sandbox Code Playgroud)