配置步骤很简单:
1.配置连接:dbco
2.测试链接:sm38 执行ADBC_TEST_CONNECTION
可真要配置起来,那可就是两行泪。
安装S4系统后直接配置数据库连接,如果你不遇到错误,那就真是遇到神了,所以错误是必须的,针对oracle和sql server的解法还不一样,但其实也一样,那就是安装驱动。
第一部分:sql server连接错误的解法:
测试链接时的错误如下:
*** ERROR => DlLoadLib()==DLENOACCESS - dlopen("/usr/sap/S4D/D03/exe/dbmssslib.so") FAIL
"libodbc.so.1: cannot open shared object file: No such file or directory" [dlux.c
{root-id=06BE636F524C1ED9ACB34750EB54652F}_{conn-id=00000000000000000000000000000000}_0
*** ERROR => Couldn't load library '/usr/sap/S4D/D03/exe/dbmssslib.so'
B *** ERROR => Couldn't load library '/usr/sap/S4D/D03/ex
[dbcon.c 7091]
B ***LOG BYG=> could not load library for database connec
B ***LOG BZY=> unexpected return code 8192 calling DBDS [
B *** ERROR => Unexpected RC when calling dsql_connect
s4dev:s4dadm 54> cdexe
s4dev:s4dadm 57> ls dbmss
s4dev:s4dadm 58> ls dbms*
s4dev:s4dadm 59> rpm -q glibc
glibc-2.22-61.3.x86_64
s4dev:s4dadm 60>
步骤一:先到微软官网下载文件
https://docs.microsoft.com/zh-cn/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-2017
msodbcsql17-17.0.1.1-1.x86_64.rpm 12-Mar-2018 19:03 3888300
msodbcsql17-17.1.0.1-1.x86_64.rpm 03-Apr-2018 23:33 3919661
msodbcsql17-17.2.0.1-1.x86_64.rpm 11-Jul-2018 05:22 4127205
msodbcsql17-17.3.1.1-1.x86_64.rpm 26-Feb-2019 04:43 737601
unixODBC-2.3.7-1.suse.x86_64.rpm 26-Feb-2019 05:33 218160
下载unixODBC-2.3.7-1.suse.x86_64.rpm 和msodbcsql17-17.3.1.1-1.x86_64.rpm
s4dev:/tmp # rpm -ivh unixunixODBC-2.3.7-1.suse.x86_64.rpm
error: open of unixunixODBC-2.3.7-1.suse.x86_64.rpm failed: No such file or directory
s4dev:/tmp # rpm -ivh unixODBC-2.3.7-1.suse.x86_64.rpm
warning: unixODBC-2.3.7-1.suse.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID be1229cf: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:unixODBC-2.3.7-1.suse ################################# [100%]
s4dev:/tmp # rpm -ivh unixunixODBC-2.3.7-1.suse.x86_64.rpm
error: open of unixunixODBC-2.3.7-1.suse.x86_64.rpm failed: No such file or directory
s4dev:/tmp # rpm -ivh msodbcsql17-17.3.1.1-1.x86_64.rpm
warning: msodbcsql17-17.3.1.1-1.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID be1229cf: NOKEY
Preparing... ################################# [100%]
The license terms for this product can be downloaded from
https://aka.ms/odbc17eula and found in
/usr/share/doc/msodbcsql17/LICENSE.txt . By entering 'YES',
you indicate that you accept the license terms.
Do you accept the license terms? (Enter YES or NO)
YES
Updating / installing...
1:msodbcsql17-17.3.1.1-1 ################################# [100%]
步骤二:解决链接问题
安装驱动后进行dbco 测试,还是有错误:
M *** ERROR => DlLoadLib()==DLENOACCESS - dlopen("/usr/sap/S4D/D03/exe/dbmssslib.so") FAILED
"libodbc.so.1: cannot open shared object file: No such file or directory" [dlux.c 550]
M {root-id=06BE636F524C1ED9ACB3F0548BAEE77A}_{conn-id=00000000000000000000000000000000}_0
B *** ERROR => Couldn't load library '/usr/sap/S4D/D03/exe/dbmssslib.so'
[dbcon.c 7091]
B ***LOG BYG=> could not load library for database connection ORGANIZATIONDB [dbds 984]
B ***LOG BZY=> unexpected return code 8192 calling DBDS [dbacds 2106]
B *** ERROR => Unexpected RC when calling dsql_connect
网上可以找到这个错误的解法:
5. libodbc.so.1: cannot open shared object file
Environment:
- SuSE Linux 12
Symptom:
The workprocess trace points to the following error:
M *** ERROR => DlLoadLib()==DLENOACCESS - dlopen("/usr/sap/SID/DVEBMGS00/exe/dbmssslib.so") FAILED
"libodbc.so.1: cannot open shared object file: No such file or directory" [dlux.c 521]
M {root-id=0050568639A41ED6B1EAF03921567B8F}_{conn-id=00000000000000000000000000000000}_0
B *** ERROR => Couldn't load library '/usr/sap/SID/DVEBMGS00/exe/dbmssslib.so'
Solution:
Create the symbol links:
ln -s /usr/lib64/libodbc.so.2.0.0 /usr/lib64/libodbc.so.1
ln -s /usr/lib64/libodbcinst.so.2.0.0 /usr/lib64/libodbcinst.so.
安装这个方案建立链接
s4dev:/usr/sap/S4D/D03/exe # cd /usr/lib64
s4dev:/usr/lib64 # ls libodbc*
libodbc.so libodbc.so.2.0.0 libodbccr.so.2 libodbcinst.so libodbcinst.so.2.0.0
libodbc.so.2 libodbccr.so libodbccr.so.2.0.0 libodbcinst.so.2
s4dev:/usr/lib64 # ln -s /usr/lib64/libodbc.so.2 /usr/lib64/libodbc.so.1
s4dev:/usr/lib64 # ln -s /usr/lib64/libodbcinst.so.2 /usr/lib64/libodbcinst.so.1
完成后dbco测试即可成功。
第二部分:Oracle连接错误的解法:
微软以人性化著称都这样,所以连接oracle那就更不省事。在dbco创建连接的时候,你连连接字符串都不好写。
步骤一:下载oracle client。
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
怕少这少那,一口气下载并安装。
oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm
oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm
oracle-instantclient19.3-tools-19.3.0.0.0-1.x86_64.rpm
安装好了以后就会有下面这个目录
s4qas:/usr/lib/oracle/19.3/client64/lib/network/admin
这个里面的文本文件有一段话:
============================================================================
This is the default directory for Oracle Network and Oracle Client
configuration files. You can place files such as tnsnames.ora, sqlnet.ora
and oraaccess.xml in this directory.
NOTE:
If you set an environment variable
TNS_ADMIN to another directory containing
configuration files, they will be used instead of the files in this default
directory.
============================================================================
开始的时候我不知道有这个目录,所有自己建了client64/network/admin目录,然后把tnsnames.ora放在这个目录下。
后来于是又搞了一通环境变量,目的为了指向自己建的目录。
s4qas:/home/s4qadm#vi .bashrc
export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/oracle/19.3/client64/lib
export ORACLE_HOME=/usr/lib/oracle/19.3/client64
export TNS_ADMIN=/usr/lib/oracle/19.3/client64/network/admin
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
dbco测试还是错误,又把/etc/profile的全局环境变量修改了。
s4qas:/etc # vi profile
s4qas:/etc # echo $TNS_ADMIN
看起来环境变量也是生效的。
可是还是错误。
步骤二:解决链接库问题
错误日志如下:
B Loading DB library '/usr/sap/S4Q/D03/exe/dboraslib.so' ...
M *** ERROR => DlLoadLib()==DLENOACCESS - dlopen("/usr/sap/S4Q/D03/exe/dboraslib.so")
FAILED
"libclntsh.so.11.1: cannot open shared object file: No such file or directory" [dlux.c 550]
M {root-
id=06E38A3CBB1E1EE9B3F32F46465633D6}_{conn-id=00000000000000000000000000000000}_0
B *** ERROR => Couldn't load library
'/usr/sap/S4Q/D03/exe/dboraslib.so'
[dbcon.c 7091]
B ***LOG BYG=> could not load library for database connection US_WMS_PRD [dbds 984]
B
***LOG BZY=> unexpected return code 8192 calling DBDS [dbacds 2106]
B *** ERROR => Unexpected RC when calling dsql_connect
[dbacds.c
2107]
发现/usr/lib/oracle/19.3/client64/lib中有libclntsh.so.11.1 ,将这个文件拷贝到/usr/sap/S4Q/D03/exe/,错误解决。
步骤三:解决tnsname问题
这个时候不出错了,tnsname也有了,但是dbco测试的时候报:
ORA-12154: TNS: could not resolve the connect identifier specified
把tnsname修改来修改去,又弄出一个问题:
ORA-12505: TNS:listener does not currently know of SID given in connect desc
虽然是错误,但是错误在变化,说明修改是有效果的。
最后把tnsname修改成:
ORCL.WORLD=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = 10.10.10.105)
(PORT = 1521)
)
)
(CONNECT_DATA =
(SID = orcl)
(GLOBAL_NAME = orcl.WORLD)
)
)
测试成功。