前段时间做全文检索的时候,需要使用到python连接oracle数据库,测试机上已经没有什么问题,但部署到服务器的时候产生了一个错误ORA-21561,于是我进行了艰苦的搜索工作……
当然,谷歌会以中文的为主,基本上,如果中文也有答案的话且不是特定查询(指查facebook, cnn这种比较明确的查询),基本上第一条都是中文,查询ORA-21561,得出第一条结果地址是http://www.itpub.net/thread-865749-1-1.html;再看我认为比较负责任的外国博客的答案:http://chaos667.tumblr.com/post/20006357466/ora-21561-and-oracle-instant-client-11-2;对比两者,因为itpub是以论坛的形式发出来的,所以提问者只要自己的问题能解决就可以了,不考虑过多的描述;但也给我们造成了极大的困惑,其描述如下:
今天遇到个奇怪的问题,用SQLPLUS登陆数据库的时候,总提示我:ORA-21561: OID generation failed ,然后就通知我密码不对,但我用PL/SQL是可以进到数据库里,查了半天,竟然是/etc/hosts文件里有配置ip地址和机器名,由于机器名被改,这里也一定要改掉机器名!特发此贴,以资共享!
当然,作为已经解决问题的人,我来看这段话也并没有什么难以理解的地方。但当时我确不理解,可能是限于自己的学识有限,我不能明白hosts和机器名的关系,因为我一直使用windows,我知道 127.0.0.1 可以使用localhost代替,也可以设置其他的名称指向其他的地址,如我们谷歌就是使用hosts代理。按我的理解,hosts只有两列,第一列是ip,第二列就类似于域名一样的东西。现在我们从ORA-21561得出的问题是我连接数据库服务器有问题,由于我的连接串是这样写的:’yzjs/111111@192.168.1.3/genome’,其中并没有涉及到需要hosts解析的地方,即使有解析出问题也应该是当我将ip地址用机器名的时候才出现问题,而那时也应该是要填写对方的机器名和ip到我机器的hosts里面。况且,我也不明白他说要把我机器名加入到hosts具体应该怎么样操作,所以想到这里,我只能将这条给忽略了,而接下来我看到大量都是这样的回答,几乎找不到第二种,直到我看到上述的英文网站;
这个英文博客网站的说明很清楚,你照我的1,2,3,4来做一遍,这个步骤写的非常详细,即使一个不懂电脑的人也会按照这样的流程做一遍,按照这样的说法做了一遍,结果成功了!而又让我了解到了,原来hosts可以有三列,第三列是主机的别名,局域网内使用,而我的问题就出在第三个参数的设置上,由于网络管理员将安装完的机器修改了主机名,但在hosts里的别名却不会更新,造成本机的机器名和hosts的别名不一致,传递过去的信息不一致被而被退回了!而这篇文章从如果查机器名到如何个性hosts都做了详细的说明,其实要做到这样才能成为永久被保存的项