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_id
7时才开始执行 FTS ,占所有行的 47%。
这是应该的方式吗?
我在具有两个节点的 RAC 环境中设置了 Oracle 11gR2。我设置了 SCAN,例如:我在 DNS 设置上有两个条目,因此我可以 ping SCAN 名称并到达任一节点。我也可以 ping 两个-vip
地址。
理论上,新的 SCAN 功能应该提供比透明应用程序故障转移 (TAF) 更好的功能,TAF 需要在每个客户端中进行额外配置。使用 SCAN,我可以连接到 SCAN 地址,我应该能够:
连接到数据库并检查我连接到哪个实例,例如(在 SQL*Plus 上):
select instance_name, host_name from v$instance;
Run Code Online (Sandbox Code Playgroud)关闭我连接到的实例shutdown abort
(在单独的会话中)
在我执行步骤 1 的同一个会话中,如果我重新运行相同的select
语句,它应该会自动跳到幸存的节点。
相反,我得到:
ORA-03113: end-of-file on communication channel
Process ID: XXXXX
Session ID: YYY Serial number: ZZ
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
注意:在第 2 步之后,我可以退出 SQL*Plus 并重新连接就好了。如果我试图留在同一个会话中,它就行不通。
如果我将客户端中的 tnsnames.ora 修改为:
RAC =
(DESCRIPTION =
(LOAD_BALANCE = YES)
(ADDRESS = (PROTOCOL = TCP)(HOST = cluster-scan)(PORT = …
Run Code Online (Sandbox Code Playgroud) 我在一堂 SQL 课上,讲师说“DBA 不喜欢用户创建视图,因为他们会破坏表空间”。
显然,我知道任何模式对象都会消耗一些表空间,但是说视图会占用表空间并不是夸大其词,因为您需要存储的只是一个查询(以及权限和一些其他元数据),并且因此,它们不会比普通表中的普通行占用更多的空间?