dmR是为在Linux下使用R语言进行达梦数据库操作、兼容ROracle接口的R语言工具包
| R版本 | DBI版本 | dmR版本 |
|---|---|---|
| 3.3.0 + | 1.0.0 + | 1.2.0 + |
- 连接达梦数据库
- 执行SQL语句
dmR包(RDameng包)在安装使用前源码目录下文件需要经过设置,然后打包使用。
安装R与DBI。
获取dmR源码,需要确认configure文件具有执行权限,如果configure不具备执行权限,需要在打包前设置,执行权限设置完成后打包成压缩包,该压缩包才是安装包,例如:
unzip dmR-1.2.0.zip
mv dmR-1.2.0 RDameng
cd RDameng/
chmod +x configure
chmod +x cleanup
cd ..
tar -zcvf RDameng-1.2.0.tar.gz RDamengRDameng包安装有两种方式,可以根据情况自由选择安装方式。
在运行安装命令前,首要的准备工作是设置LD_LIBRARY_PATH包含libdmdci.so路径,例如当libdmdci.so在路径/path/to/libdmdci下时,运行命令:
export LD_LIBRARY_PATH=/path/to/libdmdci:$LD_LIBRARY_PATH或者
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/libdmdci通过设置环境变量DM_HOME进行编译。
设置环境变量$DM_HOME用于编译,例如DM_HOME=/opt/dmdbms时,文件结构即包含内容要求的示例如下:
/opt/dmdbms
├── include
│ ├── DCI1.h
│ └── DCI.h
├── bin
│ └── libdmdci.so设置DM_HOME环境变量,示例如下:
export DM_HOME=/opt/dmdbms设置DM_HOME后,可运行以下安装命令:
R CMD INSTALL /path/to/RDameng-1.2.0.tar.gz通过设置--configure-args编译参数--with-dci-lib和--with-dci-inc进行编译。
--with-dci-lib需要指定包含libdmdci.so的绝对路径,--with-dci-inc需要指定包含头文件DCI.h和DCI1.h的绝对路径,文件结构示例:
Directory
├── dci_inc
│ ├── DCI1.h
│ └── DCI.h
├── dci_libs
│ └── libdmdci.so确认libdmdci.so和头文件准备完毕后,再运行设置--configure-args编译参数方式的 RDameng 安装命令,示例如下:
R CMD INSTALL --configure-args='--with-dci-lib=/path/to/dci_libs --with-dci-inc=/path/to/dci_inc' /path/to/RDameng-1.2.0.tar.gz运行安装命令后,看到如下信息即表示安装成功:
*** installing help indices
** building package indices
** testing if installed package can be loaded
\* DONE (RDameng)检查 RDameng 是否成功安装,如下所示:
library(DBI)
library(RDameng)若安装成功,llibrary(RDameng)加载后应无警告或异常信息,若出现如下信息:
package or namespace load failed for ‘RDameng’ in dyn.load(file, DLLpath = DLLpath, ...):
无法载入共享目标对象‘/path/to/R/R-3.x.x/library/RDameng/libs/RDameng.so’::
libdmdci.so: 无法打开共享对象文件: 没有那个文件或目录则需要检查 LD_LIBRARY_PATH 设置是否指定了 DM DCI 库(libdmdci.so)的位置,例如
echo $LD_LIBRARY_PATHlibdmdci.so可在达梦数据官网下载中心获取。
RDameng 包正确安装后,可运行如下 R 脚本,连接 DM 数据库,执行简单 SQL 语句,测试 RDameng 加载情况,脚本如下:
library(DBI)
library(RDameng)
dmdrv <- dbDriver("Dm")
#IP 地址
dmHost <-"127.0.0.1"
#数据库服务名称
dmServerName <- "DmServiceDMSERVER"
#用户名
dmUserName <-"SYSDBA"
#密码
dmPassword <-"Hust4400_DBA"
#拼写 TNS 字符串,达梦数据库默认端口 5236
dmconnect.string<-paste("(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=",dmHost,")(PORT=5236))(CO
NNECT_DATA=(SERVICE_NAME=", dmServerName, ")))", sep = "")
#连接达梦数据库
dmCon <- dbConnect(dmdrv,username = dmUserName, password = dmPassword,dbname = dmconnect.string )
#执行 SQL 语句
dbGetQuery(dmCon, paste("create table RTEST_TABLE(COLUMN_1 varchar2(50)) "))
dbGetQuery(dmCon, paste("insert into RTEST_TABLE values('Hello DM server') "))
dbGetQuery(dmCon, paste("select * from RTEST_TABLE ") )执行结果:
COLUMN_1
1 Hello DM server