Linux 上的 DB2 Express

DB2 Express on Linux

我已经尝试了大约 30 个小时来在 AWS Linux Ubuntu 实例上获取 DB2 Express 运行ning。我在我的 Macbook 上 运行ning 很好,我可以在那里工作,但想在真正的服务器中使用它。

我已经卸载并重新安装了好几次,一直运行宁陷入同样的​​问题:

这是我所做工作的一般历史:

source /home/db2instl/sqllib/db2profile

./db2icrt db2instl

sudo -i -u db2instl /home/db2instl/sqllib/adm/db2start

~/sqllib/adm$ ./db2start

SQL1063N  DB2START processing was successful.

当使用 SQL Alchemy 运行ning python 连接代码时,我得到这个:

sqlalchemy.exc.OperationalError: (OperationalError) ibm_db_dbi::OperationalError: [IBM][CLI Driver] SQL1639N  
The database server was unable to perform authentication because security
related database manager files on the server do not have the required
operating system permissions.
SQLSTATE=08001 SQLCODE=-1639 None None

根据 IBM 知识中心:

http://www-01.ibm.com/support/knowledgecenter/#!/SSEPGG_10.5.0/com.ibm.db2.luw.messages.sql.doc/doc/msql01639n.html

必须执行 db2rfe 才能通过此操作。

阅读那里的说明,db2rfe 应该在以某种方式操作配置文件后以 root 身份执行。

我把ENABLE_OS_AUTHENTICATION改成是:

ENABLE_OS_AUTHENTICATION=是

执行成功后:

sudo ./db2rfe -f db2rfe.cfg

我试图 运行 看着这个:

https://dba.stackexchange.com/questions/49807/sql1641n-error-on-linux-while-running-db2start-using-db2-express-c-on-linux-luw

我执行:

sudo -i -u db2instl /home/db2instl/sqllib/adm/db2start

Which gives me this error:

SQL1641N  The db2start command failed because one or more DB2 database 
manager program files was prevented from executing with root privileges 
by file system mount settings.

这是一个 AWS Ubuntu 实例:

~/sqllib$ mount

/dev/xvda1 on / type ext4 (rw,discard)

proc on /proc type proc (rw,noexec,nosuid,nodev)

sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)

none on /sys/fs/cgroup type tmpfs (rw)

none on /sys/fs/fuse/connections type fusectl (rw)

none on /sys/kernel/debug type debugfs (rw)

none on /sys/kernel/security type securityfs (rw)

udev on /dev type devtmpfs (rw,mode=0755)

devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)

tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)

none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)

none on /run/shm type tmpfs (rw,nosuid,nodev)

none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)

none on /sys/fs/pstore type pstore (rw)

/dev/xvdb on /mnt type ext3 (rw)

systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)

因此,正如其他发问者所发, / 未安装在 "nosuid" 模式下。但是,作为上述问题之一的回答者,我没有进行 Root 安装。

这台计算机是 AWS Ubuntu 12.04 安装:

lsb_release -a

No LSB modules are available.

Distributor ID:   Ubuntu

Description:      Ubuntu 14.04.1 LTS

Release:      14.04

Codename:     trusty

补充说明:

由于奇怪的 DB2 长度限制,我不得不将这台机器上的散列算法更改为使用 256 字节。我已经克服了很多障碍,这似乎是最后一步了。

我可以更改 db2start 的权限似乎可以解决这个问题并使其归 root 所有,但它说我不允许 运行 作为 root。

这是对我的第 22 条军规的非正式表述:

如果没有 运行ning db2rfe,我无法启用 OS 身份验证。当我运行db2rfe,启用OS认证,

由于权限问题,我无法重启服务器,但错误消息似乎与条件不符。

请注意,在这种情况下,我很乐意使用客户端身份验证或任何其他类型的身份验证——这不是生产代码,只是为了演示而设置的。

如果您能提供任何帮助,我们将不胜感激。

根据您的描述,您可能混淆了 DB2 的根安装和非根安装步骤。

在非 root 用户安装中,所有 DB2 二进制文件和其他文件都安装在执行安装的用户的主目录中。某些任务仍然需要 root 权限,这就是你 运行 db2rfe 的地方。非root安装虽然有很多限制,所以只有在没有其他选择的情况下才应该选择它。

root 安装复制 /opt 下的二进制文件,并在您在安装期间指定的实例所有者用户的主目录中创建一个 DB2 实例。从那里创建到实际二进制文件的符号链接。

root 用户安装的安全性不亚于非 root 用户,甚至可能更安全,因为二进制文件归 root 用户所有。

控制台与 GUI 安装与 root 与非 root 无关。过去 db2setup 用于基于 GUI 的安装,而 db2_install 用于控制台安装。但是,db2_install 现在已弃用;要执行控制台安装,请使用响应文件选项 (db2setup -r <response file name>),如 the manual.

中所述