分类目录归档:技术

从搜索ORA-21561对比博客写作方法

前段时间做全文检索的时候,需要使用到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都做了详细的说明,其实要做到这样才能成为永久被保存的项

 

CentOS 6.2图形界面和命令行调整方法

经常用到需要将图形界面调整到命令行界面的时候,对于大部分linux系统来说,只需要修改以下配置

  1. vi /etc/inittab
  2. 找到id:5:initdefault:
  3. 将其中的5改成3,保存退出
  4. reboot

重启后即可进入命令行,如果想再次进入图形界面可以使用

  • startx
如果后悔了,想每次都进入图形界面则:
  1. vi /etc/inittab
  2. 找到id:3:initdefault:
  3. 将其中的3改成5,保存退出
  4. reboot

另外查看当前release的版本,如:我当前是CentOS,但我不知道具体的版本号可以用以下命令

  • lsb_release -a
  • cat /etc/redhat-release

想查看我linux内核的版本以及我系统版本是32位系统还是64位系统,可以使用以下命令

  • uname -a

以下命令有待验证:

  • ctrl+alt+1 …… ctrl+alt+6一共六个控制台可以切换,由于我安装虚拟机,ctrl + alt跟虚拟软件有冲突,所以没实验成功

OCA证书

很惊奇会先下来OCA的证书,突然收到ORACLE发来的一封邮件,说让我下载OCA证书。但我的目标是OCP,所以目前还不清楚这张证书是否需要申请他们发送过来,我彩打了一下,跟真的证书差不多,然后再这里保存个备份吧
文件名:oca证书.pdf, 访问地址:http://www.kuaipan.cn/file/id_27168653149473662.htm

 mac快捷键介绍

今天在苹果店学会了一招,看下面这张图,其中最复杂的就是“关闭所有窗口”的命令,对应windows里面的alt+shift+command+w

另外,定位浏览器地址栏的快捷键是command+l,切换输入法的快捷键是command+space;ctrl + space可以调出Splotlight,可以在里面查找自己需要的应用程序

当然还有两指,三指,四指,五指的操作,退出程序的快捷键是command+q

全屏快捷键:ctrl + command + f;ctrl的符号是^

Use of undefined constant OCI_COMMIT_ON_SUCCESS – assumed ‘OCI_COMMIT_ON_SUCCESS’

安装完wampServer,然后勾选了oci8.dll,codeigniter还是不能启动,报错Use of undefined constant OCI_COMMIT_ON_SUCCESS – assumed ‘OCI_COMMIT_ON_SUCCESS’,如下图

image

使用oci_connect方法的时候会报找不到这个方法的错误

image

在默认环境变量里面能找到如下dll

image

有如下解决方法(三选一)

  1. 下载并Oracle客户端,Oracle会自动在path里面加入D:\app\niehonglei\product\11.2.0\client_1\bin;
  2. 下载instantclient,然后在path里面把instantclient路径加进去;
  3. 下载instantclient,将其中的dll拷贝到C:\Windows\System32目录里面;

coreseek安装小结

1、按官方的标准安装,我的系统是CentOS(64位),默认安装了Python 2.6.6,如果没有安装还需要先安装Python 2.6.6,版本不要错;官方安装地址:http://www.coreseek.cn/products-install/install_on_bsd_linux/ 安装时注意在./config的时候加上对python的支持,因为我们要使用的是Oracle数据源

clipboard

相关代码:

$ cd csft-3.2.14
$ ./configure –prefix=/usr/local/coreseek  –without-unixodbc –with-mmseg –with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ –with-mmseg-libs=/usr/local/mmseg3/lib/ –with-python
$ make && make install

2、安装cx_Oracle:下载cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm

执行安装包
rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm

3、下载安装instantclient-basic-linux.x64-11.2.0.3.0.zip,我下载的是zip包,当然我认为也可以下载rpm包,而且不需要自己配置会更合适一些

4、打开~下的.bash_profile,添加下面两句(如果下载的rpm包,则不需要做如下操作

增加以下两行代码
LD_LIBRARY_PATH=/root/instantclient_11_2;
export LD_LIBRARY_PATH

5、在python下测试import cx_Oracle,如没有报错,则说明python连接oracle已经没有错误了

6、配置csft的config文件/root/coreseek-3.2.14/testpack/etc/csft_demo_python_pyoracle.conf

文件如下:
python
{
path = /root/coreseek-3.2.14/testpack/etc/pysource
path = /root/coreseek-3.2.14/testpack/etc/pysource/csft_demo_pyoracle
}
#源定义
source python_oracle
{
type = python
name = csft_demo_pyoracle.MainSource
}
#index定义
index python_oracle
{
source            = python_oracle
path            = /root/coreseek-3.2.14/testpack/var/data/python_oracle
docinfo            = extern
mlock            = 0
morphology        = none
min_word_len        = 1
html_strip                = 0
#中文分词配置,详情请查看:
http://www.coreseek.cn/products-install/coreseek_mmseg/
    charset_dictpath = /usr/local/mmseg3/etc/
charset_type        = zh_cn.utf-8
}
#全局index定义
indexer
{
mem_limit            = 128M
}
#searchd服务定义
searchd
{
listen                  =   9312
read_timeout        = 5
max_children        = 30
max_matches            = 1000
seamless_rotate        = 0
preopen_indexes        = 0
unlink_old            = 1
pid_file = /root/coreseek-3.2.14/testpack/var/log/searchd_python_oracle.pid
log = /root/coreseek-3.2.14/testpack/var/log/searchd_python_oracle.log
query_log = /root/coreseek-3.2.14/testpack/var/log/query_python_oracle.log
}

7、设置/root/coreseek-3.2.14/testpack/etc/pysource/csft_demo_pyoracle/__init__.py,

文件内容如下
# -*- coding:utf-8 -*-

from os import path
import os
os.environ[‘NLS_LANG’] = ‘SIMPLIFIED CHINESE_CHINA.UTF8’
import sys
import cx_Oracle

class MainSource(object):
def __init__(self, conf):
self.conf =  conf
self.idx = 0
self.data = []
self.conn = None
self.cur = None

    def GetScheme(self):  #获取结构,docid、文本、整数
return [
(‘id’ , {‘docid’:True, } ),
(‘title’, { ‘type’:’text’} ),
(‘abstract’, { ‘type’:’text’} ),
(‘search_type’, {‘type’:’integer’} ),
]
def GetFieldOrder(self): #字段的优先顺序
return [(‘title’, ‘abstract’)]

def Connected(self):   #如果是数据库,则在此处做数据库连接
if self.conn==None:
self.conn = cx_Oracle.connect(‘yzjs/a123456@10.166.166.222/genome’)
self.cur = self.conn.cursor()
sql = ‘SELECT t.id as id, t.title, t.abstract, t.search_type as search_type from V_SPHINX_INDEX t where t.title is not null and t.abstract is not null’
self.cur.execute(sql)
for rows in self.cur:
item = []
item.append(rows[0])
item.append(rows[1])
item.append(rows[2].read())
item.append(rows[3])
self.data.append(item)
pass

    def NextDocument(self):   #取得每一个文档记录的调用
if self.idx < len(self.data):
item = self.data[self.idx]
self.docid = self.id = item[0] #’docid’:True
self.title = item[1]#.decode(“GBK”).encode(“UTF-8”)
self.abstract = item[2]#.decode(“GBK”).encode(“UTF-8”)
self.search_type = item[3]
self.idx += 1
return True
else:
return False

if __name__ == “__main__”:    #直接访问演示部分
conf = {}
source = MainSource(conf)
source.Connected()
while source.NextDocument():
print “id=%d, subject=%s” % (source.id, source.abstract)#.decode(“UTF-8”))
pass
#eof

8、然后根据下面三段脚本,可以方便索引,启动,热索引数据

索引
/usr/local/coreseek/bin/indexer -c /root/coreseek-3.2.14/testpack/etc/csft_demo_python_pyoracle.conf –all
启动
/usr/local/coreseek/bin/searchd -c /root/coreseek-3.2.14/testpack/etc/csft_demo_python_pyoracle.conf
停止
/usr/local/coreseek/bin/searchd -c /root/coreseek-3.2.14/testpack/etc/csft_demo_python_pyoracle.conf –stop
重编译
/usr/local/coreseek/bin/indexer -c  /root/coreseek-3.2.14/testpack/etc/csft_demo_python_pyoracle.conf –all –rotate

 

9、引入sphinxapi.php,写如下代码测试

$cl = new SphinxClient ();
$cl -> SetServer ( ‘192.168.42.148’, 9312);
$cl -> SetConnectTimeout ( 3 );
$cl -> SetArrayResult ( true );
$cl -> SetMatchMode ( SPH_MATCH_ANY);
$data[‘res’] = $res = $cl -> Query ( $keyword, ‘*’ );

xmapp proftpd新建用户

很简单的事情让我找了好长时间,

1、修改iptable,开放21端口vi /etc/sysconfig/iptables,重启iptables服务,/etc/init.d/iptables restart

image

2、使用/opt/lampp/etc/proftpd.conf中的UserPassword字段定义用户名和密码,密码可以到http://www.kxs.net/support/htaccess_pw.html生成,然后拷贝到这里;其实上面的注释已经写的很清楚了,默认密码是lampp,如果想自己设置密码的话也可以使用lampp security

image

image

4、重启lampp,/opt/lampp/lampp restart

5、使用这个账户登录

image

这样更新wordpress就不需要再手动更新了

wordpress弹出图片插件

主题更新后,将下面的代码粘贴到header.php的head的最后,更改弹出图片的效果

<script type=’text/javascript’ src=’https://www.niehonglei.info/wp-includes/js/jquery.popImage/jquery.popImage.mini.js’></script>
<script type=”text/javascript”>

jQuery(function(){
jQuery(“#primary a img”).parent().popImage();
});
</script>

codeigniter mysql php相关总结

开发lcwy这个项目,项目地址:http://lcwy.tohours.com,学习了不少php相关知识,做了如下总结:

  1. <?php require_once(“application/views/script/split_page.php”);?> 引用相关php文件
  2. 先$sql = $sql.” order by t.insert_time desc”; 后$sql = $sql.” limit “.$offset.”,”.$limit;
  3. mysql的 $offset 从0开始
  4. $this -> input -> cookie();可以取得相应的cookie
  5. foreach($_POST as $key => $value) 数组的遍历方法
  6. 查询方法 $this -> db -> where(array(“condition” => “value”)) -> order_by() -> get(“table_name”) -> result(); 取得对象的数组
  7. 也可使用 -> row()方法取得第一行的数据 (替换-> get() –> result())
  8. 也可使用 -> count_all_results()计算数据的条数,而不得到数据 (替换-> get() –> result())
  9. sql查询方法 $this -> db -> query($sql, $param) -> result();后面能接的方法与上面相同
  10. 更新方法$this -> db -> where(“id”, $id) -> update(“user”,$user);
  11. 字符串替换方法 str_replace(“world”,”earth”,”Hello world!”); //Hello earth!
  12. 正则替换方法 preg_replace(“/^[0-9]{4}/”, “”, $year); 其中正则也是以/开头和结尾
  13. 计算数据长度使用count(数组名称)
  14. 数字转字符 字符转数字函数 echo chr(65);echo ord(“B”);
  15. echo strpos(“Hello world!”,”wo”)
  16. 输出$this -> output -> set_output(encode_json($json));
  17. explode(“,”, $ids); split功能
  18. $data[“clear_time”] = null;//将数据库时间置空
  19. date_default_timezone_set(‘PRC’);在使用time时预先设置