Perl 语言非常适合编写短小精悍的运维脚本,能帮助我们完成日常很多琐碎且重要的工作,其吉祥物是骆驼,取“虽不漂亮却任劳任怨、能干活”的含义。使用 Perl 语言编写的程序具备跨平台特性,并且吸取了C、sed、awk、shell scripting 以及很多其他程序语言的长处。现如今 Python、Go 等全栈语言大行其道,Perl 语言却鲜有人问津,个人认为简单即是美。
Perl 语言对数据库的操作是通过 DBI(Database Interface) 模块完成的。 DBI 模块可以理解为一个中间件,它通过 DBD(Database Dependent) 驱动,把高层的调用翻译成底层的数据库 API 调用。
常用的关系型数据库比如 Oracle、MySQL 和 SQL Server 都存在对应的 DBD 模块,可直接下载使用。达梦数据库并没有提供原生的 DBD 驱动包,但可以通过 ODBC 海纳百川——使用 DBD::ODBC 模块。
使用 Perl 语言操作达梦数据库时,程序的调用顺序如下图所示:
下面我们来看看如何配置才能顺利地访问到达梦数据库。
本次安装使用 Centos7.9 操作系统,自带有 Perl 语言解释器 v5.16。DBI 组件默认随 Perl 安装在系统上,无需特别关注。
常用的 Linux 发行版都自带 Perl 语言解释器,一般能满足使用,如果需要更高版本的 Perl 实现,也可自行下载部署。
yum install -y unixODBC.x86_64
yum install -y unixODBC-devel.x86_64
yum install -y perl-ExtUtils-MakeMaker
安装截图一:
安装截图二:
[DM8]
Description=ODBC DRIVER FOR DM8
Driver=/dm/dbms/drivers/odbc/libdodbc.so
[dm]
Description=dm8_odbc
Driver=DM8
Server=172.16.100.84
UID=SYSDBA
PWD=SYSDBA
TCP_PORT=10236
使用如下命令检查系统数据源
odbcinst -q -s
[DM8]
Description=ODBC DRIVER FOR DM8
Driver=/dm/dbms/drivers/odbc/libdodbc.so
检查 ODBC 驱动是否安装到位
odbcinst -q -d
配置完成后,进入 dmdba 用户,执行如下命令,有下图中的输出则表明配置成功
这里需要配置好环境变量 LD_LIBRARY_PATH,否则无法正常连接。
/dm/dbms/bin 是达梦数据库软件的安装目录。
[root@dm4 bin]export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm/dbms/bin
[root@dm4 bin]isql dm
达梦数据库没有提供原生的 DBD Driver,只能通过使用 DBD ODBC Driver,通过配置好的 ODBC 数据源连接达梦数据库。
perl -MDBI -e 'DBI-> installed_versions;'
tar -xzvf DBD-ODBC-1.61.tar.gz
perl Makefile.PL
make
make install
执行下面的命令查看所有支持的 DBD 驱动
perl -MDBI -e 'DBI-> installed_versions;'
dbi:ODBC:DSN=test; dbi:ODBC:DSN=test;UID=myusername;PWD=mypassword;
下面这段代码列出了可用的数据源
use strict;
use DBI;
my @dsns = DBI->data_sources('ODBC');
foreach my $d (@dsns)
{
print "$d\n";
}
测试能否正常操作数据库
use strict;
use DBI;
my $dbh = DBI-> connect('dbi:ODBC:dm', 'SYSDBA', 'SYSDBA') or die "Couldn't connect to database: " . DBI->errstr;;
if (!$dbh)
{
print "$DBI::err\n$DBI::errstr\n$DBI::state"; exit;
}
my $ctb_sql = q/CREATE TABLE test(id NUMBER, name varchar(12))/; my $result = $dbh->do($ctb_sql);
my $insert_sql = q/INSERT INTO test VALUES(888,'dameng')/;
$result = $dbh->do($insert_sql);
my $sel_sql = q/SELECT * FROM test/; my $sth = $dbh->prepare($sel_sql);
$sth->execute() or die "Couldn't execute statement: " . $sth->errstr;; while(my @arr = $sth->fetchrow_array) {
print "id: " . $arr[0] . "\n";
print "name: " . $arr[1] . "\n";
}
文章
阅读量
获赞