标签: db2

有没有办法编辑 DB2 的系统数据库目录以删除数据库?

我们有一个案例,我们想尝试摆脱数据库。数据库仍然存在于磁盘上,当我们对其进行编目时,它会重新出现在数据库管理器中。但是当我们尝试对其执行 DROP 时,它会抱怨找不到别名。如果我们取消目录并尝试重新创建它,它会抱怨数据库名称或别名已经存在。因此,我们被困在无法丢弃它且无法重新创建它的地方。

我相信 SQLDBDIR 文件是 DB2 使用的系统数据库。有没有办法安全地编辑它以从那里获取条目?或者是否有另一个我们可以编辑的文件,或者我们可以运行的命令(在标准的 DROP/CATALOG/UNCATALOG 命令之外)让我们清楚?

这里的任何帮助都会很棒,因为我们在安装的应用程序中越来越多地遇到了这个问题。(它是由笔记本电脑上的磁盘错误引起的,我们尝试在磁盘的不同部分重新安装数据库。)

db2 windows

6
推荐指数
1
解决办法
2319
查看次数

在 DB2 上,谁更新了记录,更新前记录是什么样的?

(SQL Server 2008 R2 Standard,数据库完全恢复)

我有一个包含字段 id、firstname、lastname 的表。执行一条语句:

insert into dbo.sometable (id, firstname, lastname) values (1, 'John', 'Smith')
Run Code Online (Sandbox Code Playgroud)

几个小时后,另一个语句被执行:

update dbo.sometable set firstname='Matt' where id=1
Run Code Online (Sandbox Code Playgroud)

是否有一种方法或工具可以让我们查看记录的历史记录(Y 人在 X 日期插入了一条记录,这些是插入的值,并且 B 人在 A 日期更新了相同的记录,并且这些是更新后的新值)?

熟悉 DB2 for i(即 iSeries 上的 DB2)的用户可能知道一个名为 CRTDBFJRN 的 TAA 工具集命令,该命令可以将给定表上的所有事务转储到另一个表中,从而清晰地显示插入、更新和被删除的字段。更新。

SQL Server Enterprise 有 CDC,但我们有标准版;我可以使用触发器通过存储在审计表中来跟踪更改的数据。触发器的使用将需要另外两个对象 - 触发器和审计表,并且触发器将在每次更改时触发。如果工具可以从交易文件中按需重放交易,那就太好了。

当审计师询问财务记录的历史记录(例如,在一天插入和更新)时,您使用什么工具或执行哪些任务,例如:谁更改了此记录,更改了什么,此记录最初是什么时候输入,原始输入时的数据是什么等?

任何帮助将不胜感激。谢谢你。

sql-server-2008 db2 transaction iseries

6
推荐指数
3
解决办法
5073
查看次数

无需本地安装即可学习 DB2

我将在大约 5 周后开始一份新工作,并希望花一些私人时间来真正掌握尽可能多的 DB2 特性,因为它是新公司使用的 DB。

我是否需要对 DB 进行本地家庭安装,以便我可以使用它并尝试一些东西,或者是否有在线某个地方可以连接到公共沙箱 DB 以练习/测试/播放它?

如果需要安装,我会点击这个链接:https : //stackoverflow.com/questions/3289433/where-to-start-learning-db2-programming

谢谢,斯蒂芬

db2

6
推荐指数
1
解决办法
2279
查看次数

列出 DB2 备份

有没有办法列出 DB2 备份?我所能找到的只是,db2 list history backup all for <dbname>但我认为您需要检查所有这些以查看它们是否已被删除。这似乎是一个简单的问题,但我却是一片空白。

编辑:我在带有 TSM 的 AIX 上使用 DB2 9.7

backup db2

6
推荐指数
2
解决办法
8228
查看次数

数据库管理器未能分配共享内存,因为已达到操作系统内核内存限制

我已经安装了 IBM DB2 10.5.5,我想在那里创建一个新数据库。

当我输入命令时

db2 create database test1
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息

SQL1084C  The database manager failed to allocate shared memory because an 
operating system kernel memory limit has been reached.  SQLSTATE=57019
Run Code Online (Sandbox Code Playgroud)

以下是我运行“ipcs -l”时得到的输出

 ------ Shared Memory Limits --------
max number of segments = 10000
max seg size (kbytes) = 4882812
max total shared memory (kbytes) = 33554432
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 4096
max semaphores per array = 250
max semaphores …
Run Code Online (Sandbox Code Playgroud)

db2 memory

6
推荐指数
2
解决办法
8780
查看次数

最初没有记录表的目的是什么

我最近遇到了这个。在 DB2 LUW(至少 9.5 或更高版本)中定义表时,可以将其定义为NOT LOGGED INITIALLY.

我读过的书中的例子:

CREATE TABLE products (
    productID      INT,
    product_Name   VARCHAR(30)
)
NOT LOGGED INITIALLY;
Run Code Online (Sandbox Code Playgroud)

文档我已阅读状态,该表是不是在执行过程中记录INSERTUPDATEDELETECREATE INDEXALTER TABLE,或DROP INDEX直到COMMIT被执行的语句。之前的所有内容都COMMIT不会被记录。之后的一切COMMIT都是。

显然,只要您将表定义为NOT LOGGED INITIALLY,您就可以随时发出 anALTER TABLE <table-name> ACTIVATE NOT LOGGED INITIALLY将表重新置于非日志记录状态,直到COMMIT再次发出a 为止。

他们举了一个例子,我可以看到这可能有用。我读过的那本书说你可以发布以下内容

ALTER TABLE <table-name> ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
Run Code Online (Sandbox Code Playgroud)

这显然会删除表中的所有数据而不记录它。我可以理解这在您希望清除数据并重新测试的测试环境中是可取的,而无需记录删除以进行回滚的性能开销。

但除此之外,我感到困惑。您是否有任何理由不想在测试环境之外登录表?这种桌子还有什么其他用途?

db2 ddl transaction-log

5
推荐指数
1
解决办法
1万
查看次数

消除 VARCHAR 列中的多余空格

在表中,我有一个定义为 BIGINT(8) 的 ID 列和一个定义为 VARCHAR(100) 的 VOUCHER 列。无论该字段中值的实际长度如何,SQL 始终返回完整长度值,这在 CLI 中可能很麻烦,特别是在选择更多字段时。

这是我得到的示例

ID                   VOUCHER                                                                                               
-------------------- ----------------------------------------------------------------------------------------------------                                                                   
               26462 7083d8374831148f9e2271741529ee37                                                                                                                                                 
               26624 9170220e6971c2414613d0a69b420156                                                                    
               26625 b75d12847a24981d36f7bfcd58e8a230  
Run Code Online (Sandbox Code Playgroud)

我尝试了TRIM//LTRIM函数RTRIM,但没有成功。

我可以用什么来获得这些内容,至少用于显示目的:

ID     VOUCHER                           
------ --------------------------------
26462  7083d8374831148f9e2271741529ee37
26464  9170220e6971c2414613d0a69b420156
26465  b75d12847a24981d36f7bfcd58e8a230
Run Code Online (Sandbox Code Playgroud)

db2

5
推荐指数
1
解决办法
7418
查看次数

数据仓库的隔离级别

我们正在我们的组织中建立一个数据仓库(以及一些数据集市)。我的 DBA 技能主要用于 OLTP 类型的应用程序,但我正在为我们的组织支持 OLAP。

我们最近遇到了一个问题,我们的一个 ETL 程序(在本例中恰好是一个用 Java 编写的消息驱动 Bean)正在使用可重复读取 (RR) 隔离级别。因此,他们遇到了锁。我显然质疑为什么使用 RR。(编辑:我原本以为是DB2端的RR,后来了解到这是JDBC端的RR,映射到DB2端的RS。此后我们也尝试了JDBC端的RC,也就是DB2端的CS 。这似乎解决了一些锁定问题。)

所以我开始从提要/源端和检索端研究数据仓库的建议隔离级别应该是什么。

我真的找不到太多。我发现有几篇文章提到未提交的读取 (UR) 对查询/检索方面有好处,但没有提到馈送方面。我在想应该使用光标稳定性 (CS) 或最高读取稳定性 (RS)。我会站在 CS 一边,但也许这受到了 OLTP 思维的影响?

在我们的例子中,我们仓库的主要提要现在使用 Java 消息队列“实时”完成。从仓库中检索将使用 ETL 工具(在我们的案例中为 DataStage)完成,可能作为夜间作业开始(一些用于每日报告,其他用于月度或季度报告)。这些报告将基于我们的市场。因此,虽然仓库可能会被“实时”提供,但不会被读取或主动查询(至少现在不是)。

诚然,我们使用 DB2 9.7 FP 4(我们希望在明年某个时候迁移到 10.1),并且每个供应商的某些细节可能不同,但是您对 DBA 推荐的提要和读取的隔离级别是什么?为什么?

此外,任何有关 marts 隔离级别的输入都将不胜感激。

编辑:这样就更容易与其他供应商进行比较。这是映射到 JDBC 隔离级别的 DB2 隔离级别名称表。(这是根据《理解 DB2:通过示例直观地学习》一书,因此版权 IBM。)

+------------------------------+-----------------------+
|            JDBC              |          DB2          |
+------------------------------+-----------------------+
| TRANSACTION_READ_UNCOMMITTED | Uncommitted Read (UR) |
+------------------------------+-----------------------+
| TRANSACTION_READ_COMMITTED   | Cursor Stability (CS) |
+------------------------------+-----------------------+
| …
Run Code Online (Sandbox Code Playgroud)

data-warehouse db2 isolation-level

5
推荐指数
1
解决办法
1705
查看次数

在虚拟环境中使用 DB2 链接服务器进行慢速 SQL Server 查询

我有一个使用链接服务器的慢查询问题。让我先列出我的环境,然后我会解决这个问题:

  • 虚拟 Windows 2003 R2 服务器(XenServer 6.1 和 ESXi 5 上的全新部署)
  • SQL Server 2005 SP3
  • 使用 IBM DB2 for iBMASQL OLE DB Provider 创建的链接服务器 在此处输入图片说明
  • 查询本身是一个带有 where 子句的 select 语句,用于选择本月的交易。 在此处输入图片说明

好的,所以问题本身:

  • 虚拟机设置为 4 个 vCore,大约需要 35 秒才能完成
  • 虚拟机设置为 2 个 vCore,大约需要 20 秒才能完成
  • 虚拟机设置为 1 个 vCores,大约需要 5 秒才能完成

我试过修补:

  • 网卡设置
  • MAXDOP 1 选项
  • 查看执行计划

我不知道从这里开始该怎么做。我们希望使用 4 个 vCore,因为服务器将被大量使用。但是,与仅使用 1 个 vCore 相比,查询需要更长的时间。

是否有任何可能的方法来限制链接服务器使用的 vCore 数量?

还有什么我应该看的吗?

谢谢!

performance sql-server db2 linked-server virtualisation query-performance

5
推荐指数
1
解决办法
2616
查看次数

如何在 IBM DB2 Express-C 中运行 DB Admin Tool (GUI)?

我已经在 Windows 中安装了 IBM DB2 Express-C,但是我找不到任何启动管理工具 (GUI) 的快捷方式。安装时,我选择了“管理工具”选项(我已经检查了两次以确保)。

这是开始菜单中唯一可用的快捷方式:

IBM DB2 快捷方式

那么如何运行 IBM DB2 Express-C 的管理工具呢?

db2

5
推荐指数
1
解决办法
2万
查看次数