数据源名称 (DSN) 是由开放式数据库连接 (ODBC) 使用的逻辑名称,用于引用从数据源访问数据而所需的驱动程序和其他信息。无论您是开发自己的 ODBC 客户端代码,还是使用需要通过 ODBC 访问 Vertica 的第三方工具,都需要配置和测试 DSN。您使用的方法取决于所用的客户端操作系统。
有关特定于您的客户端操作系统的信息,请参阅以下部分。
数据源名称 (DSN) 是由开放式数据库连接 (ODBC) 使用的逻辑名称,用于引用从数据源访问数据而所需的驱动程序和其他信息。无论您是开发自己的 ODBC 客户端代码,还是使用需要通过 ODBC 访问 Vertica 的第三方工具,都需要配置和测试 DSN。您使用的方法取决于所用的客户端操作系统。
有关特定于您的客户端操作系统的信息,请参阅以下部分。
在 Linux 和其他类 UNIX 平台上,您可以在文本文件中定义 DSN。客户端的驱动程序管理器会读取该文件,以确定如何连接到 Vertica 数据库。驱动程序管理器通常在以下两个位置查找 DSN 定义:
/etc/odbc.ini
~/.odbc.ini
(用户主目录中名为 .odbc.ini
的文件)
用户必须能够读取 odbc.ini
文件,才能使用它连接到数据库。如果使用全局 odbc.ini
文件,请考虑创建一个对该文件具有读取权限的 UNIX 组。然后,将需要使用 DSN 的用户添加到该组。
这些文件的结构是相同的,只是所在位置不同而已。如果这两个文件都存在,则 ~/.odbc.ini
文件通常会替代系统范围 /etc/odbc.ini
文件。
odbc.ini
是一个包含以下两种类型的行的文本文件:
节定义,是用方括号括起来的文本字符串。
参数定义,其中依次包含参数名称、等号 (=) 和参数值。
odbc.ini
中最多 1000 个字符的参数值。如果您的参数值大于 1000 个字符(例如 OAuthAccessToken),则必须通过 连接字符串 传递它,而不是在 odbc.ini
中指定它。
文件的第一节始终名为 [ODBC Data Sources],其中包含 odbc.ini
文件所定义的所有 DSN 的列表。此节中的参数是 DSN 的名称,这些参数稍后在文件中显示为节定义。值是 DSN 的文本描述,并不起任何作用。例如,定义了名为 Vertica DSN 的单个 DSN 的 odbc.ini
文件可能包含以下 ODBC 数据源节:
[ODBC Data Sources]
VerticaDSN = "vmartdb"
显示在 ODBC 数据源节之后的节定义了每个 DSN。DSN 节的名称必须与 ODBC 数据源节中定义的名称之一匹配。
若要创建或编辑 DSN 定义文件,请执行下列操作:
使用所选文本编辑器打开 odbc.ini
或 ~/.odbc.ini
。
创建 ODBC 数据源节并定义参数:
其名称是要创建的 DSN 的名称
其值是 DSN 的描述
例如,若要创建名为 VMart 的 DSN,您应输入以下命令:
[ODBC Data Sources]
VMart = "VMart database on Vertica"
创建名称与您在步骤 2 中定义的 DSN 名称匹配的节。在此节中,您应添加定义了 DSN 的设置的参数。最常定义的参数如下:
Description – 有关数据源的附加信息。
Driver – Vertica ODBC 驱动程序的位置和指定,或 odbcinst.ini
文件中定义的驱动程序的名称(请参阅下文)。为了确保将来的兼容性,请使用库目录(而非库文件)中的符号链接的名称:
/opt/vertica/lib
(在 32 位客户端上)
/opt/vertica/lib64
,(在 64 位客户端上)
例如,64 位 ODBC 驱动程序库的符号链接是:
/opt/vertica/lib64/libverticaodbc.so
符号链接始终指向最新版本的 Vertica 客户端 ODBC 库。请使用此链接,以便不需要在更新客户端驱动程序后更新所有 DSN。
Database – 在服务器中运行的数据库的名称。此示例使用 vmartdb 来表示 vmartdb。
ServerName — 安装了 Vertica 的服务器的名称。如果 Vertica 已安装在同一台计算机上,则使用 localhost。
您可以提供 IPv4 地址、IPv6 地址或主机名。
在 IPv4/IPv6 混合网络中,DNS 服务器配置决定了哪个 IP 版本地址最先发送。可使用 PreferredAddressFamily
选项来强制连接使用 IPv4 或 IPv6。
UID — 数据库超级用户(名称与数据库管理员帐户相同)或超级用户已创建并向其授予了权限的用户。此示例使用用户名 dbadmin。
PWD — 指定的用户名的密码。此示例将密码字段留空。
Port — Vertica 用来侦听 ODBC 连接的端口号。例如,5433。
ConnSettings — 可以包含用分号分隔的 SQL 命令。这些命令可以在连接到服务器之后立即运行。
SSLKeyFile — 客户端私钥的文件路径和名称。此文件可以驻留在系统上的任意位置。
SSLCertFile — 客户端公用证书的文件路径和名称。此文件可以驻留在系统上的任意位置。
Locale — 用于会话的默认区域设置。默认情况下,数据库的区域设置是:en_US@collation=binary (English as in the United States of America)。将区域设置指定为 ICU 区域设置。有关可用于指定区域设置的完整参数列表,请参阅 ICU 用户指南 (http://userguide.icu-project.org/locale)。
PreferredAddressFamily:
如果客户端和服务器都有 IPv4 和 IPv6 地址而且您已经提供了主机名时要使用的 IP 版本,则使用的 IP 版本是以下之一:
ipv4
:使用 IPv4 连接到服务器。
ipv6
:使用 IPv6 连接到服务器。
none
:使用 DNS 服务器提供的 IP 地址。
例如:
[VMart]
Description = Vmart Database
Driver = /opt/vertica/lib64/libverticaodbc.so
Database = vmartdb
Servername = host01
UID = dbadmin
PWD =
Port = 5433
ConnSettings =
AutoCommit = 0
SSLKeyFile = /home/dbadmin/client.key
SSLCertFile = /home/dbadmin/client.crt
Locale = en_US@collation=binary
有关包括 Vertica 特定参数的完整参数列表,请参阅 ODBC DSN 连接属性。
您可以使用在 odbcinst.ini
文件中定义的驱动程序的名称,而不必在 DSN 定义中指定 ODBC 驱动程序库的路径。如果您有许多 DSN 并且经常需要更新这些 DSN 以指向新的驱动程序库,则此方法很有用。使用此方法,您还可以设置一些其他 ODBC 参数,例如线程模型。
与 odbc.ini
文件一样,odbcinst.ini
文件中也包含一些节。每个节定义了可在 odbc.ini
文件中引用的 ODBC 驱动程序。
在一个节中,您可以定义以下参数:
Description — 有关数据源的附加信息。
Driver — Vertica ODBC 驱动程序的位置和指定,例如
/opt/vertica/lib64/libverticaodbc.so
例如:
[Vertica]
Description = Vertica ODBC Driver
Driver = /opt/vertica/lib64/libverticaodbc.so
然后,在 odbc.ini
文件中,您可以使用已在 odbcinst.ini
文件中创建的节(描述了要使用的驱动程序)的名称。例如:
[VMart]
Description = Vertica Vmart database
Driver = Vertica
如果使用的是 unixODBC 驱动程序管理器,您还应添加一个 ODBC 节以替代其标准线程设置。默认情况下,unixODBC 通过 ODBC 将所有 SQL 调用序列化,这样可以阻止多个并行加载。若要更改其默认行为,请将以下行添加到 odbcinst.ini
文件中:
[ODBC]
Threading = 1
在 Linux 和 UNIX 系统上,您需要先配置一些其他驱动程序设置,然后才能使用 DSN。有关详细信息,请参阅ODBC 驱动程序设置。
unixODBC 驱动程序管理器包含一个名为 isql 的实用程序,此实用程序是一个简单的 ODBC 命令行客户端。使用此实用程序,您可以连接到 DSN 以发送命令和接收结果,类似于 vsql。
若要使用 isql 测试 DSN 连接,请执行下列操作:
运行以下命令:
$ isql –v DSNname
其中 DSNname 是已创建的 DSN 的名称。
此时将显示连接消息和 SQL 提示。如果它们未显示,则可能表明存在配置问题,或者可能表明所使用的用户名或密码不正确。
尝试执行简单 SQL 语句。例如:
SQL> SELECT table_name FROM tables;
isql 工具将返回 SQL 语句的结果。
若要为 Microsoft Windows 客户端创建 DSN,您必须执行以下任务:
数据源名称 (DSN) 是 ODBC 逻辑名称,用来表示驱动程序和访问数据源中的数据所需的其他信息。此名称由 Internet 信息服务 (Internet Information Services, IIS) 用于与 ODBC 数据源的连接。
此部分介绍如何使用 Vertica ODBC 驱动程序设置 ODBC DSN。本主题假设您已按照在 Windows 中安装客户端驱动程序中所述安装了驱动程序。
打开 ODBC 管理器。例如,可以导航到“开始 > 控制面板 > 管理工具 (Administration Tools) > 数据源 (ODBC)”。
确定是否希望客户端系统上的所有用户都能访问 Vertica 数据库的 DSN。
如果想让所有用户都可访问,则单击系统 DSN (System DSN) 选项卡。
否则,单击用户 DSN 选项卡以创建仅供您的 Windows 用户帐户使用的 DSN。
单击添加 (Add) 以创建用于连接到 Vertica 数据库的新的 DSN。
滚动浏览“创建新数据源 (Create a New Data Source)”对话框中的驱动程序列表以查找 Vertica 驱动程序。选择该驱动程序,然后单击完成。
此时将显示 Vertica ODBC DSN 配置对话框。
单击更多 >>> (More >>>) 按钮,以查看正在编辑的字段和由 DSN 定义的连接字符串的描述。
输入 DSN 的信息。以下字段是必填的:
DSN 名称 — DSN 的名称。客户端使用此名称来标识要连接到的 DSN。DSN 名称必须满足以下要求:
最大长度为 32 个字符。
它由 ASCII 字符组成,但以下字符除外: { } , ; ? * = ! @ \
它不包含空格。
服务器 — 要连接到的 Vertica 服务器的主机名或 IP 地址。如果 Vertica 已安装在同一台计算机上,则使用 localhost。
您可以提供 IPv4 地址、IPv6 地址或主机名。
在 IPv4/IPv6 混合网络中,DNS 服务器配置决定了哪个 IP 版本地址最先发送。可使用 PreferredAddressFamily
选项来强制连接使用 IPv4 或 IPv6。
PreferredAddressFamily
选项在“客户端设置”选项卡上可用。
备份服务器 — 用于在“服务器”字段中指定的服务器已关闭时连接到的主机名或 IP 地址的逗号分隔列表。可选。
数据库 — Vertica 数据库的名称。
用户名 — 在连接到数据库时使用的用户帐户的名称。在连接到 DSN 时,如果应用程序不提供自己的用户名,则会使用此帐户名称登录到数据库。
其余字段是可选的。有关可以定义的 DSN 参数的详细信息,请参阅 DSN 参数。
如果要测试连接,请执行下列操作:
至少输入有效的 DSN 名称、服务器名称、数据库,并输入用户名 或选择 Windows 身份验证。
如果未选择 Windows 身份验证,您可以在密码 框中输入密码。或者,您也可以选择密码提示,以让驱动程序在连接时提示您输入密码。
单击测试连接。
完成编辑和测试 DSN 后,单击确定。Vertica ODBC DSN 配置窗口将关闭,并且新的 DSN 会在“ODBC 数据源管理器”窗口中列出。
单击确定 (OK) 以关闭 ODBC 数据源管理器。
创建 DSN 后,您可以使用 Microsoft Excel 2007 进行测试。
在 64 位版本的 Windows 上,ODBC 数据源管理器在默认情况下会创建并编辑与 64 位 Vertica ODBC 库关联的 DSN。
尝试将这些 64 位 DSN 与 32 位客户端应用程序结合使用会生成架构不匹配错误。相反,您必须通过运行 32 位 ODBC 管理器为 32 位客户端创建特定的 32 位 DSN,该管理器通常位于以下位置:
c:\Windows\SysWOW64\odbcad32.exe
此管理器窗口可用于编辑与 32 位 ODBC 库关联的一组 DSN。使用此版本的 ODBC 管理器创建的 DSN 可与 32 位客户端应用程序结合使用。
当您安装 ODBC 驱动程序并创建数据源名称 (DSN) 时,DSN 设置(其中包括)将存储在注册表中。ODBC DSN 的密码加密仅适用于 Windows 系统。
对 ODBC 数据源名称 (DSN) 的密码进行加密,可防止未经授权的数据库访问。密码默认不加密,以纯文本形式存储。
使用 EncryptPassword 参数,可为 ODBC DSN 启用或禁用密码加密:
EncryptPassword = true
启用密码加密
EncryptPassword = false
(默认)禁用密码加密
在 Windows 注册表中设置 EncryptPassword
- HKEY_LOCAL_MACHINE > Software > Vertica > ODBC > Driver EncryptPassword=<true/false>
。
对于在 64 位 windows 上运行的 32 位驱动程序,请在此处验证密码加密:
HKEY_LOCAL_MACHINE > Software > Wow6432Node > Vertica > ODBC >
Driver > EncryptPassword=<true/false>
加密密码在以下注册表位置更新:
对于用户 DSN:
HKEY_CURRENT_USER-> Software -> ODBC -> ODBC.INI -> DSNNAME -> PWD
对于系统 DSN:
HKEY_LOCAL_MACHINE-> Software -> ODBC -> ODBC.INI -> DSNNAME -> PWD
使用 Windows 注册表编辑器,根据 EncryptPassword 的值确定是否已启用密码加密。根据您安装的 DSN 类型,检查以下内容:
对于用户 DSN: HKEY_CURRENT_USER > Software > ODBC > ODBC.INI > dsn name > isPasswordEncrypted=<1/0>
对于系统 DSN: HKEY_LOCAL_MACHINE > Software > ODBC > ODBC.INI > dsn name > isPasswordEncrypted=<1/0>
对于每个 DSN,isPasswordEncrypted
参数值表示密码加密的状态。其中,1
表示密码已加密,0
表示密码未加密。
可以使用 Microsoft Excel 验证应用程序是否能够连接到 ODBC 数据源或其他 ODBC 应用程序。
打开 Microsoft Excel,然后选择数据 (Data) > 获取外部数据 (Get External Data) > 来自其他来源 (From Other Sources) > 来自 Microsoft Query (From Microsoft Query)。
当“选择数据源 (Choose Data Source)”对话框打开之后:
请选择新建数据源 (New Data Source),然后单击确定 (OK)。
输入数据源的名称。
选择 Vertica 驱动程序。
单击连接。
当“Vertica 连接对话框 (Vertica Connection Dialog)”打开之后,输入 DSN 的连接信息,然后单击确定 (OK)。
在“创建新数据源”对话框上单击确定,以返回到“选择数据源”对话框。
选择“VMart_Schema*”,并验证是否已取消选中“使用查询向导 (Use the Query Wizard)”复选框。单击确定 (OK)。
当“添加表”对话框打开后,单击关闭。
当“Microsoft 查询 (Microsoft Query)”窗口打开之后,单击 SQL 按钮。
在“SQL”窗口中,编写任意简单查询以测试连接。例如:
SELECT DISTINCT calendar_year FROM date_dimension;
*如果您看到提醒“SQL Query 无法以图形表示。是否继续?(SQL Query can't be represented graphically. Continue anyway?)”,请单击**确定 (OK)**。 *数据值 2003、2004、2005、2006、2007 表示已成功连接到 ODBC,并通过 ODBC 执行了查询。
选择文件 (File) > 将数据返回到 Microsoft Office Excel (Return Data to Microsoft Office Excel)。
在“导入数据”对话框中,单击确定。
数据当前在 Excel 工作表中可用。
可以使用 Vertica ODBC 驱动程序设置 ODBC DSN。此过程假设您已按照安装 ODBC 客户端驱动程序中所述安装了驱动程序。
使用 Web 浏览器下载并安装 Apple ODBC Administrator Tool。
安装之后,找到并打开 ODBC 管理员工具:
导航至 Finder (查找器) > 应用程序 (Applications) > 实用程序 (Utilities)。
打开 ODBC 管理员工具。
单击驱动程序 (Drivers) 选项卡,然后验证是否已安装 Vertica 驱动程序。
指定是否希望客户端系统上的所有用户都能访问 Vertica 数据库的 DSN:
如果想让所有用户都可访问,则单击系统 DSN (System DSN) 选项卡。
否则,单击用户 DSN (User DSN) 选项卡以创建仅供您的 Macintosh 用户帐户使用的 DSN。
单击添加... (Add...) 创建用于连接到 Vertica 数据库的新的 DSN。
滚动浏览“选择驱动程序 (Choose A Driver)”对话框中的驱动程序列表以查找 Vertica 驱动程序。选择该驱动程序,然后单击确定 (OK)。此时将打开一个对话框,请求提供 DSN 参数信息。
在对话框中,输入数据源名称 (DSN) 和可选的 描述 (Description)。为此,请单击 添加 (Add) 以插入关键字(参数)和定义连接到数据库所需设置的值,其中包括数据库名称、服务器主机、数据库用户名(例如 dbaadmin)、数据库密码和端口。然后单击确定 (OK).
在“ODBC Administrator”对话框中,单击应用 (Apply)。
有关包括 Vertica 特定参数的完整参数列表,请参阅 ODBC DSN 连接属性。
配置 ODBC 管理员工具之后,您可能需要配置其他驱动程序设置才能使用 DSN,具体取决于环境。有关详细信息,请参阅其他 ODBC 驱动程序配置设置。
Mac OS X 上的标准 iODBC 驱动程序管理器包含一个名为 iodbctest 的实用程序,您可以使用此实用程序测试 DSN,以验证该 DSN 是否配置正确。应向此命令传递与用于打开 ODBC 数据库连接的连接字符串格式相同的连接字符串。配置 DSN 连接之后,您可以运行查询以验证该连接是否正常工作。
例如:
# iodbctest "DSN=VerticaDSN;UID=dbadmin;PWD=password"
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0607.1008
Driver: 07.01.0200 (verticaodbcw.so)
SQL> SELECT table_name FROM tables;
table_name
--------------------------------------------------------------------------------------------------------------------------------
customer_dimension
product_dimension
promotion_dimension
date_dimension
vendor_dimension
employee_dimension
shipping_dimension
warehouse_dimension
inventory_fact
store_dimension
store_sales_fact
store_orders_fact
online_page_dimension
call_center_dimension
online_sales_fact
numbers
result set 1 returned 16 rows.
下表列出了可以在 DSN 中设置以与 Vertica ODBC 驱动程序结合使用的连接属性。要设置这些参数,请参阅 设置 DSN 连接属性。
若要创建正常工作的 DSN,您至少需要设置这些连接属性。
以下连接属性与 ODBC 中的 OAuth 相关。
odbc.ini
中最多 1000 个字符的参数值。如果您的参数值大于 1000 个字符(例如 OAuthAccessToken),则必须通过 连接字符串 传递它,而不是在 odbc.ini
中指定它。
可以将以下属性用于使用 Kerberos 的客户端身份验证。
以下表中的属性是所有用户 DSN 条目和所有系统 DSN 条目共用的。所提供的示例适用于 Windows 客户端。
要编辑 DSN 属性:
在 UNIX 和 Linux 客户端平台上,您可以编辑 odbc.ini
文件。此文件的位置特定于驱动程序管理器。请参阅为 Linux 创建 ODBC DSN。
在 Windows 客户端平台上,您可以使用 Vertica ODBC 客户端驱动程序界面编辑部分 DSN 属性。请参阅为 Windows 客户端创建 ODBC DSN。
您也可以直接编辑 DSN 属性,方法是在 Windows 注册表中(例如在 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\\
DSNname 中)打开 DSN 条目。直接编辑注册表会带来风险,因此,只应对无法通过 ODBC 驱动程序用户界面或客户端代码进行设置的属性使用此方法。
当使用 SQLDriverConnect()
函数打开连接时,您可以在连接字符串中设置属性:
sqlRet = SQLDriverConnect(sql_hDBC, 0, (SQLCHAR*)"DSN=DSNName;Locale=en_GB@collation=binary", SQL_NTS, szDNS, 1024,&nSize, SQL_DRIVER_NOPROMPT);
在连接字符串中,“;”是预留符号。如果需要设置多个属性作为 ConnSettings 属性的一部分,请使用“%3B”来替代“;”,并使用“+”来替代空格。
例如:
sqlRet = SQLDriverConnect(sql_hDBC, 0, (SQLCHAR*)"DSN=Vertica SQL;ConnSettings=set+search_path+to+a,b,c%3Bset+locale=ch;SSLMode=prefer", SQL_NTS,
szDNS, 1024,&nSize, SQL_DRIVER_NOPROMPT);
已使用 SQLGetConnectAttr()
和 SQLGetStmtAttr()
API 调用建立与 Vertica 的连接后,客户端代码可以检索 DSN 属性值。可以使用 SQLSetConnectAttr()
和 SQLSetStmtAttr()
设置部分属性。
有关特定于 Vertica 的属性的列表,请参阅特定于 Vertica 的 ODBC 头文件。