Category Archives: mysql oracle ldap

apache找不到mysql.dll

在windows xp下安装了apache和php, php能够正常工作。但不能用php连接mysql, 查看apache的error.log发现了:PHP Warning: PHP Startup: Unable to load dynamic library ‘C:/software/php-5.2/ext/php_mysql.dll’ – The specified module could not be found.\r\n in Unknown on line 0

赶紧查看配置文件吧:—– php.ini
extension_dir = “C:/software/php-5.2/ext/”
extension=php_mysql.dll
在C:/software/php-5.2/ext/明明有php_mysql.dll这个文件, 可它就是说找不到这个文件, 好奇怪,只好求助于谷哥吧
终于找到啦:
原来php_mysql.dll依赖于libmysql.dll这个文件, 而libmysql.dll又在C:/software/php-5.2/目录下, 而之前并没有把C:/software/php-5.2/加到环境变量里, 也没有把libmysql.dll放到C:\WINDOWS\system32目录下, 系统根本找不到php_mysql.dll, 所以出镜啦
解决方法:
1. 把libmysql.dll放到C:\WINDOWS\system32下。
2. 把PHP[我的就是:C:/software/php-5.2/]的路径加到环境变量里。 [这个没有测过, 因为本人用第一种方法试了,成功了, 所以就偷懒没试这个了]

perl DBI 事务支持

和其它的语言一样, perl DBI对数据库的操作也支持事务处理, 它的实现方式有两个:

一: 在连接数据库的时候就开始一个事务

$dbh = DBI->connect($dataSource, $user, $passwd, {AutoCommit => 0});

可以看到在连接的时候设置了AutoCommit为false, 也就是说当你对数据库进行更新操作的时候, 它不会自动地把那些更新直接写到数据库里, 而是要程序通过 $dbh->commit来使数据真正地写到数据库里, 或 $dbh->rollback 来回滚刚才的操作

二:通过$dbh->begin_work()语句来开始一个事务

这种方式就不需要在连接数据库的时候设置AutoCommit = 0了, 本人认为这种方式更好, 可以一次数据库连接进行多次事务操作, 不用每一次事务的开始都去连接一次数据库。

示例代码为:

$dbh = DBI->connect($dataSource, $user, $passwd, {RaiseError => 1});
$dbh->begin_work
eval {
foo(…) # do lots of work here
bar(…) # including inserts
baz(…) # and updates
$dbh->commit; # commit the changes if we get this far
};
if ($@) {
warn “Transaction aborted because $@”;
# now rollback to undo the incomplete changes
# but do it in an eval{} as it may also fail
$dbh->rollback;
}

openldap主从同步的艰难之路

最开始在虚拟机上装了个Redhat Enterprise linux 5系统(RHEL 5), 由于RHEL 5没有注册, 所以这个不能用在线安装的服务, 如yum命令,所以给安装openldap带来了好多麻烦, 安装了好久也没有成功,由于只是想学一下openldap的结构和原理, 不想在安装上花太多时间, 所以就安装了CentOS 5, 然后参照http://www.howtoforge.com/linux_openldap_setup_server_client很顺利地安装好了openldap, 花了些时间, 总算入门, 所以想玩点高级点的东东,因此想先玩玩主从同步,当然这必须得有两个服务器, 所以我把CentOS 5拷贝了一份, 然后用这个拷贝的新建了个虚拟机, 这样我想这两个CentOS肯定会是一模一样的了, 但这也带来些问题, 两个CentOS居然ip也一样了,而且它们都可以上网, 它们都是自动得到IP的, 不管怎么重起网络服务, 也还是一样的IP, 自己设定一个IP, 又不能上网, 这样就肯定不能搞主从同步了,没办法再把注意力转到RHEL5上来吧, 经过不懈的努力终于RHEL5上安装好了openldap, 于是把CentOS上的数据导入到了RHEL5上, 但主从同步又遇到了问题, 我按照官方网站(http://www.openldap.org/doc/admin24/replication.html#Configuring%20the%20different%20replication%20types)同步的第一种方法, 怎么也同步不了数据。用slapd -d 256启动主服务器, 发现在主服务器以收到了从服务器的同步请求, 但从服务就是接收不到更新的数据,现在也没找到是什么原因, 不知道是不是两个openldap版本不一样的原因, 因为CentOS上openldap版本是2.3.43 , 而RHEL5上的是2.4.16,由于第一种方法没有成功, 而且在网上好像也很难找到官方网站说的那些方法, 所以也没敢再去试其它的几种方法了, 去网上找找吧, 于是找到了这里http://blog.chinaunix.net/u2/65250/showart_1905561.html[这种方法在官方网站上并没有找到, 真是奇怪!]

我把CentOS当主服务器,slapd.conf配制如下:

replogfile /var/lib/ldap/openldap-master-replog
replica host=16.158.83.75:389
binddn=”cn=Manager, dc=my-domain,dc=com”
bindmethod=simple credentials=secret

RHEL5当从服务器 slapd.conf配制如下:

updatedn “cn=Manager, dc=my-domain,dc=com”

注:16.158.83.75为RHEL5IP

重启两个openldap, 在主服务器上修改了一个数据, 然后再到从服务器看了下, 发现终于成功从主服务器同步到了从服务器, 总算可以happy一下了,但同时还是存在一个问题, 按照http://blog.chinaunix.net/u2/65250/showart_1905561.html里说的: 在从服务器slapd.conf设置updateref 就可以把发送给从服务器的请求转发给主服务器, 我设置了并不行, 现在还不知道什么原因, 同时我也发现在我的slapd.conf里还有一个referral配制, 不知道referral和updateref有什么关系, 我的主要目的是实现主从同步, 这个目的已经实现, 至于其它的一些问题以后再去解决吧,如果哪位仁兄仁姐知道的话,给我留个言啊~~

—————————————————————–

关于referral 和updateref 在这里找到答案http://hi.baidu.com/%C4%C8%CE%F7%D0%A1%D1%FD/blog/item/c33475771337ef1eb051b981.html

1.1.7 referral
如果slapd没办法找到数据库的时候转到URI

1.3.10 updateref
仅对从库适用,设置从库一旦有改变,返回给client的URL。把改变转发给URI

—————————————————————–

oracle单引号和双引号的区别?

初学oracle,不知道oracle单引号和双引号的区别,如下面两条sql, 不知道为什么第二条不正确,先记下,希望能快点解决:

SQL> select ‘ab’ || ‘cd’ from dual;

‘AB’

—-

abcd

SQL> select “ab” || “cd” from dual;

select “ab” || “cd” from dual

*

第 1 行出现错误:

ORA-00904: “cd”: 标识符无效

打开Oracle 10g的企业管理器

对于Oracle 10g,在 开始/程序/oracle 里找不到”企业管理器”,  要打开”企业管理器”,可以通过浏览器打开,先在 oracle安装目录\db_1\install目录下的portlist.ini文件里找到相应的端口号,例如我的目录就是:C:\oracle\product\10.2.0\db_1\install,portlist.ini里的内容是:

iSQL*Plus HTTP 端口号 =5560

Enterprise Manager Console HTTP 端口 (orcl) = 1158

Enterprise Manager 代理端口 (orcl) = 3938

可以看到端口号为:1158,在浏览器里输入http://localhost:1158/em, 回车就可以打开企业管理器了。

当然用其它IP替换localhost也就可以打开相应的机器上的oracle企业管理器了。

之前不知道em代表什么,后来猜想应该是Enterprise Manager的简称,自己想的,不知道对不对,哈哈。