linux下如何用perl连接oracle数据库
1.安装dbi,就是database interface,通用的。有for mysql,for oracle,for sybase的。
perl -MCPAN -e shell
cpan-> install DBI;
cpan-> install DBI;
如果装不上,得从源代码安装
wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.605.tar.gz
tar -xzvf DBI-1.605.tar.gz;cd DBI-1.605
perl Makefile.PL
make
make install
tar -xzvf DBI-1.605.tar.gz;cd DBI-1.605
perl Makefile.PL
make
make install
2.安装dbd-oracle之前服务器上必须安装oracle软件或oralce客户端软件,并配置好tnsnames
wget http://search.cpan.org/CPAN/authors/id/P/PY/PYTHIAN/DBD-Oracle-1.21.tar.gz
tar -xzvf DBD-Oracle-1.21.tar.gz;cd DBD-Oracle-1.21
export LD_LIBRARY_PATH=/opt/oracle/product/10.2.0/db_64/lib
perl Makefile.pl -r=build64
make
make install
tar -xzvf DBD-Oracle-1.21.tar.gz;cd DBD-Oracle-1.21
export LD_LIBRARY_PATH=/opt/oracle/product/10.2.0/db_64/lib
perl Makefile.pl -r=build64
make
make install
修改tnsnames.ora,加入需要连接的oracle数据库
ABCDE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = XX.XX.XX.XX)(PORT = 2521))
)
(CONNECT_DATA =
(SERVICE_NAME = abcde)
)
)
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = XX.XX.XX.XX)(PORT = 2521))
)
(CONNECT_DATA =
(SERVICE_NAME = abcde)
)
)
3.先用sqlplus测试确认是否能连接,再通过perl程序连接测试.
下面是我用的函数,通过perl写数据库,主要是用来通过手机短信监控服务器的,将短信内容写入到sp提供商提供的数据库接口就可以将报警信息发送出去,使用就类似于这样:
SendMessage("警告:系统负载异常!!From ABCDE(xx.xx.xx.xx)");
sub SendMessage
{
$db = "ABCDE";
$db_name = "abc";
$db_pw = "asdfsadfasd";
$message = "$_[0]";
$phone = "13512312323";
$dbh = DBI->connect("dbi:Oracle:$db","$db_name","$db_pw") or die("DB connect error!n");
$sql = "insert into sms_send_message(phone,content)values('${phone}','${message}')";
$sth = $dbh->prepare($sql);
$sth->execute() or die("error!");
$sth->finish;
$dbh->disconnect();
return;
}
{
$db = "ABCDE";
$db_name = "abc";
$db_pw = "asdfsadfasd";
$message = "$_[0]";
$phone = "13512312323";
$dbh = DBI->connect("dbi:Oracle:$db","$db_name","$db_pw") or die("DB connect error!n");
$sql = "insert into sms_send_message(phone,content)values('${phone}','${message}')";
$sth = $dbh->prepare($sql);
$sth->execute() or die("error!");
$sth->finish;
$dbh->disconnect();
return;
}
Sorry, comments for this entry are closed at this time.