15.7.4 访问Oracle数据库
Oracle是最著名的数据库服务器软件。
要访问的数据库,
可以是安装在本机上的,
也可以是安装在网络上某个服务器中的。
如果是远程访问,
需要在本机安装Oracle的客户端软件。
假设已经在本机安装了Oracle服务器软件,
并设置orcl为本机安装的Oracle数据库软件或客户端软件定义的本地或远程Oracle数据库的标识,
test和oracle是此数据库的用户名和密码,
testtab是此数据库中的一个表。
为了在R中访问Oracle数据库服务器中的数据库,
在R中需要安装ROracle包。
这是一个源代码扩展包,
需要用户自己编译安装。
在MS Windows环境下,
需要安装R软件和RTools软件包(在CRAN网站的Windows版本软件下载栏目中)。
在MS Windows命令行窗口,用如下命令编译R的ROracle扩展包:
set OCI_LIB32=D:\oracle\product\10.2.0\db_1\bin
set OCI_INC=D:\oracle\product\10.2.0\db_1\oci\include
set PATH=D:\oracle\product\10.2.0\db_1\bin;C:\Rtools\bin;C:\Rtools\gcc-4.6.3\bin;"%PATH%"
C:\R\R-3.2.0\bin\i386\rcmd INSTALL ROracle_1.2-1.tar.gz
其中的前三个set命令设置了Oracle数据库程序或客户端程序链接库、头文件和可执行程序的位置,
第三个set命令还设置了RTools编译器的路径。
这些路径需要根据实际情况修改。
这里的设置是在本机运行的Oracle 10g服务器软件的情况。
最后一个命令编译ROracle扩展包,相应的rcmd程序路径需要改成自己的安装路径。
如果服务器在远程服务器上,
设远程服务器的数据库标识名为ORCL,
本机需要安装客户端Oracle instant client软件,
此客户端软件需要与服务器同版本号,
如instantclient-basic-win32-10.2.0.5.zip,
这个软件不需要安装,
只需要解压到一个目录如 C:\instantclient_10_2中。
在本机(以MS Windows操作系统为例)中,
双击系统,选择高级–环境变量,
增加如下三个环境变量:
NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
ORACLE_HOME = C:\instantclient_10_2
TNS_ADMIN = C:\instantclient_10_2
并在环境变量PATH的值的末尾增加Oracle客户端软件所在的目录 verb|C:\instantclient_10_2,
并与前面内容用分号分开。
然后,在client所在的目录 C:\instantclient_10_2 中增加如下内容的tnsnames.ora`文件
orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.102 )
(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
其中HOST的值是安装Oracle服务器的服务器的IP地址,
orcl是一个服务器实例名,
能够在服务器端的tnsnames.ora文件中查到,
等号前面的orcl是对数据库给出的客户端别名,
这里就干脆用了和服务器端的数据库标识名相同的名字orcl。
不论是在本机的数据框服务器还是在本机安装设置好客户端后,
在R中用如下的程序可以读入数据库中的表:
libraryROracle)
drv
conn
password="oracle", dbname="orcl")
rs
d
可以用dbGetTable()取出一个表并存入R数据框中。
用dbSendQuery()发出一个SQL命令,
用fetch()可以一次性取回或者分批取回,
在表行数很多时这种方法更适用。