小编Chr*_*ich的帖子

恢复脱机备份后无法连接到 DB2 数据库

这是针对 AIX 上的 DB2 9.7 Enterprise Server Edition。

我在性能环境中对我们实例中的几个数据库进行了完整的离线备份。

我想将这些数据库恢复到我们的集成环境中。

我运行了命令

db2 restore database database_name from 
/bkp/instance_name/OfflineBackups/RestorePoint/my_restore_point 
taken at 20120321103846 into database_name without prompting;
Run Code Online (Sandbox Code Playgroud)

对于我的每个数据库(当然,适当地修改数据库名称和时间戳)。

每个数据库都根据 DB2 成功恢复。但是,现在当我想检查数据库是否确实恢复了我的想法时,我尝试连接到数据库,但出现错误

    SQL1117N  A connection to or activation of database "database_name" cannot be made 
because of ROLL-FORWARD PENDING.  SQLSTATE=57019
Run Code Online (Sandbox Code Playgroud)

我在以前的数据库中没有任何正在进行的事务,因为所有连接都被强制关闭并且数据库已关闭以进行脱机备份。我该怎么办?

db2 restore db2-luw

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

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

我最近遇到了这个。在 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万
查看次数

数据仓库的隔离级别

我们正在我们的组织中建立一个数据仓库(以及一些数据集市)。我的 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
查看次数

Unix 数据库管理的 Perl 与 Ksh

我意识到这是一个更主观的问题,但我正在向社区寻求指导。

我们公司刚开始拥有 DBA。我们曾经在 IBM 的 iSeries 服务器上使用 DB2 for i,因此确实不需要 DBA(至少在操作上),因为操作系统几乎为我们管理一切。在过去的几年里,我们开始转向 AIX 上的 DB2 LUW。因此,对 DBA 的需求诞生了。我们三个人有兴趣将职业从开发人员转变为 DBA(我就是其中之一)。

因为我们在 AIX 上,所以我们默认使用 ksh 作为我们的数据库管理功能(创建、部署、操作等)的脚本语言。我发现 ksh 非常强大,但我需要执行的一些功能变得相当复杂。这方面的一个例子是我在 Unix 和 Linux StackExchange 上的问题

基于这个问题,以及阅读其他 DB2 管理员的博客,我看到一个普遍的建议,即 Perl 比 ksh 更适合管理脚本。

我意识到 Unix/Linux 论坛对这样的事情会有自己的想法,但我希望从数据库管理的角度来解决这个问题。

不管 DBMS,哪种脚本语言似乎更适合在 Unix/Linux 平台上进行管理?珀尔?克什?(或者其他的?)。作为 DBA,您在使用脚本语言的过程中遇到了哪些优点和缺点,为什么选择这种语言?

我不想要的是“我的语言比你的语言好!”的高度主观的火焰战争。像我以前在开发社区中看到的关于 Java 与 Ruby 等的东西。我正在寻找诚实的、尽可能客观的、关于最适合数据库管理员需求的信息。

scripting unix

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

在 DB2 上测量 INSERT、UPDATE 和 DELETE 命令的性能

我有一个带有日常事务表的 DB2 数据库,每天在一天结束时将其清除为历史记录表。

我通过 java-JDBC INSERT 命令将行插入到这个表中,它们通常需要不到一秒钟的时间来完成,但有时(我仍然不确定是什么模式)它可能需要一分钟才能完成 INSERT 命令,因为我没有在 JDBC 驱动程序上配置超时,它等待命令完成然后继续。

这些 INSERT 命令每天执行数千次,但这只会发生在其中每天大约 5 或 10 次。该表有一些索引和一个附加在 AFTER INSERT 事件上的触发器。

有什么工具或技术可以用来衡量在我的 INSERT 命令上执行什么需要这么长时间?我想知道它是索引,触发器还是出于任何原因,查询本身。

performance db2 insert jdbc iseries

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

IN_ROW_DATA 与 LOB DATA 对索引重建有何影响

我正在使用 Ola Hallengren 的脚本来维护我的数据库。其中一些指标似乎没有从维护中受益。我知道他的脚本有一个较低的门槛(我相信 1000 页),低于这个门槛它不会尝试重建或重组。

对于一个索引,在 dm_db_index_physical_stats 中,聚集索引显示在 2 行上。一种是PK_DATA,分配单元类型IN_ROW_DATA,16页,93.75%碎片化。其他PK数据,LOB_DATA的分配单元类型,57200页,0%碎片化。

我应该期望这个索引被重新组织还是由于不同分配单元类型的不同页数而被跳过?或者它可能会重组失败?

预先感谢您的任何建议。

index sql-server maintenance ola-hallengren

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

DB2 相当于 T-SQL 的 REPLICATE?

在 T-SQL 中有一个方法,REPLICATE(char,N),它会生成一个包含某个字符的 N 个值的字符串。这在查询 JDE 时非常有用。
有谁知道是否有与此等效的 DB2?

db2 functions

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

报告数据库注意事项

我们有一个非常大的数据库,我们想几乎实时地编写它。我们想要获取数据并将其移动到数据库的另一个实例,在该实例之上将是一个 GUI 和 MI 工具,它将能够报告数据。

到目前为止,我有以下几点 - 在规范这个时,其他人有没有我应该记住的任何考虑因素:

  • 数据迁移/保留期限/存储的法律要求
  • 需要在报告数据库中可用的表/字段
  • 许可/用户访问
  • 需要查询的关键字段
  • 灾难恢复要求
  • 复制时间

database-design reporting

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

需要在数据库中放置外键的建议

我有customers. 该customers表是这样的

+------------------+
|     Customers    |
+------------------+
| id  (PK)         |
| business_email   |
| business_name    |
| customer_name    |
| payment_terms    |
| currency         |
| business_address |
| city             |
| state            |
| postal_code      |
| country          |
| phone            |
| created_at       |
| updated_at       |
+------------------+
Run Code Online (Sandbox Code Playgroud)

现在,我希望把送货地址在我的应用程序,客户可以任意提他的航运address.SØ我做了一个额外的表shipping address像这样

+------------------+
| Shipping Address |
+------------------+
| id  (PK)         |
| contact_name     |
| contact_address  |
| delivery_address |
| created_at …
Run Code Online (Sandbox Code Playgroud)

foreign-key database-design database-recommendation

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