上周问答集萃(12月20日-12月26日)
由于目前问答平台问题较多,问答集萃改为每周更新,并同时公布【采纳榜单】及【优秀提问者名单】。
我们定期从墨天轮问答平台上用户遇到的数据库问题中整理出一些常见问题和诊断总结,供大家参考学习,详细的诊断分析过程可以通过点击标题链接查看。
1、Oracle:用pl/sql导入,总是死机,这是什么原因?
解答: 如果是用plsql developer以复制粘贴的方式导入大量数据的话,界面可能会出现无响应,但这并不是死机,后台还是在运行的。另外,还要检查下是不是已经产生锁表的情况了(DarkAthena)
解答: 和工具的时间格式有关,第一个工具我好像使用的就是这个, 可以在工具-首选项-数据库-nls-查看日期格式。希望能帮助到你。(କ1900)
解答: 是的,在安装rac,执行节点向其他节点传输文件(如ORACLE_HOME下所有文件)用的免密传输,所以22端口应该是oracle写到程序里的,没看到什么地方可以修改,所以最好开通22端口(摸摸鱼)
4、 Oracle复制进程配置文件一直加handlecollisions参数,会不会影响一致性?
解答: 如果你需要加handlecollisions参数,进程才能起来,那说明,本身你这个数据已经不严格一致了,这个参数反而能有可能让你再次数据一致。(当然仅仅是有可能,数据是否一致还是需要使用ogg veridata比对或者通过手工比对)
可以查看官方文档reference -> How HANDLECOLLISIONS works解释。(你好我是李白)
5、OGG 源端表结构变动, 目标端没有变, 为什么复制进程没有停?
解答: 看是什么数据库版本以及ogg版本了
oracle到oracle 本来就不用停进程,支持的。
mysql到oracle,21c支持的。mysql最好是8
诸如此类等等。
oracle mysql到kafka,到hbase,到hdfs都不用停。(薛晓刚)
解答: 所谓最好的三星索引
1、过滤性好,能过滤掉较多的行
2、索引覆盖
3、SQL的排序也刚好是索引的排序
满足以上三点,就是最好的三星索引了。
但从你的SQL来看。1与3肯定不能同时满足了。
要么满足1,2, 要么满足2,3
但当底是排序对你这个SQL性能影响大还是过滤,这个要根据实际的数据来看。
你上面的索引就是以满足1,2来的。
不过如果建alter table table_name add index idx_dba(create_time,ware_code,customer_code,status_code);
也可以试试把 ware_code 放在最左试一试
alter table table_name add index idx_dba(ware_code,create_time,customer_code,status_code); 这样可以让过滤key 实现前两个字段过滤。(aisql)
7、oracle 10.2.0.4标准版中v$dataguard_stats适用吗?
解答: 那你是如何确认现在dg同步是正常的呢?alert log有输出media recover应用日志的信息吗?
用这个我sql查试试(摸摸鱼)
select process,status,sequence#,THREAD#,BLOCK# from v$managed_standby;
复制
解答: alter table 表名 engine=InnoDB是解决方案。
预防是id 自增,最好别删除。
表有分区,过期drop 分区。(薛晓刚)
解答:
create or replace trigger after update on EMP_A
for each row
declare
begin
if :old.updatetime <> :new.updatetime then
update EMP_b b
set b.updatetime = :new.updatetime
where b.empno = :new.empno;
end if;
end;
/
复制
需求不够完整,根据问题描述只能这么写,需要注意几个问题
要根据什么条件来更新数据?我这个例子是假定根据empno这个字段相等的
如果EMP_A表存在插入或者删除,是否要对EMP_b表进行同步操作?这个例子中只对update进行操作,不含insert和delete
updatetime是否存在空值?把空值更新成非空,此例也不会进行处理,除非修改判断条件nvl(:old.updatetime,date’1900-01-01’) <> nvl(:new.updatetime,date’1900-01-01’)
另外,你这个例子中两个表结构是完全一致的,目的是什么?说清楚背景,或许有更好的解决方案。(DarkAthena)
解答: 19c上不可以直接sqlplus test/”test@123“,在19c之前(11g,12c)都是可以的。
Mos文档 (Doc ID 2761789.1)针对这个有具体描述,原因是命中未发布的bug导致。
提供了两种解决方法:
1.交互式登录
2.sqlplus /nolog
conn test/”test@123“
另外oracle不推荐密码使用@字符,推荐的特殊字符:_ $ #(摸摸鱼)
墨力问答计划正在如火如荼进行中!
成为优秀提问者指南:https://www.modb.pro/db/105726
墨力问答计划:https://www.modb.pro/db/100800
本期“墨力问答计划”最佳提问者名单
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
用户昵称 | iPhone Mini | 蛋蛋。 | 红色 | yangweizhi | 沈西含 | 佳佳 | jackyimi | Amos |
本期“墨力问答计划”采纳榜单