标签: db2-luw

为什么 DELETE + REORG 不能释放磁盘空间 (DB2)?

在 DB2 中,我有一个包含大型二进制数据的表。现在我清除了整个表并运行了 runstats、reorg、runstats,但是占用的磁盘空间量没有改变。这里可能有什么问题?

该表位于我创建的自己的表空间中,如下所示:

CREATE BUFFERPOOL "MY_BP" SIZE 250 AUTOMATIC PAGESIZE 4096;
CREATE LARGE TABLESPACE MY_TBS IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 4096 MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 64 PREFETCHSIZE 64 BUFFERPOOL MY_BP OVERHEAD 10.500000 TRANSFERRATE 0.140000 FILE SYSTEM CACHING;
Run Code Online (Sandbox Code Playgroud)

我删除/重组如下:

DELETE FROM MY_TBL
RUNSTATS ON TABLE MY_TBL WITH DISTRIBUTION AND DETAILED INDEXES ALL
REORG TABLE MY_TBL
RUNSTATS ON TABLE MY_TABLE WITH DISTRIBUTION AND DETAILED INDEXES ALL
ALTER TABLESPACE MY_TBS REDUCE
Run Code Online (Sandbox Code Playgroud)

表 MY_TBL 在所有这些之前占用了 2.5GB,在删除/重组之后它只使用了3MB

FWIW:我正在运行 DB2/NT …

db2 maintenance database-size size db2-luw

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

恢复脱机备份后无法连接到 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万
查看次数

将逗号分隔的条目拆分为行

我有一张这样的表:

|   ID   |  OtherID  | Data
+--------+-----------+---------------------------
|  5059  |   73831   | 5103,5107
|  5059  |   73941   | 5103,5104,5107
|  5059  |   73974   | 5103,5106,5107,5108
Run Code Online (Sandbox Code Playgroud)

结果应该返回单独的行,如下所示:

|   ID   |  OtherID  | Data
+--------+-----------+--------------------------
|  5059  |   73831   | 5103
|  5059  |   73831   | 5107
|  5059  |   73941   | 5103
|  5059  |   73941   | 5104
|  5059  |   73941   | 5107
|  5059  |   73974   | 5103
|  5059  |   73974   | 5106
|  5059  |   73974 …
Run Code Online (Sandbox Code Playgroud)

db2 db2-9.7 csv db2-luw

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

如果 x 是日期,`(ORDER BY x RANGE BETWEEN n PRECEDING...)` 的含义是什么?

在另一个线程中:

/sf/ask/2643176161/

OP 想要过去 365 天的滑动平均值。ROWS BETWEEN ...如果可以保证每天恰好发生一次,则使用会很好,但这里的情况并非如此。RANGE BETWEEN ...看起来很合适,但我不清楚它在 DB2 中的含义。不确定 db2 没有INTERVAL类型是否重要,但用标记的持续时间模仿它。

文档说:(https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0023461.html

无符号常量 PRECEDING

指定当前行之前的行数范围或行数。如果指定了 ROWS,则 unsigned-constant 必须为零或表示行数的正整数。如果指定了 RANGE,则 unsigned-constant 的数据类型必须与 window-order-clause 的 sort-key-expression 的类型相当。sort-key-expression 只能有一个,并且 sort-key-expression 的数据类型必须允许减法。如果 group-bound1 是 CURRENT ROW 或 unsigned-constant FOLLOWING,则不能在 group-bound2 中指定该子句。

无符号常量如下

指定当前行之后的行数范围或行数。如果指定了 ROWS,则 unsigned-constant 必须为零或表示行数的正整数。如果指定了 RANGE,则 unsigned-constant 的数据类型必须与 window-order-clause 的 sort-key-expression 的类型相当。sort-key-expression 只能有一个,并且 sort-key-expression 的数据类型必须允许添加。

DB2 允许以下结构:

values current_date - 1
Run Code Online (Sandbox Code Playgroud)

默认单位日期是天,所以这意味着:

values current_date - 1 day
Run Code Online (Sandbox Code Playgroud)

鉴于此,我希望此示例能够正常工作:

create table test 
( …
Run Code Online (Sandbox Code Playgroud)

db2 window-functions db2-10.5 db2-luw

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

在 DB2 LUW 中,我什么时候应该使用 4K、8K 或 16K 表空间,而不是仅仅创建一个 32K 表空间并完成它?

我们在 Windows 和 Linux 系统上使用 DB2 LUW 10.5 和 11.1,以防它与他的答案相关。

问题:是否有时间使用 4K 而不是 32K 是正确的?如果是这样,为什么?(当它可以使用时它的性能会更好吗?)或者,它只是史前时代的遗留附属物,当时 4K 只是页面大小?

背景:当我创建 DB2 数据库时,我总是只创建 4K、8K、16K 和 32K 表空间和关联的缓冲池。

我的经理在这方面向我提出挑战。(对他有好处 - 我应该知道这一点!)他认为我们应该创建一个 32K 的表空间并完成它。

我找不到任何告诉我的信息,例如,当行大小允许时,我们应该使用 4K 而不是 32K,因为 XYZ。它告诉我,我CAN做到这一点,但不是说/我应该在何时。

performance db2 tablespaces db2-luw

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

显示 DB2 存储过程中发生错误的行号

我在捕获 SQLSTATE 和 SQLCODE 的过程中添加了一个 EXIT 处理程序,甚至找到了获取过程名称的方法,但我还需要知道错误发生的位置。建议非常感谢。

declare EXIT handler for SQLEXCEPTION
begin
    select sysibm.routine_specific_name, SQLSTATE, SQLCODE 
    into v_sp_name, v_sqlstate, v_sqlcode 
    from sysibm.sysdummy1;

    call dbms_output.put_line('Error in '||v_sp_name ' ['||v_sqlstate, v_sqlcode||']');
end;
Run Code Online (Sandbox Code Playgroud)

db2 stored-procedures debugging exception db2-luw

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

为什么 DB2 不允许创建名称中带有关键字“BACKUP”的数据库?

我正在使用 DB2 Express C v 10.5

我正在尝试创建名为“BACKUP”、“BACKUPTEST”、“BACKUP_TEST”甚至“TEST_BACKUP”的数据库。

在上述所有情况下,DB2 都会抛出如下错误:

SQL1001N “BACKUPTEST”不是有效的数据库名称。SQLSTATE=2E000


我尝试使用以下命令,它没有用。

> db2 create database BACKUP
Run Code Online (Sandbox Code Playgroud)

或者

> db2 create database "BACKUP"
Run Code Online (Sandbox Code Playgroud)

这显示错误为:

"SQL1001N "BACKUP_TEST" 不是有效的数据库名称。SQLSTATE=2E000"

db2 db2-10.5 db2-luw

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

如何为 DB2 数据库设置文件系统大小限制?是否可以?

我正在寻找一种在创建时限制 DB2 数据库大小(在磁盘中)的方法。但我找不到。

在 SQL Server 上,我们可以这样做:

Create Database MyDatabase
on (Name='MyDatabase_Data',
    Filename='c:\db\BdUnisanta_Data.mdf',
    Size= 20MB,
    FileGrowth = 10%,
    Maxsize=100MB)
log on 
    (Name = 'MyDatabase_log',
     Filename = 'c:\db\MyDatabase_Log.ldf',
     Size = 5MB,
     FileGrowth = 5%,
     MAXSIZE = UNLIMITED
     ) 
Run Code Online (Sandbox Code Playgroud)

DB2 中的等效形式是什么?是否可以?

db2 datafile db2-luw

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