在 Oracle 和 Snowflake 之间建立数据库链接
Posted
技术标签:
【中文标题】在 Oracle 和 Snowflake 之间建立数据库链接【英文标题】:Setting up a database link between Oracle and Snowflake 【发布时间】:2021-09-03 19:58:40 【问题描述】:以前有没有人在 Oracle 和 Snowflake 数据库之间实现过成功的数据库链接?
我正在使用 ODBC 连接到有问题的雪花数据,并且连接正常。我可以设置一个python脚本并查询数据,得到预期的回报。
我找到了this article with guidance on what to do,但在遵循该信息和 Snowflake 文档之后,Oracle 正在返回错误:
[Error] Execution (9: 20): ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
ORA-02063: preceding line from TEST
前面几行是dblink:
CREATE PUBLIC DATABASE LINK TEST
CONNECT TO <snowflake_username>
IDENTIFIED BY <snowflake_password>
USING <tnsnames_address>;
如果有人以前做过此操作并遇到问题或提供有关 Snowflake 与其他 Oracle dblink 不同的配置指导,我们将不胜感激。
【问题讨论】:
Dg4odbc 将是一个很好的工具。首先正确配置odbc 并使用isql 进行测试验证。异构服务部分总是有点模糊。对驱动程序的引用应使用驱动程序管理器。 【参考方案1】:这花了我相当多的调试才能开始工作,并且会说您需要非常好的 Oracle、ODBC 和 Unix 知识,但我的配置的主要细节和示例来自我拥有的测试框。
我会在有空的时候写一篇更详细的文章。
从 information_schema.databases@mysnowflakedb 中选择数据库名称;
DATABASE_NAME
DEMO_DB
INTL_DB
SMEW
SNOWFLAKE_SAMPLE_DATA
UTIL_DB
-
安装 RPM 和依赖项
苏- rpm -i ./SnowflakeODBCDriverforUnix.rpm yum install unixODBC unixODBC-devel
-
激活 30 天试用许可证:在 /opt/cdata/cdata-odbc-driver-for-snowflake/bin 中
./install-license.x64
-
在 Oracle db 上创建 DB LINK:
创建数据库链接 mysnowflakedb 连接以使用“mysnowflakedb”测试由 Test1234 识别;
已创建所有者 DB_LINK 用户名主机
PSAMMY MYSNOWFLAKEDB 测试 mysnowflakedb 09-SEP-21
-
更新 odbc.ini : 位于 /etc
[ODBC 数据源]
CData Snowflake Sys = 雪花的 CData ODBC 驱动程序
[CData雪花系统]
Driver= /opt/cdata/cdata-odbc-driver-for-snowflake/lib/libsnowflakeodbc.x64.so
url=https://xx12345.canada-central.azure.snowflakecomputing.com
用户=测试
密码=Test1234
数据库=DEMO_DB
仓库=COMPUTE_WH
RoleName=SYSADMIN
-
更新 odbcinst.ini:位于 /etc
[ODBC 驱动程序]
CData ODBC Driver for Snowflake=已安装
[Snowflake 的 CData ODBC 驱动程序]
描述 = Snowflake 的 CData ODBC 驱动程序
Driver64 = /opt/cdata/cdata-odbc-driver-for-snowflake/lib/libsnowflakeodbc.x64.so
-
创建 initmysnowflakedb.ora:位于
HS_FDS_CONNECT_INFO = "CData 雪花系统"
HS_FDS_TRACE_LEVEL = 关闭
HS_FDS_SHAREABLE_NAME = /opt/cdata/cdata-odbc-driver-for-snowflake/lib/libsnowflakeodbc.x64.so
设置 ODBCINI=/etc/odbc.ini
-
更新 listener.ora:位于 /network/admin
我为下面的 ODBC 详细信息创建了一个专用列表器
LISTENER_ODBC = (DESCRIPTION_LIST = (描述= (地址 =(协议 = TCP)(主机 = rac01-A.localdomain)(端口 = 1511)) (地址 =(协议 = IPC)(密钥 = EXTPROC1511)) ) )
SID_LIST_LISTENER_ODBC = (SID_LIST = (SID_DESC = (SID_NAME = mysnowflakedb) (ORACLE_HOME = /u01/app/oracle/product/19.6.0/db_3) (ENV="LD_LIBRARY_PATH=/opt/cdata/cdata-odbc-driver-for-snowflake/lib:/u01/app/oracle/product/19.6.0/db_3/lib") (PROGRAM = dg4odbc)) )
#启动监听器 lsnrctl start listener_odbc
-
更新 tnsnames.ora:位于 /network/admin
mysnowflakedb = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST = rac01-a.localdomain )(PORT=1511)) (CONNECT_DATA=(SID=mysnowflakedb)) (HS=OK))
【讨论】:
以上是关于在 Oracle 和 Snowflake 之间建立数据库链接的主要内容,如果未能解决你的问题,请参考以下文章
在没有 JavaScript 的情况下将 Oracle PL/SQL 移植到 Snowflake
(Oracle) 在 Snowflake 中转换 us7ascii?
在Snowflake sql中我们可以调用Oracle Sequence函数吗
Oracle分布式分片技术——实现两主机上的Oracle19c数据库(CentOS7与windows10)之间建立分布式数据库管理