在 Linux 上的 Db2 v11.5 上,如果我执行命令来检查数据库实例是否启动并正在运行:
ps -e -o command | grep db2sysc
输出为:
db2sysc 0
数字 0 代表什么?我问这个是因为也许在 bash 脚本中用到它会很有用。
在 Linux 上的 Db2 v11.5 上,如果我执行命令来检查数据库实例是否启动并正在运行:
ps -e -o command | grep db2sysc
输出为:
db2sysc 0
数字 0 代表什么?我问这个是因为也许在 bash 脚本中用到它会很有用。
关于 Windows 2019 上的“SQL Server 2019”:
在我们的计算机上安装了 Db2 v11.5.8.0 Linux/x86-64。我想安装新的修复程序作为定期更新,特别是部署安全修复程序。
几周前发布了新的修复包 11.5.9.0。但现在我看到累积特殊构建也列在下载 Db2 修复包网页上。查看CSB网页的详细信息,有信息:“CSB是累积的,每个CSB包含先前CSB中提供的所有修复。” 如果我理解正确,CSB 不应安装在 v11.5.9.0 之上,而应安装在以前的 CSB 之上(如果安装在 Db2 服务器上)。它是否正确?
CSB 的首要目的是什么?仅包含安全和故障修复而没有新功能?应用CSB后Db2的发布是什么?
谢谢
在 Red Hat 8.8 上,我安装了 Db2 v11.5.8.0 并且数据库工作正常。
db2prereqcheck
并且满足了所有先决条件。成功的。db2_install
命令安装 Db2。成功的。db2iupdt
。成功的。db2start
出现错误:db2start:加载共享库时出错:libaws-cpp-sdk-transfer.so:无法打开共享对象文件:没有这样的文件或目录看起来有些库丢失了。我尝试在网上搜索,但找不到如何安装该库。任何想法?
IBM DB2
C:\>db2 create table public.tab1 (id int not null, col1 int not null)
C:\>db2 create unique index tab1_ix on public.tab1 (id) include (col1)
C:\>db2 alter table public.tab1 add primary key (id)
SQL0598W Existing index "IN1139.TAB1_IX" is used as the index for the primary
key or a unique key. SQLSTATE=01550
这只是信息,已使用现有索引。
后GRESQL
db=# create table public.tab1 (id int not null, col1 int not null);
db=# create unique index tab1_ix on public.tab1 (id) include (col1);
db=# alter table public.tab1 add primary key (id);
db=# \d public.tab1;
Table "public.tab1"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
col1 | integer | | not null |
Indexes:
"tab1_pkey" PRIMARY KEY, btree (id)
"tab1_ix" UNIQUE, btree (id) INCLUDE (col1)
PostgreSQL为主键创建了附加索引。
为什么这很重要?a)在解释的许多情况下,我看到如果创建了主键,那么数据库将使用主键索引进行查询。但是,如果我删除主键,则唯一索引和查询运行得更快(因为仅索引扫描)。b) 额外的磁盘空间用于额外的主键索引。c) 每次更新/插入/删除并且必须更新两个索引而不是一个。
问题:
在 Linux x86_64 上的 Db2 v11.5.8.0 上,我有多个实例和数据库。
我想知道是否有一些待处理的设置:
问题:
我需要一些简单的解决方案来编写 Linux bash 脚本来自动检查差异,并在存在某些挂起的设置时向我返回警告。
在 Linux x86_64 上,我安装了 Db2 v11.5.8.0,我正在将实例和数据库从 v11.1 升级到 v11.5。
我们有几台 Linux 机器,它们至少安装了两个 Db2 版本:v11.1 和 v11.5,每个数据库版本都有几个实例,每个实例都有几个数据库。
我可以检查:
db2ls
db2greg -dump | grep ^I
但是如何检查特定的 Db2 实例,哪些数据库已经使用db2 upgrade database <db_name>进行了升级
在 Db2 v11.5.8.0 Linux x86_64 数据库上,每隔几个月,一些应用程序就会打开大量连接,并且会在 10 分钟内快速释放它们。
我假设它必须是来自 Windows 的胖客户端应用程序,因为对于 WAS 应用程序,连接数在应用程序服务器级别受到限制。
检查高水位线我得到:
db2 get snapshot for dbm | grep "High water mark for agents registered"
已注册代理的高水位标记 = 4296
通过(未知)IP 地址限制连接数的最佳方法是什么?例如,我想将来自特定 IP 地址的最大连接数限制为 100 个连接。请记住,我不知道 IP 地址,它可以是任何地址。
在 db2diag.log 的 Db2/Linux_x86_64 上,我经常看到关于 CATALOGCACHE_SZ 参数太小的警告,例如:
2022-12-02-14.40.53.536711+060 E5979903E769 LEVEL: Warning
PID : 4508 TID : 140629241751296 PROC : db2sysc 0
INSTANCE: prod1 NODE : 000 DB : MYDB
APPHDL : 0-33700 APPID: 10.12.3.4.13429.221202134054
AUTHID : USER1 HOSTNAME: myserver.com
EDUID : 4958 EDUNAME: db2agent (DB2P) 0
FUNCTION: DB2 UDB, catcache support, sqlrlc_check_available_memory, probe:100
MESSAGE : ADM4000W A catalog cache overflow condition has occurred. There is
no error but this indicates that the catalog cache has exceeded the
configured maximum size. If this condition persists, you may want to
adjust the CATALOGCACHE_SZ DB configuration parameter.
我检查了建议:
db2 autoconfigure apply none | grep CATALOGCACHE_SZ
Catalog cache size (4KB) (CATALOGCACHE_SZ) = 1093 1093
我同时看到:“当前值”和“建议”具有相同的值 1093。
有没有其他方法可以确定目录缓存大小应该有多大?或者任何增加的方法,比如加倍,看看问题是否再次出现。
在 Linux 上的 Db2 v11.5.7 中,我有一个简单的表:
create table admin.patient_data (
patientid int not null primary key,
patient_name varchar(10),
illness varchar(15),
doctor_name varchar(10)
);
insert into admin.patient_data values (1, 'Alice', 'illness A', 'DOCTOR1');
insert into admin.patient_data values (2, 'Bob', 'illness B', 'DOCTOR2');
select * from admin.patient_data;
结果:
PATIENTID PATIENT_NAME ILLNESS DOCTOR_NAME
----------- ------------ --------------- ----------
1 Alice illness A DOCTOR1
2 Bob illness B DOCTOR2
ILLNESS 列是敏感数据。我希望仅当列 DOCTOR_NAME 与 Db2 登录用户匹配时才显示此列。
create mask admin.patient_data on admin.patient_data
for column illness return
case when doctor_name = USER then illness else 'Masked data' end
enable;
alter table admin.patient_data activate column access control;
现在用户 DOCTOR1 连接到数据库并检查数据:
select * from admin.patient_data
它被退回:
PATIENTID PATIENT_NAME ILLNESS DOCTOR_NAME
----------- ------------ --------------- -----------
1 Alice illness A DOCTOR1
2 Bob Masked data DOCTOR2
在行 PATIENTID=2 列 ILLNESS 预计将被屏蔽。
但是医生受过教育,所以他/她知道所有的疾病,现在瞄准“疾病B”
db2 "select * from admin.patient_data where illness = 'illness B'"
它得到:
PATIENTID PATIENT_NAME ILLNESS DOCTOR_NAME
----------- ------------ --------------- -----------
2 Bob Masked data DOCTOR2
字段 ILLNESS 仍按预期标记,但现在因为有条件的 DOCTOR1 知道患者 Bob 患有“疾病 B”。
我希望最终用户可以按条件返回的值进行过滤。即:“疾病A”和“标记数据”。
有没有一些简单的解决方案来防止这种情况?我希望最后一个 select 语句不会返回任何记录。
我有几台 Linux 服务器,它们上可能有一个或多个 Db2 实例。Db2 实例可以来自不同的 Db2 版本。
对于安全审计,我需要编写一些简单的 bash 脚本来检查所有 Linux 服务器上的一些“dbm cfg”设置。我有一些工具可以让我以 root 访问权限连接到 Linux 服务器,然后我可以在远程 Linux 服务器上执行任何 bash 命令。
问题:我遇到的问题是,如何在不知道 Db2 实例所有者或 Db2 实例名称的情况下以 root 用户获取 Linux 服务器上的 Db2 实例列表?
当我获得所有者时,我可以对那个 Db2 实例所有者 Linux 用户“sudo”或“su”并执行“db2 get dbm cfg”命令。
在 Linux/x86-64 上,我安装了 Db2 v11.1。当我尝试在现有 Db2 安装的同时安装 Db2 v11.5 时,出现错误“ DBI1004W /usr/lib/libdb2.so detected ”。
我检查并看到路径上的符号链接:
ls -l /usr/lib | grep "/opt/ibm/db2/"
ls -l /usr/include | grep "/opt/ibm/db2"
错误描述中建议删除这些链接。使用db2rmln
命令后,这些链接将被删除。
现在已成功安装 Db2 v11.5。但我已经检查过了,那些符号链接没有重新创建。根据https://www.ibm.com/docs/en/db2/11.5?topic=servers-multiple-db2-copies-one-system-linux-unix这按预期工作。信息:“当多个 Db2 副本要共存时,不得创建链接。 ”
如果 Db2 的多个副本在同一个 Linux 上抗拒,那么这些符号链接不存在就太好了。
我的问题是,这些符号链接的目的是什么,我可以期待一些问题不再有它们吗?
db2 connect to TEST1
并且连接成功完成。db2set DB2COMM
输出为 DB2COMM=TCPIPdb2 catalog tcpip node loctcp remote localhost server 50000
db2 catalog database test1 as tcptest1 at node loctcp
db2 terminate
db2 connect to tcptest1 user db2inst1 using <password>
并成功完成连接。
netstat -an -p tcp | find ":60127"
我可以看到连接处于 LISTENING 状态。db2 catalog tcpip node remtcp remote localhost server 60127
db2 catalog database test1 as tcptest1 at node remtcp
db2 terminate
db2 connect to tcptest1 user db2inst1 using <password>
问题:看起来连接挂起。几分钟后,我在 Db2 客户端中遇到错误:
SQL30081N 检测到通信错误。正在使用的通信协议:“TCP/IP”。正在使用的通信 API:“SOCKETS”。检测到错误的位置:“127.0.0.1”。检测错误的通信功能:“recv”。协议特定错误代码:“10054”、“*”、“0”。SQLSTATE=08001
Linux 虚拟机内部似乎出现了问题,但第 4 步和第 5 步对于 Db2 TCP/IP 连接应该一切正常。
知道还有什么可以检查为什么 Db2 客户端连接不起作用吗?
PS 我与 Db2 v11.1 安装完全相同,我的 PC 上的 Db2 连接工作正常。
db2_install
我使用命令从 fixpack v11.5.7.0 安装了 Db2 。db2licm -a <license_file>
db2licm -l
并且输出是:Product name: "DB2 Community Edition"
License type: "Community"
Expiry date: "Permanent"
Product identifier: "db2dec"
Version information: "11.5"
Max amount of memory (GB): "16"
Max number of cores: "4"
Features:
IBM DB2 Performance Management Offering: "Not licensed"
Product name: "DB2 Advanced Edition"
License type: "Virtual Processor Core"
Expiry date: "Permanent"
Product identifier: "db2adv"
Version information: "11.5"
Enforcement policy: "Hard Stop"
Features:
IBM DB2 Performance Management Offering: "Not licensed"
我以前从未见过这样的展示。看起来两个许可证都应用了“社区”和“高级”版本。
问题:
a) 可以显示两个许可证吗?哪一个是有效的,两者都是?
b) 在“高级”版部分,“硬停”的“执行政策”与什么有关?到目前为止,我一直只看到“软停止”。就像我看到“Advance”版本没有 CPU 内核限制一样,那么“Hard Stop”在此许可证中意味着什么?