注册
如何使用 Perl 语言操作达梦数据库(V8)

如何使用 Perl 语言操作达梦数据库(V8)

氢气球 2021/05/18 3951 11 2
摘要 本文详细介绍了使用 Perl 语言操作达梦数据库的原理及配置过程。

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 语言操作达梦数据库时,程序的调用顺序如下图所示:

1.1.png

1.2.png

下面我们来看看如何配置才能顺利地访问到达梦数据库。

一、安装必要的软件包

本次安装使用 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

安装截图一:

1.3.png

安装截图二:

1.4.png

二、配置 ODBC driver 和 ODBC driver manager

  • odbcinst 是 ODBC 的安装和卸载程序
    键入 odbcinst -h 命令,输出如下界面:

1.5.png
1.6.png

  • 修改驱动配置文件 odbcinst.ini,
    在文件的末尾添加达梦数据库 odbc 驱动所在的路径:
[DM8]
Description=ODBC DRIVER FOR DM8 
Driver=/dm/dbms/drivers/odbc/libdodbc.so
  • 配置系统数据源文件 odbc.ini
    这里的 Driver 后面的值必须和上面[]中的值保持一致
[dm] 
Description=dm8_odbc 
Driver=DM8 
Server=172.16.100.84 
UID=SYSDBA 
PWD=SYSDBA 
TCP_PORT=10236

使用如下命令检查系统数据源

odbcinst -q -s
  • 配置驱动声明文件 odbcinst.ini
    文件末尾添加如下内容
[DM8]
Description=ODBC DRIVER FOR DM8
Driver=/dm/dbms/drivers/odbc/libdodbc.so

检查 ODBC 驱动是否安装到位

odbcinst -q -d

配置完成后,进入 dmdba 用户,执行如下命令,有下图中的输出则表明配置成功

1.7.png

这里需要配置好环境变量 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-ODBC 驱动

达梦数据库没有提供原生的 DBD Driver,只能通过使用 DBD ODBC Driver,通过配置好的 ODBC 数据源连接达梦数据库。

  • 显示所有 DBI 所了解的驱动和对应的版本
perl -MDBI -e 'DBI-> installed_versions;'
  • 下载 DBD-ODBC 驱动并解压
tar -xzvf DBD-ODBC-1.61.tar.gz
  • 安装 DBD-ODBC 驱动
perl Makefile.PL 

make

make install

1.8.png

执行下面的命令查看所有支持的 DBD 驱动

perl -MDBI -e 'DBI-> installed_versions;'

1.9.png

  • DBD::ODBC 支持的 ODBC 连接语法
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";
}
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服