学籍数据库前端php操作发生问题,错误如下:
OCIStmtExecute: ORA-02069: global_names parameter must be set to TRUE for this operation in….
检查以后发现操作的SQL语句如下:
insert into TMP_EALLYEAR_GZ@oracle1 (ID ,YEAR_NAME) VALUES (XXBJ_ID.nextval,2333)
通过dblink操作远程数据库中的语句中包含序列,先按照错误提示,发现本地oracle上global_name状态为false
sql> show paramater global_name;
google了一下,发现dblink的操作中如果包含序列必须将global_name设置为true;
sql> alter system set global_names=true;
修改之后前端PHP仍然报错,如下:
ORA-02085: database link ORACLE1.US.ORACLE.COM connects to ORACLE1
猜想可能是本地和远程的oracle中global_name不一致造成,查询两台oracle:
sql> select * from global_name;
果然不一致,准备都修改成一致的oracle1和oracle3:
sql> alter database rename global_name to oracle3;
修改之后看看改了没有:
sql> select * from global_name;
头晕,发现仍然是ORACLE3.US.ORACLE.COM,没变,没有办法,只好强制了。
切换sysdba用户登陆oracle3:
sql> update props$ set value$='oracle3' where name='GLOBAL_DB_NAME';
重启数据库之后没遇到什么问题,再查看global_name,已经变为oracle3,然后删除以前的dblink重新建立之后,前端php脚本终于正常了。
搞了两个小时,头昏眼花肚子咕咕叫,赶紧关灯走人填肚子去。。。