六、常见问题处理方法
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
sessionwhereprogramlike′b判断锁的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 目录下文件清一下,否则会引起监听无法启动。