在 PostgreSQL 和 SQL Server 中,默认页面大小为 8 KB,在 MySQL 中为 16 KB,在 IBM DB2 和 Oracle 中仅为 4 KB。
为什么这些页面尺寸如此之小?
是否有历史或内存使用原因?
是否有特定术语来描述与基数为 1 的关系?
我特别想到 RDBMS“特殊”单行表,例如DUAL(Oracle)、SYSIBM.SYSDUMMY1(DB2、Derby) 和RDB$DATABASE(Interbase、Firebird)。
在 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 …
我有一台装有 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
Run Code Online (Sandbox Code Playgroud)
这允许我附加到我的名为 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;
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,DB2 告诉我我的实际 Windows 用户帐户 (synprgcma) 无权向用户 db2admin 授予权限。
因此,如果我将第二个脚本更改为以下内容:
db2 CONNECT TO MYDB USER db2admin USING xxxxxxxx;
SET SCHEMA DB2ADMIN;
db2 …Run Code Online (Sandbox Code Playgroud) 我们使用的工具要求 DB2 数据库中的特定表定义主键。
有没有办法在数据库上使用 select 语句来查看给定的表是否有一个?
谢谢。
首先,我想将数据库从 IBM DB2 AIX 导出到 IBM DB2 窗口中。不幸的是,由于不同的操作系统问题,我无法使用 BACKUP 和 RESTORE 命令。所以我不得不求助于db2move命令。
我使用以下命令从远程 IBM DB2 AIX 中的dbemp数据库中导出了myschema模式和所有表:
db2move dbemp export -sn myschema
Run Code Online (Sandbox Code Playgroud)
当我运行该命令时,我以名为dbuser1 的用户身份登录。
它在当前文件夹中生成一堆文件。我将文件抓取到安装了 IBM DB2 LUW 的本地机器(Windows)中。
现在在我本地机器的 IBM DB2 中,我首先使用 IBM Data Studio(我也有一个本地dbemp数据库)删除了现有的模式myschema。
然后我使用以下命令导入文件:
db2move dbemp import
Run Code Online (Sandbox Code Playgroud)
它成功地将架构和表导入本地dbemp数据库。
当我执行上述操作时,我以用户winuser1登录。
我的本地计算机(Windows)中也有一个名为dbuser1的本地用户。在 IBM Data Studio 中,我创建了一个使用dbuser1用户连接到本地dbemp的连接配置文件,我可以浏览myschema模式和表,但我无法浏览表的数据(我遇到了权限错误)。用户winuser1可以浏览表的数据,但出于开发目的,我必须使用用户dbuser1连接到数据库。
所以我发现我可以像这样向表上的用户授予权限:
GRANT ALL ON myschema.table1 …Run Code Online (Sandbox Code Playgroud) 我知道如何检查数据库是否处于锁定状态,但我的问题是如何找出导致表 /db 锁定的查询。
如果数据库发生意外情况,是否会创建任何日志文件?
我通常使用 SQL Server,但对于这个项目,我必须学习 DB2。如果我能让下面的代码工作,我就为整个项目做好了准备。以下是我无法上班的基本示例。我想要做的就是创建一个已创建的全局临时表 (CGTT) 并向其附加数据。如果我使用声明的全局临时表,下面的相同代码将起作用,但出于我的目的,我必须有一个 CGTT。
CREATE GLOBAL TEMPORARY TABLE TEST_TBL(
KEY_ID BIGINT,
SOMETEXT VARCHAR(10)
);
INSERT INTO USERID.TEST_TBL
VALUES(123456,'TEST TEST');
SELECT * FROM USERID.TEST_TBL;
SELECT COUNT(*) FROM USERID.TEST_TBL;
Run Code Online (Sandbox Code Playgroud)
以上执行正常,没有错误。执行插入时,它甚至告诉我“更新了 1 行”。但是, select * 和 count(*) 都给了我 0 结果;我想知道这是否是一个权限问题,但是我可以拥有创建 CGTT 但不能插入的权限吗??
提供的任何帮助将不胜感激。提前致谢。
我最近与一位同事进行了讨论,他正在推动从生产查询中删除 order by 子句,因为order by 列与主键相同。
经过长时间的讨论,我试图解释他不能保证基于主键的排序,最后的结论是他不会推动更改 MSSQL 查询。
但他仍打算更改 DB2 查询。
我无法立即找到反驳 DB2 按主键排序查询的文章,目前我想知道它是否确实如此。
所以我的问题是,如果没有 order by 子句,DB2 如何对查询进行排序?它使用主键吗?
在并行系统中,如果没有 order by 子句,如何保证数据按顺序正确输出?
有人可以告诉下面明显的查询有什么问题:
db2 => select next value for schema_name.sequence_name;
Run Code Online (Sandbox Code Playgroud)
结果我得到:
SQL0104N An unexpected token "END-OF-STATEMENT" was found following
"schema_name.sequence_name". Expected tokens may include: "<table_expr>".
SQLSTATE=42601
Run Code Online (Sandbox Code Playgroud) db2 ×10
permissions ×2
size ×2
db2-luw ×1
deadlock ×1
export ×1
firebird ×1
import ×1
locking ×1
maintenance ×1
mysql ×1
oracle ×1
order-by ×1
postgresql ×1
primary-key ×1
sequence ×1
sql-server ×1
terminology ×1
windows ×1