AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-1342

Chris Aldrich's questions

Martin Hope
Chris Aldrich
Asked: 2016-02-06 09:38:43 +0800 CST

事务日志备份串行还是并行?

  • 15

我们恰好在使用 SQL Server 2012 标准版。我也碰巧使用 Ola Hallengren 的脚本来提供一个简单、更灵活的框架来进行备份和维护。

这个问题与其说是关于 Ola 的脚本,不如说是关于最佳实践。我意识到最终的答案是“这取决于贵公司的要求”。但我正在努力征求社区的建议,以了解如何最好地满足我对公司要求的理解。

我希望每 15 分钟设置一次事务日志备份。这样我们希望丢失不超过 15 分钟的数据。我应该设置一个使用 ALL_DATABASES 的作业吗?还是为每个数据库设置一个作业并并行启动它们更好?我问,因为根据我对 Ola 脚本运行情况的看法,我感觉备份是连续启动的。串行的缺点是每个连续的备份都要等到另一个备份完成。这可能会增加备份之间的时间量(即大于 15 分钟)。另外,我担心的是一个备份失败会阻止其他备份发生,我不希望出现这种情况。我希望其他人继续支持。

那么,Ola 的脚本是串行执行的,并且失败会停止连续备份,这是真的吗?

每个数据库都有一份工作更好吗?还是一项工作就可以完成所有工作?我倾向于独立的工作,但我希望了解 SQL Server DBA 通常倾向于做什么。

sql-server backup
  • 3 个回答
  • 827 Views
Martin Hope
Chris Aldrich
Asked: 2014-11-07 11:52:04 +0800 CST

每个 AIX LPAR 的 DB2 实例数量正确平衡的指标

  • 0

我有一个问题一直困扰着我,但我只是不知道如何验证它。我们在我们的商店的 AIX 上运行 DB2 LUW。我们的 AIX 目前是 7.1。对于大多数安装,我们的 DB2 为 9.7 FP 4,对于我们最新的数据库,为 10.5 FP 2。我们甚至在同一个“盒子”上混合安装(即 9.7 和 10.5)。

我们的盒子当然是 LPAR,由我们的 AIX 管理员提供给我们。AIX 管理员也是我们的存储管理员,因此所有磁盘都是 SAN。我们的数据库服务器没有太多的物理信息。

一直困扰我的是每个 LPAR 的 DB2 实例的正确平衡是多少?我开始看到一些关于 DB2 自动配置自身的奇怪行为。在一个 DEV LPAR 上,我们有以下配置:

请注意以下情况适用于所有实例:HEALTH_MON设置为OFF,并且对于每个数据库AUTO_MAINT都设置为 。OFF我们确实允许自调整内存管理器 (STMM) 在默认情况下打开,并为此设置了所有必要的参数(即,正确参数中的零或 AUTOMATIC,DB2 提供的默认值...)。如果我们构建一个 OLTP 数据库,那么我们将 instance parm 设置MAX_QUERYDEGREE为1并将db parm设置INTRA_PARALLEL为。如果我们构建一个 OLAP 数据库(单独的实例),我们将实例参数设置为和并将数据库参数设置为NODFT_DEGREE1MAX_QUERYDEGREEANYINTRA_PARALLELYESDFT_DEGREEANY. 我们也不会尝试在同一个实例中混合 OLAP 和 OLTP 数据库,尽管部分问题是是否在同一个 LPAR 上混合实例......

这是我们在一个 DEV LPAR 上的内容:

  1. 一审是9.7。包含一些 OLAP 数据库,尽管它们非常小,因为它们用于测试 DDL 更改。
  2. 二审是9.7。包含供开发人员使用的 OLAP 数据库“游乐场”。(这应该是我们一有机会就退役的。)
  3. 第三个实例是 10.5。包含来自实例 2 的 playground 数据库的官方 DEV 版本。
  4. 第四个实例是 10.5。带有本地元数据字典的 OLTP 数据库。
  5. 第五例是10.5。用于查找数据的 OLTP 数据库。
  6. 第六例是10.5。ODS 数据库(不确定这是 OLTP 还是 OLAP....),供开发人员将来自两个事务系统的数据联系起来。

现在磁盘不是最大的问题,因为它由 SAN 处理。由于这是一个 LPAR,甚至内存和 CPU 也被虚拟化了。但是我在记忆中看到了一些奇怪的东西。

一个 OLAP 数据库(操场和官方 DEV)都相当大。开发人员正在对大量数据进行 ETL 测试,并根据他们对 QAT 和 PROD 构建的官方请求估算大小。自从其中一个开始增长以来,我注意到新的实例构建和新的数据库构建现在默认关闭了 STMM。我可以手动将其重新打开,但关键是我觉得这令人不安。默认情况下是否启用 STMM 是由 DB2 在创建时根据系统资源决定的。所以,对我来说,这就是说 DB2 觉得它没有足够的资源来进行自动管理,所以它试图限制内存,希望它至少能获得那么多。(我对此的猜测。)

当我与 AIX 管理员讨论这个问题时,他们似乎并不认为内存和 CPU 是个问题。他们说我们并没有真正充分利用我们的潜力,所以在他们看来(我说的很笼统)我们可以将所有开发实例放在同一个 LPAR 上。或其他环境类似。同样,这是松散的,因为他们了解 HA 和 DR 场景的分离点。

不管怎样,这让我想知道,在知道何时可以将实例添加到 LPAR 或何时应该拆分到其他 LPAR 之间,他们是否有任何指示或指南?我确定答案是“视情况而定”,但我正在寻找任何近似值或准则?特别是如果它们在 OLTP 和 OLAP 方面有所不同。

best-practices db2
  • 1 个回答
  • 242 Views
Martin Hope
Chris Aldrich
Asked: 2014-09-24 08:43:45 +0800 CST

我对事实表粒度的理解是否正确?

  • 8

我和我们公司的另一位 DBA 的任务是审查供应商为我们开发的数据库设计。供应商表示他们使用 Kimball 作为他们设计的基础。(注意:我不是在寻找 Kimball 与 Inmon 等的论点。)他们设计了一个具有多个事实和维度的集市。

现在平心而论,我们公司从来没有设计过一个市场。我们一直让顾问来做这件事。而且我们从来没有被派去上课或其他任何事情。所以我们对仓储/集市/维度建模等方面的知识是基于我们所拥有的一些经验,我们可以在互联网上找到的,以及自学(我们有 Inmon 和 Kimball 的书,并且正在努力通过它们) .

现在舞台已经为我的知识水平做好了准备,我们来迎接设计挑战。

有一个名为“索赔损失统计”的事实表(这是用于保险的)。他们正试图获取索赔的付款(累积到每月的水平),然后是准备金中的钱(有点像索赔的银行账户)。他们希望看到每月的付款金额(没什么大不了的)。但他们希望看到准备金的账户当前余额。

我举个形象的例子。

假设我们为索赔设置了 1000 美元的准备金。这被搁置一旁(所以在某些方面它的功能有点像银行账户)。

2014 年 10 月,我们还没有支付任何费用。因此,企业希望在 10 月底看到付款和准备金余额。

-----------------------------------------------
-  MONTH_YEAR  -  PAYMENTS -  RESERVE_BALANCE -
-----------------------------------------------
-      102014  -      0.00 -          1000.00 -
-----------------------------------------------

然后十一月来了。我们支付 100 美元、150 美元和 75 美元的款项。他们希望看到这些合计金额和余额中的准备金如下:

-----------------------------------------------
-  MONTH_YEAR  -  PAYMENTS -  RESERVE_BALANCE -
-----------------------------------------------
-      102014  -      0.00 -          1000.00 -
-----------------------------------------------
-      112014  -    325.00 -           675.00 -
-----------------------------------------------

然后说我们在 12 月的付款为零,然后在明年 1 月再增加 200 美元。

-----------------------------------------------
-  MONTH_YEAR  -  PAYMENTS -  RESERVE_BALANCE -
-----------------------------------------------
-      102014  -      0.00 -          1000.00 -
-----------------------------------------------
-      112014  -    325.00 -           675.00 -
-----------------------------------------------
-      122014  -      0.00 -           675.00 -
-----------------------------------------------
-       12015  -    200.00 -           475.00 -
-----------------------------------------------

这是我挣扎的地方。我的理解是付款部分是正确的。它们都在每个记录中按月汇总。因此,如果您需要年度、季度等,您可以进一步汇总。

但储备金额不同。这是一种平衡。企业希望查看每个月的余额有多少。但是您不能在此字段上进行聚合。如果你这样做了,你会得到一些不稳定的结果。

不知何故,这让我觉得是错误的。但我不能如实说我已经建模足够多或知道足够多。我只能说我知道的。据我所知,Fact 中的所有值都应该具有相同的粒度。

这两个数字都处于“月份”的相同粒度,但它们不是从它们所代表的角度来看。一个是一个月内的总美元。另一个只是平衡。

这个对吗?我一直在反对这个设计。我这样做有错吗?实际上可以这样做吗?或者我对糟糕设计的“代码气味”感觉是否准确?

任何帮助,将不胜感激。注意:请不要只说“应该是 X 方式”,请解释为什么应该这样,以便我可以从中学习。

编辑:嗯,我了解到我对事实的初步理解是错误的。粒度不是每月一次。粒度是事务级别。所以这意味着在 MONTH_YEAR(即实际上是财务报告期)内将有多个付款和恢复交易。这些将按日期或交易日期发布。但由于业务部门看到的先前报告,以及数据如何存储在遗留系统中,他们希望同时放置交易数据(每行一行)和储备月结余额(每月一行)。

一旦我了解到这一点,我意识到问题不在于添加剂与非添加剂,甚至是半添加剂,因为它是谷物,这是我从一开始就怀疑的。我们的 DBA 团队与项目团队讨论了这个问题,并报告说他们试图将两种不同的颗粒放在同一个事实中,这是不正确的。他们应该将交易提高到每月的水平,然后允许他们获得付款、回收和每月储备余额(即半附加事实),因为一切都将按月进行。或者他们需要找到一种方法将储备余额分解为交易以保留交易级别的粒度。或者他们需要将事实分解为两个事实。一个可以是准备金余额的每月级别。另一个可以在支付和恢复的交易级别。(没有理由他们也不能将付款和追偿放在每月水平的事实中。这取决于业务需求。)

鉴于我所学到的,我会将托马斯的答案标记为正确答案。但是,我觉得我从原始问题开始的讨论仍然值得其他人学习,因此我将保留问题的原始部分。我还打算奖励 nikadam 的回答,因为它教会了我很多关于加法、非加法和半加法事实的知识,并纠正了 我对维度建模的许多误解。

database-design dimensional-modeling
  • 2 个回答
  • 4793 Views
Martin Hope
Chris Aldrich
Asked: 2014-07-31 10:39:32 +0800 CST

有人在 DB2 LUW 中使用模块吗?

  • 1

我们的环境当前是 AIX 上的 DB2 9.7 Fix Pack 4。

我正在设计和编码一些 SQL PL 存储过程,负责将数据归档到归档模式中,然后从主模式中清除旧的/不需要的数据。

我创建了一些用户定义类型 (UDT),特别是行类型和游标类型。我正在考虑将我的逻辑分成三个存储过程。Proc A将用于清除与我的主 EVENT 表相关的特定数据集(即,EVENT以及它下面的所有内容)。我真的不希望其他人能够调用它。我只想模块化逻辑。Proc B将从EVENT最终用户想要的(和其他表)中归档数据,然后调用Proc A以清理原始数据。Proc C将用于寻找EVENTs可以丢弃的东西,然后调用Proc A实际工作。

现在我可以创建彼此独立的所有这些,然后以这种方式部署它们。或者....我可以使用一个模块。据我了解,模块允许我将相关功能(类型、存储过程、函数等)关联在一起。它还允许我决定我希望哪些对象可以在模块外部访问,即可以直接调用/使用,哪些只能在模块内部调用(例如上面的情况,我可以隐藏存储的Proc A,但允许B并C调用它)。

这听起来非常有趣。但它也有缺点。我猜它不是任何 SQL 标准的一部分,而是特定于 IBM DB2 的东西。即使这样,您也不能通过 Data Studio 或 Control Center 直接与模块交互(除了CALL外部程序/函数)。而且您也不能直接在 IBM 的 InfoSphere Data Architect 中创建它们。所以我必须独立维护 DDL。

所以模块概念听起来很方便。我可以隐藏一些东西并选择可以调用的东西以确保有人不会滥用任何东西。

但是,鉴于命令行之外的 IBM 工具似乎不支持它……我想知道……谁都使用模块(特别是在 DB2 LUW 中)?有没有人?这有意义吗?如果没有,是否有另一种方法可以实现模块化代码的想法,同时使“模块”无法直接调用?

stored-procedures db2
  • 2 个回答
  • 903 Views
Martin Hope
Chris Aldrich
Asked: 2013-10-10 10:30:00 +0800 CST

有没有办法确定自动存储表空间?

  • 1

首先,我们在 Windows 和 AIX 上都使用 DB2 ESE 9.7 FP 4。

我正在尝试动态确定是否通过自动存储设置表空间(因此我们可以动态编写脚本如何在必要时降低高水位线)。我可以通过类似db2 list tablespaces或db2 list tablespaces show detail.

我还针对系统目录表和视图(即select * from syscat.tablespaces和select * from sysibm.systablespaces)发出了查询。

我只能说表空间被定义为 SMS 或 DMS。如何判断表空间是否配置为自动存储?我知道必须有一种方法可以动态地做到这一点,因为如果我使用 IBM Data Studio 并访问表空间“查看”并单击属性,我可以查看表空间是否为自动存储。我假设后面必须有一个配置或一个查询。

只是想知道,我们如何解决这个问题?

db2 tablespaces
  • 1 个回答
  • 4250 Views
Martin Hope
Chris Aldrich
Asked: 2013-09-18 07:09:48 +0800 CST

DB2 9.7 LUW - 当我是 DBADM、SECADM 时如何设置 SESSION_USER?

  • 0

根据我之前提出的问题,我正在尝试按照 mustaccio 的回答推荐的解决方案,据此我有另一个 ID 来创建我的 DDL 对象。

我一直在尝试遵循名为“DB2 安全性,第 8 部分:十二个 DB2 安全性最佳实践”的 IBM 开发人员工作文章来尝试这样做。我注意到这篇文章当时似乎是为 DB2 8.2 编写的。我目前正在为 LUW 开发 DB2 9.7 修订包 4 ESE。具体来说,我在 AIX 上。我目前正在测试如何在我的本地系统上执行此操作,即 Windowx XP SP3 并使用 DB2 9.7 fix pack 4 Express-C for LUW。

在这种情况下,我有一个名为 db2admin 的本地用户帐户(即实例所有者)(在我们的 AIX 系统上不是这样)。此标识属于 DB2ADMNS 组。由于它与我的 Windows 帐户不同,我确保首先附加到实例,然后创建我的数据库以确保在我的数据库上授予 db2admin DBADM, SECADM, DATAACCESS, ACCESSCTRL。

db2 attach to DB2 user db2admin using ********
db2 create database SECTEST automatic storage yes on 'C:\' dbpath on 'C:\'
  using codeset UTF-8 territory US collate using system

之后,我以 db2admin 身份连接到系统

db2 connect to sectest user db2admin using ********

然后为了测试一下,我确保我授予CONNECT了SECADM我的 Windows 帐户

db2 grant connect,secadm on database to user myid

然后我希望设置我的虚假 ID 以在其下创建对象。我有意将此 ID 创建为九个字符,以帮助防止从命令行连接到 DB2,但仍然允许通过SET SESSION_USER. 为了简单起见,我将我的 ID 命名为 bobabob97。

所以我做了以下事情:

db2 grant CREATETAB,IMPLICIT_SCHEMA,BINDADD,CREATE_NOT_FENCED_ROUTINE,
  CREATE_EXTERNAL_ROUTINE on database to user bobabob97
db2 grant use of tablespace userspace1 to user bobabob97

在这一点上,我认为我已经正确设置了所有内容。我没有明确地在数据库上授予 bobabob97 CONNECT,因为我不希望任何人能够使用此 ID 连接到数据库。

所以现在我尝试切换到该 ID 来创建测试,创建我的对象并在通用 ID 下拥有它们。

db2 set session_user=bobabob97

但后来我收到以下错误:

DB21034E 该命令被作为 SQL 语句处理,因为它不是有效的命令行处理器命令。在 SQL 处理期间它返回: SQL0552N "DB2ADMIN" 没有执行操作 "SET SESSION AUTHORIZATION" 的特权。SQLSTATE=28000

所以,现在我很困惑。我当前以 (db2admin) 身份连接到数据库的 ID 在数据库上具有DBADM、SECADM、DATAACCESS和ACCESSCTRL(当然它隐含地包含CONNECT、CREATETAB、BINDADD、QUIESCE_CONNECT、IMPLICIT_SCHEMA、LOAD、CREATE_NOT_FENCED_ROUTINE和CREATE_EXTERNAL_ROUTINE)。我本质上是数据库上的“神”。为什么我不能切换到这个ID?

我试过玩GRANT SETSESSIONUSER,但我知道SECADM不能授予自己。我在这里做什么?

db2 security
  • 1 个回答
  • 4130 Views
Martin Hope
Chris Aldrich
Asked: 2013-07-26 12:30:58 +0800 CST

如何撤销 DBADM 并清除 DB2 LUW 中的任何相关对象

  • 0

这个问题之所以开始,是因为我们获取了生产备份的副本并将它们恢复到较低的环境中(当然有加扰数据)供开发人员练习和/或调试。

我们的 ID 被分配DBADM为 、SECADM、DATAACCESS和ACCESSCTRL(主要是实例所有者)。当我们恢复到较低的环境时,我们最终需要以原始实例所有者的身份登录,并将上述相同的权限(DBADM、SECADM、DATAACCESS和ACCESSCTRL)授予新的目标实例所有者。

我认为将原始 ID 保留在数据库中不是一个好主意,因此我试图撤销其特权。在我的包重新绑定开始失败后不久,因为显然有包与该原始 ID 相关联。不知道它们包含什么以及我是否可以/应该删除它们(即使我认为删除它们是无害的???)我最终将特权恢复给原始实例所有者并将其保留在那里。

这一直困扰着我。DBADM具有、SECADM、DATAACCESS、 和的权力的 IDACCESSCTRL不应该只是躺在周围。对我来说这是一个安全漏洞。对我来说,应该撤销 ID,并且应该执行任何其他需要执行的清理以确保数据库安全。如果说我会退出公司或我的 DBA 同事也会这样做,情况也是如此。我们希望撤销 ID 并清理和/或转移对象的所有权以消除任何安全漏洞。

问题是,我不知道需要清理什么。我在谷歌和 IBM 的文档上做了一些探索,但我找不到任何建议从系统中删除如此高的用户时通常应该采取的步骤。甚至是有BINDADD权限的用户?

你们都以什么顺序删除/撤销了什么?有没有办法编写脚本/自动化?您如何知道可以删除哪些软件包?还有其他需要移动/转移的东西吗?

还有其他人遇到这个吗?想法?经验?

db2 security
  • 1 个回答
  • 1159 Views
Martin Hope
Chris Aldrich
Asked: 2013-07-10 05:00:50 +0800 CST

DB2 LUW:临时表空间是否应该与其他表空间共享缓冲池?

  • 1

我们正在调整我们公司刚刚编写的大型应用程序。该调整的一部分包括调整数据库。我们在 AIX 上运行 DB2 LUW。具体来说,我们使用的是 9.7 Fix Pack 4(尽管我们希望在今年的某个时候迁移到 10.1 Fix Pack 2)。

我们最初构建了仅根据数据大小需要的表空间(即,如果所有表都适合 4K 表空间,我们只创建 4K 表空间,我们的想法是为什么创建表空间以在未使用时占用更多磁盘)。这对于临时表空间也是一样的。

开发人员告诉我们,他们通过添加 32K 临时表空间获得了更好的性能。所以他们所有的表都进入了 4K、8K 或 16K 的表空间。然而,他们添加了一个 32K 临时(有自己的缓冲池),并声称他们将应用程序的一些事务时间减半。

当我想到它时,我认为这是有道理的。我猜优化器将 32K 空间视为执行连接/排序的好地方,并且可以使用 32K 与 4K 的更多内存。

我的同事说他(不管上述情况如何),他在某处读到 DBA 应该始终将临时表空间放入他们自己的缓冲池中。当我要求他提供阅读链接时,他不记得了。

我想知道......临时表空间是否应该总是有自己的缓冲池?这对连接/排序性能有帮助吗?这是一个好习惯吗?

其次,总是为这些连接/排序创建一个 32K 缓冲池和 32K 临时表空间是否有意义?

performance db2
  • 1 个回答
  • 2820 Views
Martin Hope
Chris Aldrich
Asked: 2013-01-04 07:36:12 +0800 CST

用于 Unix 数据库管理的 Perl 与 Ksh

  • 5

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

我们公司刚开始拥有 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
  • 2 个回答
  • 1409 Views
Martin Hope
Chris Aldrich
Asked: 2012-11-20 11:02:22 +0800 CST

数据仓库的隔离级别

  • 5

我们正在我们的组织中建立一个数据仓库(以及一些数据集市)。我的 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 推荐的提要和读取隔离级别是什么?为什么?

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

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

+------------------------------+-----------------------+
|            JDBC              |          DB2          |
+------------------------------+-----------------------+
| TRANSACTION_READ_UNCOMMITTED | Uncommitted Read (UR) |
+------------------------------+-----------------------+
| TRANSACTION_READ_COMMITTED   | Cursor Stability (CS) |
+------------------------------+-----------------------+
| TRANSACTION_REPEATABLE_READ  | Read Stability   (RS) |
+------------------------------+-----------------------+
| TRANSACTION_SERIALIZABLE     | Repeatable Read  (RR) |
+------------------------------+-----------------------+
db2 data-warehouse
  • 2 个回答
  • 1863 Views
Martin Hope
Chris Aldrich
Asked: 2012-08-17 08:29:38 +0800 CST

有没有办法在 InfoSphere Data Architect 中创建可重用的基表定义?

  • 1

我们公司选择使用IBM 的 InfoSphere Data Architect (IDA)来对我们的数据仓库和数据集市进行数据架构设计。

数据架构师最初为我们的集市设计了几个“可重复使用”的表。换句话说,像 CUSTOMER_DIMENSION 这样的表可能在结构上驻留在多个集市中。每个集市都有自己的数据副本。

我相信为了让事情变得简单,他们在他们在 IDA 中称为 DB2ADMIN 的相同“模式”中定义了所有表(维度和事实)。

由于集市只能有一个事实表,我必须查看表与事实表的关系图,以确定应为特定集市将哪些表生成到 DDL 文件中。截至目前,每个集市都物理地驻留在一个数据库中自己的模式中。因此,我不仅必须手动选择用于 DDL 生成的表,而且还必须手动调整每个 DDL 文件以覆盖架构。这并不理想,因为它是一个容易出错的过程。

有没有办法有一个表的“基本”定义,然后将它或任何东西继承到 IDA 中的真实表中?我想要做的是在工具中拥有与我们在服务器上拥有的相同的模式定义。我只希望适用的表显示在每个模式中(作为集市应该是 - 一个事实,它只关心它的维度表)。但是为了节省工作,我更希望表定义位于一个地方。因此,架构师可以进行一项更改,但我们可以更轻松地生成我们的表格。

这可能吗?那里有 IDA 专家吗?

tools schema
  • 1 个回答
  • 126 Views
Martin Hope
Chris Aldrich
Asked: 2012-07-14 07:58:49 +0800 CST

索引应该自动放入它们自己的缓冲池中吗?

  • 1

我们使用在 AIX 上运行的 DB2 LUW(具体来说,我们目前使用的是 9.7 FP4)。

根据 IBM 的最佳实践,他们建议在构建表时将数据、索引和 LOB/LONG 数据分别放入各自的表空间中。(原因是更好地控制磁盘、维护、备份等。)

表空间必须与缓冲池相关联。现在我们的大多数表和索引都适合 4K 缓冲池和表空间。

通常我们的脚本会设置一个 4K 缓冲池 BP4K。然后我们设置至少两个 4K 表空间(因为我们没有很多 LOB):TS_DAT_4K 用于数据,TS_IND_4K 用于索引。默认情况下,我们刚刚将这两个表空间分配给缓冲池 BP4K。

我想知道的是:既然索引在它们自己的表空间中,是否也应该给它们自己的缓冲池?

我想知道这是基于优化的原因。如果索引有自己的缓冲池,那么它们更有可能保留在内存中(而不是因为表记录被读入而被推出内存)。这将允许更快地扫描索引以查找表中的记录。由于索引将不再与表共享同一个缓冲池,因此现在可以将更多表保留在内存中以进行逻辑检索而不是物理读取。所以我的想法是,这会减少物理 I/O,从而有助于数据库的性能/维护。

我也忍不住想知道这是否只是预优化,这在 99% 的情况下是一件坏事,引入了额外的开销等(特别是因为我们还没有确定我们需要单独的缓冲池关于当前性能。当然,正在开发的应用程序还没有投入生产,仍然需要数据库调整....)

对此有何想法?这是最佳做法吗?或者只是预先优化和过度思考?

performance index
  • 1 个回答
  • 689 Views
Martin Hope
Chris Aldrich
Asked: 2012-06-28 11:26:55 +0800 CST

物理部署数据集市的最佳实践是什么?

  • 4

我们公司才刚刚开始涉足商业智能。我们有一些架构师正在设计我们的数据仓库和数据集市。他们对两种设计都使用星型模式。

架构师表示,他们用于集市的设计是相同的,我们只需要它的“另一个副本”供任何客户希望查询他们的集市,并且每个集市的数据可能不同。

我们只有一个市场开始。这是一个 AIX LPAR、一个 DB2 数据库实例和一个具有一个模式的数据库。

现在我们有另外三个数据集市的请求。最佳做法是什么?这些应该是同一数据库中的不同模式吗?每个集市应该是同一实例中的单独数据库吗?我们应该有单独的数据库、单独的实例吗?

从物理部署和维护的角度来看,这里的最佳实践是什么?或者使用什么准则来定义什么时候应该是哪个选项?

best-practices physical-design
  • 1 个回答
  • 1636 Views
Martin Hope
Chris Aldrich
Asked: 2012-05-24 12:43:19 +0800 CST

存储过程最佳实践:有围栏还是无围栏?

  • 7

我相信我了解受保护和不受保护的存储过程背后的原因。

Fenced 在数据库“外部”运行(在我们的例子中是 DB2),以防止出现指针等问题时数据库引擎可能发生的损坏。

Unfenced 在数据库“内部”运行,这意味着性能更好。

根据我的研究,SQL PL 基本上总是不受保护的,因为它是 SQL,因此不能像编程语言那样访问内存。

C/C++ 和 Java 过程可以运行受保护或不受保护。但是由于它们可能会访问内存,因此应该考虑将它们隔离运行,除非可以确定代码的质量不会崩溃并且需要性能。

首先,我对上述内容的理解是否正确?

接下来,从所有存储过程(甚至定义为 SQL PL 的存储过程)开始作为防护通常是一个最佳实践吗?

存储过程的任何其他最佳实践,尤其是与防护和/或安全相关的?

编辑:进一步的研究表明 SQL PL 程序不能运行。因为它们不包含任何可能损害数据库引擎的代码,例如指针或文件 I/O,所以 DB2 知道它们是安全的并在引擎内部运行它们(即不受保护)。话虽如此,我仍在寻找有关所有其他存储过程的最佳实践。

stored-procedures best-practices
  • 2 个回答
  • 3673 Views
Martin Hope
Chris Aldrich
Asked: 2012-05-18 11:44:47 +0800 CST

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

  • 5

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

我读过的书中的例子:

CREATE TABLE products (
    productID      INT,
    product_Name   VARCHAR(30)
)
NOT LOGGED INITIALLY;

我已阅读的文档指出,在执行INSERT、UPDATE、DELETE、CREATE INDEX、ALTER 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;

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

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

db2 transaction-log
  • 4 个回答
  • 12974 Views
Martin Hope
Chris Aldrich
Asked: 2012-04-17 11:30:18 +0800 CST

DB2 中的绑定到底是什么?

  • 8

我最近在我们公司从一名 Java 开发人员转变为一名真正的 DBA。可以说,我正在学习如何成为一名 DBA(这实际上是我们公司的一个新职位)。

我见过几个我们运行命令的脚本DB2 BIND bind_file other_parameters。

我对这些做什么感到困惑。我问过我们的其他 DBA,但他们无法以一种有意义的方式向我解释。我查看了IBM 的 BIND 命令信息中心,但我也不清楚。

我知道绑定在某种程度上很重要,因为我们应该定期在我们的数据库上运行 REORGS、运行 STATS 和重新 BIND 以帮助提高性能。

由于我仍然是一个 n00b DBA,我想知道是否有人可以提供“什么是傻瓜绑定?” 解释?

编辑:在以下答案的版本中,我最近遇到了以下 developerworks 文章:“DB2 包:概念、示例和常见问题:了解 DB2 系统和用户应用程序包”。非常有帮助。特别是对于系统包,这是我们最常遇到的。


20130905 编辑:DB2 DBA Ember Crooks 的这篇博客文章在绑定及其含义方面非常出色。她还写了一篇关于未找到包裹以及何时为绑定增加 CLIPKG 编号以及这意味着什么的条目。这些文章解释得很好。基本上就像阅读“DB2 Binding and Packages for Dummies”(如果存在这样的话)。

db2
  • 1 个回答
  • 34412 Views
Martin Hope
Chris Aldrich
Asked: 2012-03-30 10:57:26 +0800 CST

还原脱机备份后无法连接到 DB2 数据库

  • 6

这适用于 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;

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

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

    SQL1117N  A connection to or activation of database "database_name" cannot be made 
because of ROLL-FORWARD PENDING.  SQLSTATE=57019

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

db2 restore
  • 2 个回答
  • 31799 Views
Martin Hope
Chris Aldrich
Asked: 2012-03-03 07:23:48 +0800 CST

使用索引进行变更管理的最佳实践

  • 7

我们的 IT 商店首先开始建立一组 DBA。我们所有人(包括我自己)都来自应用程序开发/架构领域,因此 DBA 领域对我们来说还是相当陌生的。

在构建 DBA 团队的同时,我们正在寻求构建变更管理程序和流程(希望基于最佳实践),以便在我们需要移动变更时使用。

我发现以下帖子主要对触发器、存储过程和/或 DDL 更改很有帮助。但它不一定涉及索引或供应商数据库。

我们混合使用了自己的数据库和供应商数据库。在我们的案例中,一些供应商(虽然不是全部)正在与我们公司合作构建数据库和应用程序。我们正在“上线”之前对我们的应用程序进行性能测试。因此,我们正在大量分析索引(或缺乏索引)。

当我们遇到我们认为应该制定的索引时,我们如何最好地处理与这些有关的变更管理,包括我们自己的数据库以及任何供应商?

你在店里做什么?我不太担心工具,而是担心过程。

编辑:到目前为止,我很感谢这个问题的反馈、评论和答案。我注意到有些答案有点特定于工具。如果可以的话,我正在寻找更多“不可知论者”的做法。

然而,如果不可知论是不可能的,那么对于工具集,我们主要使用 IBM DB2 LUW(实际上是在 AIX 上)。我们有一些 DB2 on Windows 和 DB2 for i(IBM 的 i5/OS),但我们主要是 AIX DB2。我们确实使用源代码控制,特别是 Subversion。

同样,寻找一般的最佳实践,但上面是我们使用的是供应商特定的。

编辑: 当前决定:我们打算跟踪我们的推理以及我们的变化。所以我们将在我们的问题跟踪软件(在我们的例子中是 JIRA)中打开一个问题。现在我们可以添加关于更改优先级的文档、支持更改应该是什么的数据、更改以及来自测试更改的另一个环境的更改结果。

然后我们还打算跟踪我们在 SVN 中的脚本更改(很像下面的建议)。这样我们就可以跟踪哪里存在什么版本。这可以记录在我们的 JIRA 问题中(以及我们使用的任何其他审计软件,即粘贴链接)。我们可以更确定地知道什么变化发生在什么环境以及为什么。然后,我们还可以跟踪索引是否是我们在供应商实施之外或在其实施之前添加的,等等。)

best-practices index
  • 3 个回答
  • 1223 Views
Martin Hope
Chris Aldrich
Asked: 2012-02-23 11:06:21 +0800 CST

如何使用 Cognos 解决此数据源连接问题?

  • 4

我们(最近)安装了 IBM 的 Cognos 10 作为我们的商业智能报告工具。我们报告的大多数数据库都是 DB2 9.7 LUW Enterprise Edition。我们安装了 DB2 Runtime-Time Client,以便 Cognos 能够访问驱动程序以与 DB2 通信。

我们的 iSeries(又名 AS/400)上还有一些遗留系统和数据库——所以这意味着 DB2 for i。我们现在需要 Cognos 来识别这些数据库。根据我们阅读的内容,我们需要安装 DB2Connect 以从 DB2 LUW 的角度授予对 DB2 for i 的访问权限。

我们的 Cognos 安装在 Windows Server 系统上。我们在同一系统上安装了 RTC,并且可以对 DB2 LUW 数据库进行编目。我们可以让 Cognos 使用这些数据库创建数据源。

为了获得 iSeries 功能,我们最近安装了 DB2Connect(在与 Cognos 和 RTC 相同的系统上)并且能够对 iSeries 数据库进行编目并连接并调用它。但是我们无法让 Cognos 查看编目数据库。它只是看起来不存在。

我们查看的一些文档使您看起来无法在 Cognos 的同一进程中本地访问两个不同的 DB2 驱动程序。

我们的想法:

  1. 卸载 RTC 并安装 DB2Connect 以及通过它编目的所有数据源,然后让 Cognos 查找它们。我们对这种方法的担忧是,我们担心 Cognos 可能会丢失现有报告和已设置项目的信息。我们不想搞砸/丢失其他团队已经完成的工作。
  2. 我们想知道是否有一种干净的方式从 RTC 迁移到 DB2Connect,以便我们可以将连接从一个转移到另一个。我们关心的是……我们首先如何让 DB2Connect 被 Cognos 识别?
  3. 是否有其他方法可以对 iSeries 数据库进行编目和/或让 Cognos 识别它们?

想法?想法?

编辑:我们公司决定不等了。他们聘请了一名顾问来帮助我们从头开始重建,以便我们更好地了解产品、它的安装、工作方式等。

话虽如此,我仍然欢迎对此有任何想法或想法。

db2 configuration
  • 1 个回答
  • 2129 Views
Martin Hope
Chris Aldrich
Asked: 2011-11-19 13:04:40 +0800 CST

如何在 Windows 上使用 DB2 9.7 向本地 db2admin 授予所有权限?

  • 10

我有一台装有 OS Windows XP Professional Edition Service Pack 3 的笔记本电脑作为我的开发人员站。

我已经下载并安装了 Express-C 版本的 IBM DB2 UDB 9.7 修订包 4。

我有一个名为 db2admin 的本地 Windows 帐户,我将其用作本地数据库管理员,用于本地安装 DB2(仅用于开发人员)。

运行命令行窗口时,我可以毫无问题地运行以下命令:

db2 attach to db2 user db2admin using xxxxxxxxxx

这允许我附加到我的名为 DB2 的实例。

我可以运行我的创建数据库命令。

然后我尝试连接到数据库以授予我在 DB2 中的 db2admin 帐户的所有权限。

db2 CONNECT TO MYDB;
SET SCHEMA DB2ADMIN;
db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER DB2ADMIN;
CONNECT RESET;

但是,当我运行它时,DB2 告诉我我的实际 Windows 用户帐户 (synprgcma) 无权授予用户 db2admin 权限。

因此,如果我将第二个脚本更改为以下内容:

db2 CONNECT TO MYDB USER db2admin USING xxxxxxxx;
SET SCHEMA DB2ADMIN;
db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER DB2ADMIN;
CONNECT RESET;

然后 DB2 告诉我 db2admin 不能撤销或授予自己权限(实际上它告诉我一个 id 不能撤销或授予自己权限)。

所以我很难过。我之前安装的 DB2(9.5,我不记得我使用的是哪个修订包)没有这个问题。

如何向本地管理员帐户授予必要的权限?我相信我需要这个才能运行我接下来需要执行的绑定命令:

db2 CONNECT TO MYDB;
db2 bind @db2cli.lst blocking all grant public sqlerror continue CLIPKG 20;
db2 CONNECT RESET;

任何帮助,将不胜感激。

编辑:我发现了一些与此相关的以下链接。仍然不确定如何让它工作,但至少我找到了一些文档。

  • http://www.db2teamblog.com/2009/06/whats-new-in-db2-97.html
  • http://lpetr.org/blog/archives/simplify-the-db2-9-7-security-model
  • http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.sql.ref.doc%2Fdoc%2Fr0000958.html
  • http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14288459
  • http://publib.boulder.ibm.com/infocenter/tivihelp/v4r1/index.jsp?topic=%2Fcom.ibm.tpc_V422.doc%2Ffqz0_t_preparing_to_install_db2_windows.html
  • http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.sec.doc%2Fdoc%2Fc0055206.html
  • http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.sec.doc%2Fdoc%2Fc0005479.html
db2 windows
  • 1 个回答
  • 72559 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve