oracle常见问题处理方法

六、常见问题处理方法
1.oracle10g11g在group by的时候sum结果有问题!!!
解决方法修改隐藏参数“_gby_hash_aggregation_enabled”
SQL> alter system set “_gby_hash_aggregation_enabled”=false scope=spfile;

查看参数是否修改的方法:
首先重启数据库
–conn /as sysdba
select a.ksppinm,b.ksppstvl,b.ksppstdvl,b.ksppstdf
from X K S P P I a , X KSPPI a, X KSPPIa,XKSPPCV b
where a.indx = b.indx
and ksppinm like ‘%_gby_hash_aggregation_enabled%’;

正常结果为:_gby_hash_aggregation_enabled FALSE FALSE FALSE

2.在win10装oracle报错“程序异常终止”“未知”
报错如下

解决方法:
右键以管理员运行,右键选择兼容性 兼容xp。

3.Oracle SQLPLUS提示符设置方法
编辑ORACLE_HOME/sqlplus/admin目录下的glogin.sql(C:\app\ORACLE\product\12.1.0\dbhome_1\sqlplus\admin)文件最后加如下一行,就可以为所有SQL*Plus会话自动设置SQL提示符,永久有效.
set sqlprompt _user’@'_connect_identifier>

4.在securecrt中linux中文乱码
解决方法1,在终端/外观/字符编码,选择UTF-8

方法2:临时更换语言
如果只是临时更换linux系统的语言环境,可以通过输入设置 LANG=语言名称, 如中文是 
Zn_CN.UTF-8(注意我这里本来就是中文的,我临时设置为英文
#LANG=“en_US.UTF-8”

5.Sqlplus登录报错ORA-01075 you are currently logged on
使用sqlplus / as sysdba登录时报错
ORA-01075: you are currently logged on
解决方法
为了快速登录oracle,好迅速启动oracle,这里提供一种超暴力的方法
1.使用Linux的kill命令杀死所有与oracle有关的进程
$ ps -ef |grep $ORACLE_SID|grep -v grep|awk ‘{print $2}’ | xargs kill -9
2.使用Linux的ipcs和ipcsrm命令释放oracle占用的共享内存
$ ipcs -m | grep oracle | awk ‘{print $2}’ | xargs ipcrm shm

6.建立物化视图报错
ORA-12018 和 ORA-00942
解决方法:grant select any table to 物化视图的用户。
ora-12060
解决方法:检查两个表的所有字段精度要求一致。
ORA-01031: insufficient privileges
解决方法:grant create any table to 物化视图的用户
7.ora-01591锁被未决分布式事务处理持有
ora-01591锁被未决分布式事务处理44.28.53164持有
2020-10-26
在朝批总部数据库cpzb2018,执行查询语句报错,
ora-01591锁被未决分布式事务处理44.28.53164持有

解决方法:
1.查询视图,得到local_tran_id 44.28.53164
select * from dba_2pc_neighbors;
2.回退事务
rollback force ’ 44.28.53164’;

8.Library Cache Lock的解决
a检查等待事件 select event from gv s e s s i o n w h e r e p r o g r a m l i k e ′ b 判断锁的 s e l e c t s i d , p . s p i d , n . u s e r n a m e , n . c l i e n t i n f o , n . t e r m i n a l , n . p r o g r a m , p a d d r , m a c h i n e , n . s q l i d f r o m g v session where program like '%exp%';得出结果library cache lock; b判断锁的 select sid,p.spid,n.username,n.client_info,n.terminal,n.program,paddr,machine,n.sql_id from gv sessionwhereprogramlikeb判断锁的selectsid,p.spid,n.username,n.clientinfo,n.terminal,n.program,paddr,machine,n.sqlidfromgvsession n ,gv p r o c e s s p w h e r e n . s a d d r i n ( s e l e c t k g l l k s e s f r o m x process p where n.saddr in ( select kgllkses from x processpwheren.saddrin(selectkgllksesfromxkgllk lock_a
where kgllkreq = 0
and exists (select lock_b.kgllkhdl from x k g l l k l o c k b w h e r e k g l l k s e s I n ( S e l e c t a . s a d d r F r o m g v kgllk lock_b where kgllkses In (Select a.saddr From gv kgllklockbwherekgllksesIn(Selecta.saddrFromgvsession a Where Sid In
(select Sid from gv$session_wait a Where event = ‘library cache lock’)
)
and lock_a.kgllkhdl = lock_b.kgllkhdl
and kgllkreq > 0))
And p.addr =n.paddr;

c杀死会话,根据第2步得出的操作系统进程spid,kill -9 spid
9.在windows上安装oracle11g报错INS-30131

解决方案:(验证成功解决)
称为在windows系统安装的 oracle bug吧:
针对客户端安装,在cmd中执行命令:
前面加实际路径setup.exe -ignorePrereq -J"-Doracle.install.client.validate.clientSupportedOSCheck=false" 
针对服务端安装,在cmd中执行命令:
前面加实际路径setup.exe -ignorePrereq -J"-Doracle.install.db.validate.supportedOSCheck=false"
这样的办法,简单粗暴,但是有时候很有效。

10.集群监听无法启动
问题原因:监听的日志文件太多了,文件夹满了,无法写入。
解决方法:删除一些日志文件。
文件目录/u01/app/11.2/grid/log/cprac1/client
删除文件rm clsc*.log
七、其它
1.常用数据字典
DBA_TAB_PRIVS :授权视图
DBA_DEPENDENCIES :依赖关系视图

2.授给用户sysasm权限

把 /u01/app/11.2/grid/log/cprac1/client 目录下文件清一下,否则会引起监听无法启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值