在 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 …
这是针对 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)
我在以前的数据库中没有任何正在进行的事务,因为所有连接都被强制关闭并且数据库已关闭以进行脱机备份。我该怎么办?
我有一张这样的表:
| 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) 在另一个线程中:
OP 想要过去 365 天的滑动平均值。ROWS BETWEEN ...
如果可以保证每天恰好发生一次,则使用会很好,但这里的情况并非如此。RANGE BETWEEN ...
看起来很合适,但我不清楚它在 DB2 中的含义。不确定 db2 没有INTERVAL
类型是否重要,但用标记的持续时间模仿它。
指定当前行之前的行数范围或行数。如果指定了 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) 我们在 Windows 和 Linux 系统上使用 DB2 LUW 10.5 和 11.1,以防它与他的答案相关。
问题:是否有时间使用 4K 而不是 32K 是正确的?如果是这样,为什么?(当它可以使用时它的性能会更好吗?)或者,它只是史前时代的遗留附属物,当时 4K 只是页面大小?
背景:当我创建 DB2 数据库时,我总是只创建 4K、8K、16K 和 32K 表空间和关联的缓冲池。
我的经理在这方面向我提出挑战。(对他有好处 - 我应该知道这一点!)他认为我们应该创建一个 32K 的表空间并完成它。
我找不到任何告诉我的信息,例如,当行大小允许时,我们应该使用 4K 而不是 32K,因为 XYZ。它告诉我,我CAN做到这一点,但不是说/我应该在何时。
我在捕获 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 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 数据库大小(在磁盘中)的方法。但我找不到。
在 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 ×8
db2-luw ×8
db2-10.5 ×2
csv ×1
datafile ×1
db2-9.7 ×1
debugging ×1
exception ×1
maintenance ×1
performance ×1
restore ×1
size ×1
tablespaces ×1