linux下有两个账号,一个A,一个B。在A账号下登录到相应的数据库账号下执行
exec dbms_mview.refresh('xx');完全没问题。
但是在B账号下执行上面的那个命令就会出现如下错误!
第 1 行出现错误:
ORA-01861: 文字与格式字符串不匹配 ORA-06512:
在 "SYS.DBMS_SNAPSHOT", line 2558
ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2771
ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2740
ORA-06512: 在 line 1
奇怪!说文字与格式字符串不匹配。晕了
从数据库中通过dba_object视图查出dbms_mview是dbms_snapshot的同义词,然后我通过dba_source查dbms_snapshot包的定义,结果查出一堆加密字符。无语!!
后来实在查不出问题,就去网上搜,终于找到类似问题,说是dbms_snapshot包中定义的时间格式与系统的时间格式不一致导致的。随后我在B账号下登录到相应账号的数据库账号下使用alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'语句之后,再次执行刷新语句,结果ok。可是我总不能每次都执行这个session语句吧。联想到这个时间格式适合字符集是有关的。于是我到B账号下查看其环境变量,发现如下设置:
LANG="en_US.utf8"
NLS_LANG="Simplified chinese_china.al32utf8"
而A账号下
NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
看来根本原因是由于字符集不同导致的。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16566331/viewspace-682018/ ,如需转载,请注明出处,否则将追究法律责任。