上周问答集萃(10月25日-10月31日)

由于目前问答平台问题较多,问答集萃改为每周更新,并同时公布【采纳榜单】及【优秀提问者名单】。
我们定期从墨天轮问答平台上用户遇到的数据库问题中整理出一些常见问题和诊断总结,供大家参考学习,详细的诊断分析过程可以通过点击标题链接查看。
解答: Description(文成)
If the optimizer_index_caching and optimizer_index_cost_adj parameters are
set to non-default values the optimizer may select a merge join cartesian
even if hints are specified for other joins. This can occur as CBO
costs the MERGE JOIN as if it was a nested loops without any keys and so
the parameters incorrectly affect the merge join costing.
Eg:
select /*+ use_hash (a) use_hash (b) use_hash (c) */
a.id
from look_up a
inner join look_up b on (a.id = b.id)
inner join look_up c on (b.id = c.id)
where a.text = 'aa'
and b.text = 'bb'
and c.text = 'cc'
^
| 0 | SELECT STATEMENT | | | | 6 |
| 1 | HASH JOIN | | 2 | 36 | 6 |
| 2 | INDEX RANGE SCAN | LOOK_UP_UK| 100 | 600 | 1 |
| 3 | MERGE JOIN CARTESIAN | | 20K | 234K | 4 |
| 4 | INDEX RANGE SCAN | LOOK_UP_UK| 2 | 12 | 1 |
| 5 | BUFFER SORT | | 10K | 59K | 3 |
| 6 | INDEX RANGE SCAN | LOOK_UP_UK| 10K | 59K | 1 |
Predicate Information:
----------------------
1 - access("B"."ID"="C"."ID" AND "A"."ID"="B"."ID")
2 - access("B"."TEXT"='bb')
4 - access("A"."TEXT"='aa')
6 - access("C"."TEXT"='cc')
Workaround
Set "_optimizer_mjc_enabled"=false;
2、Oracle存储过程无法编译,无法删除,只要编译或删除直接卡死无响应?
解答: https://www.modb.pro/db/40299
可以参考下这篇文章,找到blocking session,不影响业务的情况下,干掉阻塞源即可。
个人不建议使用v$access视图,生产环境下,这个视图太慢了。(王小那个鑫)
3、 用postgresql连续往一个表里执行4次insert语句,每次insert都要提交一次事务吗?
解答:
如果你的4次插入都是在一个会话中,最后一次提交就行。如果你是插入后退出在登录再插入这样是需要每次 commit 的。
如果你的 自动提交 是打开的,原则上则不需要提交,事务会自动提交的。
postgres=# \echo :AUTOCOMMIT
on
postgres=# \set AUTOCOMMIT off
postgres=# \echo :AUTOCOMMIT
off(JieKeXu)
4、 19C rac异机恢复到单机上CDB报错rman-07537错误。
解答: 找到原因了,原因是enable_pluggable_database参数值要设为true。(糖醋里脊)
5、ORACLE中的db_name,service_names,instance_name,oracle_sid,global_dbname对应关系。
解答: 个人感觉,不同场景使用不同的名字。
db_name,搭建DG时,备库的db_name要与主库一致,db_unique_name需要不同于主库;
instance_name,ps -ef |grep -i smon 看到的名称;
ORACLE_SID ,操作系统的环境变量,与instance_name保持一致;
service_name,服务名,监听的名字,dblink里可以用到;(trex)
6、Oracle 10g集群:做断网测试,拔掉a节点的网线,a的vip会先离线然后跑到b节点,接着a的监听离线,这个时候恢复网络,a节点的监听不会自己起来,是什么原因?
解答: 10g好像一直是这样手动的步骤
关闭vip1
$ crs_stop ora.db1.vip -f
再启动节点1的监听
$ crs_start ora.db1.LISTENER_DB1.lsnr -c db1(文成)
解答:
1.查备份日志
安装目录下,有个log。备份日志为dm_BAKRES_日期.log
里面有详细的备份日志。
2.查操作系统文件
如果知道备份路径的话去备份路径查。如果不知道备份路径的话去数据文件路径里面有个bak目录里面查看有没有备份文件。(阿毛)
解答: 主要看资源限制有没有要求?
1、用户级别的熔断,当SQL代码无法按照规范执行,达到阈值,则数据库将所有用这个用户的连接全部中断。防止影响到其他用户。无需其他支持
2、会话级别的熔断,当SQL代码无法按照规范执行,达到阈值,则数据库将这个会话的请求进行阻塞,防止影响到其他会话。需要PDB支持。
3、SQL级别的熔断(一个功能或者按钮),,当SQL代码无法按照规范执行,达到阈值,则数据库将这个SQL的请求进行自动优化、优化失败进行封存,防止影响到其他功能或者按钮。需要一体机支持。(薛晓刚)
解答:https://www.eygle.com/archives/2016/12/ora-01276_pluggable.html
可以参考一下,你的问题是windows 的文件路径是D:\,但是linux的路径是/root/xxx 估计是路径没有转换过来,你从这个思路看看怎么处理。(杨卓)
解答: 可以,但是要注意是否有dg,ogg等,dg,ogg是需要force logging的,此时no logging是无效的。(肖杰)
墨力问答计划正在如火如荼进行中!
成为优秀提问者指南:https://www.modb.pro/db/105726
墨力问答计划:https://www.modb.pro/db/100800
本期“墨力问答计划”最佳提问者名单

| 序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| 用户昵称 | iPhone Mini | 糖醋里脊 | 许肖肖 | 沈西含 | 刘广 | MacBookPro | 执戟郎 |
本期“墨力问答计划”采纳榜单





