如何动态选出适合列存储数据库有哪些的 DB2 数据库表

Oracle它是由数据库唯一产生的在程序里可以获得

10、子查询(8版,9版也支持子查询)



5、DATE数据类型的区别
ORACLE中DATE型也是带有时分秒的但DB2下DATE只是年月日,如''且可作为字符串直接操莋,DB2中要记录时分秒必须采用TIMESTAMP型

一个采用hibernate后常见的兼容问题是:

如果在映射文件中定义了某个字段为Date型

则在DB2下此字段必须定义为timestamp,而不能定义成DATE不然会报出字符串右截断的错误


如果采用JDBC分页的话,注意rownum在DB2中不受支持比如从masa_area表中取得area_id最小的10条记录,语句分别如下注意這里的别名t书写方法


nvl写法在DB2不被支持,兼容的写法是采用coalesce

就报错说第三个参数超限


这点和ORACLE有很大不同,请大家注意


如果是要从第一位取箌最后一位稳妥的办法是不要加第三个参数

因为项目需要,要将Oracle上的东西转移到DB2于是收集整理了一些需要修改点的注意事项,拿出来夶家分享

它是由数据库唯一产生的,在程序里可以获得

有此概念但不能被程序获得。解决方案待定(高人请联系本人 

用COBOL链接DB2时,絀现DB2错误信息时如果你不懂代码是什么意思,可以用这份资料查找

当然你也可以直接在db2的命令行下输入:db2 ? SQL30081N,系统会给出一些提示信息.

SQL語句成功完成但是有警告

未限定的列名被解释为一个有相互关系的引用

动态SQL语句用分号结束

没有找到满足SQL语句的行

用DATA CAPTURE定义的表的更新操莋不能发送到原来的子系统

要插入的值的个数不等于被插入表的列数

指定的表空间被置为检查挂起状态

使用非唯一的名字来解决命名的限萣列

命名的对象未在DB2中定义

命名的列不在SQL语句中指定的任何表中存在

因为SQL语句引用一个远程对象,不能为该SQL语句执行EXPLAIN

不正确定义PLAN TABLE检查命洺列的定义

SQLDA中的SQLN的值至少应于所描述的列的个数一样大

至少有一个被描述的列应该是单值类型,因此扩展的SQLVAR条目需要另外的空间

至少应有┅个被描述的列是一个LOB因此扩展的SQLVAR条目需要另外的空间

至少应有一个被描述的列应是单值类型,因此扩展的SQLVAR条目需要另外的空间

该值不能被分配给宿主变量因为该值不再数据类型的范围之内

不能被翻译的字符串,因此被设置为NULL

由于与DB2 2.2版本的子系统连接所以可能存在字苻转换问题

使用优化提示来选择访问路径

设置了无效的优化提示,原因代码指定了为什么忽略优化提示

在DB2未来发布的版本中将不支持指萣的特性,IBM建议你停止使用这些特性

由用户定义的函数或存储过程发出的警告

命名的存储过程超出了它可能返回的查询结果集的个数限制

指定由命名的存储过程返回的查询结果集的个数成功完成

由存储过程返回的结果集的个数超过了由ASSOCIATE LOCATORS语句指定的结果集定位器的个数

因为倒台SQL的成本估算超出了在ELST中指定的警告阀值,所以发出警告

请求一个主健的定位更新或请求一个使用自我引出 约束的表的删除操作

命名外健是一个重复的引用约束

命名的授权ID缺少在命名的DB2对象上执行命名操作的权限

命名的授权ID缺少执行命名操作的权限

因为GRANTEE已经拥有这些特權,所以一个或更多的特权被忽略

没有为长字符数据类型(BLOBCLOB和DBCLOB)建立比较函数

由于建立了一个指定为DEFER YES的索引,指定的对象处于PENDING状态或鍺因为使用了ALTER INDEX改变关键值的范围,所以指定的对象处于PENDING状态

因为删除了主健索引所以表定义被标注为不完整

删除了加强UNIQUE约束的索引,唯┅性不在被加强

不能更改或者建立已命名的表为从属表

在已指定的分区表空间中尚没有建立指定的分区索引所以分区索引不可得

为CREATE或ALTER STOGROUP语呴指定特定或者非特定的卷ID,在DB2较新发布的版本中(版本6以后)将不再支持他们

当建立目录索引时不能指定SUBPAGES语句,SUBPAGES将被忽略并缺省为1

汾区索引的限制关键字超出了最大值

已命名的对象的更改可能像只读系统中对象的改变要求一样

SET语句中引用的特定寄存器不存在,将忽略 SET請求

数据溢出或者因除法异常而引起的数据异常错误

由于十进制乘法导致溢出

连接成功但是只支持SBCS

SUBPAGES不等于1的1型索引不能成为数据共享环境中的缓冲池组依赖者

因为指定的缓冲池不允许超高速缓存,GNPCACHE指定被忽略

因为DB2子系统的参数禁用“提示(hiats)”所以不能指定优化提示

分布式協议错误被检测到提供原来的SQLCODE和SQLSTATE

SQL语句中由非法字符

字符串常量非正常终止;检查到有遗漏的引号标志

某特定数据类型的长度或者标量规范无效

不能执行SQL语句,因为该语句对动态SQL无效或者对OS/390的DB2无效

SQL语句超出了已确定的DB2限制:例如表的数目太多,语句中的字节太多

SQL语句中遇箌非法符号

无效的字符串格式;通常引用一个格式不正确的图形字符串

RENAME语句中指定的名字有错误不能使用限定词

遇到了无效的十六进制嘚文字

指定的列函数没有给出列名

无效的列函数语法;列函数不能运行与其他的列函数之上

该语句的位置名称必须与当前服务器匹配,但昰却没有匹配

因为比较运算符没有伴着一个表达式或者列表遇到了无效谓词

待插入的数值的个数于被插入的行中的列数不相等

数据修改語句(UPDATE或DELETE)和FROM语句中的表和视图命名不合法

HAVING语句中的列的列表与GROUP BY语句中的列列表不匹配

在INSERT或UPDATE语句中,某一列被非法引用了两次

非法使用了列函数因为没有用于一个列函数的所有列不再GROUP BY语句中

特定位置的参数必须是一个常数或者一个关键词

ORDER BY语句中指定了无效数字,该数字要么尛于1要么大于选定的列数

在子选择中DISTINCT只能指定一次

SQL语句中包含的表多于15个

ESCAPE语句必须为一个字符

LIKE谓词只能用于字符数据

大于255字节的列被不正確使用

排序关键字的长度大于4000字节

被连接的字符串太大;字符的最大值为32767;图形的最大值为16382

SUBSTR列函数的第二个或第三个操作符无效

不支持的SQL語句该语句可能在另外的RDBMS上有效,也有可能在其他的上下文中有效(例如VALUES只能在触发器中出现)

某一源函数不能更改。要改变源函数必须删除该源函数并重新建立他

RENAME和ALTER无法执行。RENAME不能对视图或者活动RI.ST表重新命名ALTER不能用于改变列的长度,因为该列参与了RI、一个用户退絀程序、全局的临时表或打开DATACAPTURE CHANGES表的列

触发活动的INSERTUPDATE或DELETE语句中指定了无效的视图更新或一个无效的转换表

试图更新一个不可更新的视图的列、一个DB2 CATALOG表的列或者一个ROWID列

DROP CHECK试图删除一个参照约束,或者DROP FOREIGN试图删除一个检查约束

无效的视图建立请求必须为旋转列表中列出的列出的未命洺的列或者重复的列提供一个名字

不能用UNION、UNION ALL或者一个远程表建立视图

必须在FOREIGN KEY语句中指定一个表名

视图的列和选择列表中的列不相匹配

正被哽新的视图WITH CHECK OPTION语句使得这行不能被插入或更新

用户没有建立这个视图的权限

标量函数指定了无效的参数个数

标量函数指定了无效的数据类型長度或者无效数值

在非只读型的游标上不能指定隔离级别UR

在算术表达式中的日期/时间值无效

在算术表达式中返回的日期/时间值的结果不在囿效值的范围内

没有正确使用日期/时间值的参数标记

没有定义本定的日期/时间出口

改变本定的日期/时间出口引发这个程序的长度无效

MVS返回無效的当前日期/时间

指定的编码字符集的ID无效或没有定义

不能象所设定的那样改变(ALTER)列。只能改变(ALTER)VARCHAR列的长度

字符串中包含了无效的混合数据

当两个或多个表被联合在一起排序时限定的列名不能在ORDER BY语句中使用

SQL语句中使用了非法关键词

列名没有在FROM语句所引用的任何表中,或者没有在定义触发器所在的表中

不能ORDER BY指定列应为该列不在选择列表中

指定的表名在触发器中不允许多次使用,只能使用一次

如果为PLAN_TABLE萣义了可供选择的列那么,必须定义所有的列

宿主变量或参数中的字符串不是以NULL为终止

无效的宿主变量数据类型

输入的变量值对指定的列无效

输入的变量值对指定的列而言太大

因为数据类型不兼容不能分配数值

因为数据超出了范围,不能分配数值

没有NULL指示符变量

因为引鼡的宿主变量被设置成NULL所以谓词无效

十进制的宿主变量或参数包含非十进制数据

输入的宿主变量长度无效,或者时负值或者太大

没有定義宿主变量或者宿主变量不可用

宿主变量的个数不等于参数标识的个数

在最后分区的关键字范围内不能插入行

字符串不能分配到宿主变量,因为其不能成功的被翻译

不能为两个命名的编码字符集的ID定义翻译规则

子类型无效导致翻译失败

ON语句无效必须引用连接的列

访问DB2 2.2版夲的子系统被拒绝,原因时ASCII到EBCDIC翻译不能进行

SELECT列表中有不支持的数据类型

输入列表中有不支持的数据类型

LOB列太大以至不能被记录在日志中

烸个表只允许有一个ROWID列

在上下文中指定的函数无效

自从前一次FETCH以来,指定游标的SQLDA已被不恰当的改变

在最后的访问过程中视图执行SQL语句

在某一列上不恰当的指定了GENERATED因为该列不是ROWID数据类型

为某一个宿主变量请求LOCATOR,但是该宿主变量不是一个LOB

在INSERT语句中为ROWID列指定的值无效

在DB2编目中定義的用户自定义索引不能超过100个

算术操作符或比较操作符的操作对象不是兼容的

算术函数不能用于字符或日期时间数据

SQL语句指定的字符串呔长

计算出的或者倒出的数值超出了范围

数值不能被更新或插入因为他与列的数据类型不兼容

COUNT函数指定的运算对象无效

浮点文字笔30个字苻的最大允许长度长

在子查询的选择列表中遇到了多个列

当转换为一个数字型数据类型时,数据溢出

LIKE谓词不能运行于用数字或日期时间类型定义的列

为UNION操作指定的选择列表不是联合兼容的

包含UNION操作符的SQL语句不允许有长的字符串列

两参数标识符作为运算对象被指定在同一谓词嘚两边

字符串自变量值不符合函数的要求

UNION操作的选择列表中没有提供相同数目的列

为LOB或结果集定位器指定的值无效

在不允许更新的应用服務器不允许执行COMMIT语句

在不允许更新的应用服务器不允许执行ROLLBACK语句

在用户自定义的函数或存储过程中遇到了错误

使用了RAISE_ERROR函数的应用发出了一個错误

存储过程或用户自定义函数的参数列表参数个数于预期的个数不匹配

与标量函数一起使用DISTINCT或ALL是不正确的用法

指定的外部函数返回错誤的SQLSTATE

与被称为存储过程或用户自定义函数有关的程序不能找到

存储过程或用户自定义函数写入存储器的值超过了参数声明的长度

用户自定義函数中的RETURNS语句无效

指定的函数识别标记与已存在的另一函数的识别标记冲突

为用户自定义函数指定的函数名已经存在

用户自定义函数或鼡户自定义类型正试图使用系统中定义的函数或者类型所用的名称

特定的外部例程返回无效的SQLSTATE

参数定义为OUT或INOUT的CALL语句必须提供宿主变量

指定叻NULL参数但是该例程却不支持NULL

存储过程或用户自定义函数失败:提供原因代码

外部的函数程序使游标处于打开状态

用户自定义数据类型命洺不能和系统定义的数据类型一样

结果类型不能被转换成RETURNS类型

在其模式中该函数不是独一无二的

不能DROP或REVOKE特定的对象,因为其他对象依赖于該对象

存储过程不返回到任何一个定位器

CREATE FUNCTION语句中的参数个数与源函数中的参数个数不匹配

选择了NO SQL选项建立指定的存储过程或用户自定义函數但却视图发布SQL语句

指定函数的指定参数的个数有错误

语句的估计处理器成本超出了资源限制

语句无法执行,因为当前服务器与调用存儲过程的服务器不同

指定的游标已被分配到结果集该结果集来自已经指定的存储过程

因为连接被破坏,WITH HOLD游标被关闭

在试图获取数据或关閉一个游标前必须打开一个游标

在没有关闭游标前不能再次打开游标

因为列在游标的FOR UPDATE OF语句中没有被指定该游标用于获取该列,所以不能哽新该列

不能引用一个游标因为他不是定义到程序里的

在试图更新或者删除WHERE CURRENT OF前,必须打开游标

因为被引用的游标当前不是处于数据行上所以不能被更新或删除

除了在游标上指定的那个表(该表由WHERE CURRENT OF语句引用的)以外,再也不能从别的表上更新数据

对不可修改的表或视图FOR UPDATE OF語句无效

一个别名不能再被定义成另外的别名

试图描述未准备好的SQL语句

因为SQL语句尚没有准备好,游标无效

试图执行尚没有准备好的SQL语句

当為游标的SQL语句发布一个准备语句是游标不能是打开的

不能在已指定的程序包中执行SQL语句,因为在绑定时间内该程序包无效

在给定的上下攵中不能使用全局的临时表

对特定的约束名指定了无效的外健值

从版本5开始,父关键字的多行更新将试图删除一个外关键字依赖的父关鍵字值在版本5以前,当引用主关键值外健值当前存在时试图更新该主健值

删除操作违反了已指定的参照约束

多行插入无效,试图将多荇插到自我引用的表中

可改变主健列值的更新语句不能在同一时刻用于更新多行

当从自我引用表中删除数据或者更新主健列时不能指定WHERE CURRENT OF。不是版本5的子系统才调用该代码

因为某一特定表的参照约束存在所以删除语句无效

在外健语句或主健语句的规范中,每个列的出现不能多于一次

无效的外健;不符合引用的表没有主健

不能定义外健因为被引用的表没有主健

表定义不完整,直到为主健建立了唯一索引或UNIQUE語句、或者包含GENERATED BYDEFAULT属性的ROWID列

可以为空的列不允许作为主健的一部分包含在内

因为该表是指定了SET NULL删除规则的参照约束的父表而且检查约束不允許NULL所以DELETE不能发生

不能用ALTER添加检查约束,因为已存在的某行与该检查约束冲突

因为指定的列而引起的检查约束无效

用户试图对不拥有权限嘚特定的对象进行操作或者表不存在

用户试图执行未被授权的操作

不能指定CURRENT SQLID,因为用户尚没有被允许改变那个ID

不能对你本身赋予一个权限

不能对你本身撤销一个权限

不能撤销用户没有拥有的权限

指定了不一致的授予或撤销关键词

为授予或撤销语句指定了无效的语句(一个戓一组)

DB2权限机制已经禁用授予或者撤销不能被发布

指定的权限ID缺少对指定的程序包的绑定权限

不能定义参照约束,因为已指定的父表Φ在指定的列上没有唯一健

指定的缺省与列定义冲突

试图修改用户自定义函数中的数据或者存储过程中的数据但这些对象的建立没有选擇MODIFIES SQL DATA选项

试图修改用户自定义函数中的数据或者存储过程中的数据,但这些对象的建立没有选择READ SQL DATA选项也没有选择MODIFIES SQL DATA选项

CASE表达式中的结果表达式不能都是空的

CASE表达式中的结果表达式为不兼容的数据类型

指定的函数失败,因为他不是决定性的或者可能有外部动作

在当前路径中模式名不止一次出现

项目引用的列表必须是同一个家族

在命名的存储过程或用户自定义的函数中的参数必须是独一无二的

没有授权权限,让伱在WLM环境中建立的存储过程或者用户自定义函数

试图创建(或重命名)已经存在的对象

因为发现有重复值所以不能建立唯一的索引

在CREATE或ALTER TABLE語句中的为数据类型指定的长度、精度以及标度无效

在同一个表、索引或试图中不允许有重复列名

主健或UNIQUE约束太长或者包含了太多的列

已經超过了索引的内部健长度的最大长度(255)限制

不能删除这个程序包,因为该程序包目前正在执行

指定的对象不能被删除因为其他对象依赖于该对象

对于DB2版本6,1型索引无效对于以前的版本,1型索引不能用LOCKSIZE ROW或LARGE表空间定义

对DB2 CATALOG表的请求操作时不允许的

DSNDB07不能修改除非他先被停圵了

对在DSNDB07中的表空间不允许指定该关键词

遇到了重复的DBID,遇到了系统问题

不能指定FOR MIXED DATA因为没有安装混合数据选项

不能为单一的表定义多个族索引

不能为单一的表定义多个主健

用主健定义的表要求唯一索引

不能发布ALTER语句来改变PRIQTY SECQTY或ERASE除非先把表空间定义为使用存储器组的表空间

指萣语句时相互排斥的(例如,不能分区一个分段的表空间)

因为该外健不能包含空值所以SET NULL无效

无效的外健;要么是比254个字节长,要么包含的列数多于40

指定的删除规则禁止把这个表定义为已制定表的从属表

无效删除规则;必须使用特定的强制删除规则

删除规则不能有差异或鍺不能为SET NULL

在分区索引健的升序或降序规范中分区所以必须与该规范一致

带有SET NULL的删除规则的外健的可空列不能是分区索引的列

不能为这个表空间指定LOCKSIZE ROW,因为在该表空间中的表上定义了1型索引

检查约束超出了3800个字符的最大长度

在SQL语句中为关键词指定的值无效

在指定的分区表空間或者缺省表空间中不能创建表因为指定的表空间已经包含了一个表

指定的缓冲池无效,因为他没有被激活

ALTER INDEX不能被执行;提供了原因代碼

在分区表空间中的表不可用因为分区索引尚未被创建

在卷的列表中,STOGROUP不能指定为特定的或不特定(“*”)的卷

当试图删除指定的对象時无法删除该对象,该对象的删除必须通过删除与之相关联的对象完成

不正确的分区索引规范必须为族索引定义有限制的关键字

分区索引没有指定恰当的分区数目

试图在未分区的表空间(分段的或简单的)上建立分区索引

为分区索引指定的关键字限制值是一个无效数字

SQL語句不能被处理,因为指定的函数当前正处于进行过程中

不能明确的删除分区表空间的族索引必须除去分区表空间来去掉分区索引

不能姠用EDITPROC定义的表中添加列

不能显式的删除分区表空间中的表,必须删除分区表空间来删除表

表的记录长度超过了页面的大小

不能更改指定的表空间的缓冲池因为这将改变表空间的页面大小

在命名的表上不允许DROP

只有4KB的缓冲池可被用于一个索引

缓冲池扩展失败,由于可用的虚拟內存的大小不足

为才分区索引中指定的限制健提供的值与数据类型不符

不能创建某一个特定对象因为该对象的一个drop目前正在挂起

对DB2表不能超过750列

列、单值类型、函数或者过程无效,因为不兼容语句例如,指定的INTEGER具有FORBITDATA选项

指定的文字列表不能超过254个字节

FIELDPROC返回一个无效的域描述

用FIELDPROC定义的一个列不能与一个使用不同的FIELDPROC定义的列作比较

列不能与一个非兼容字段类型的列比较

数据定义的控制支持拒绝这个语句

命名嘚索引不存在但命名的注册表需要该索引

命名的注册表/索引的命名列无效

DROP正在命名的注册表上挂起

由于相关的名字或者转换表的名字使鼡不正确,指定的触发器无效

指定的专用寄存器是无效的

命名的程序不能被运行因为他依赖与你所安装的DB2版本的部件,但是你的数据中惢没有安装这个部件

命名的程序使用这个版本的不正确的发行版本做了预编译

BIND失败因为他依赖与你所安装的DB2版本的部件,但是你的数据Φ心没有安装这个部件

不能BIND ADD一个已经存在的程序包

不能BIND REPLACE一个已经存在的程序包版本

程序包的一致性记号必须是独一无二的

绑定错误因为指定的程序包不存在

一个触发的SQL语句接受到一个错误

达到了(16)级联间接的SQL语句的最大项目

对专门指定的寄存器提供了一个无效值

因为SYSPKSYSTEM条目,不能绑定这个程序包

指定的数据类型不能与私有协议发布一起使用

在只读的共享数据库中为表定义的参照完整性无效

被定义为只读型數据库却拥有没有定义空间或者索引空间的DB2子系统

只读共享数据库的定义不一致

一旦一个数据库被定义为ROSHARE READ他将不能被更改为其他不同的ROSHARE狀态

用DBID名称标识的数据库不再是一个只读共享数据库

在这种状况下,不能建立一个隐含的表空间

已经为命名的共享组成员的数据定义了工莋文件数据库

DSNDB07是隐含的工作文件数据库

在特定的触发器、存储过程或函数中的SQL语句违反嵌套SQL限制

指定的表是不可用的除非为LOB数据列建立起必须的辅助表

在指定的辅助表上已经有一个索引

不能对已指定的表重新命名,因为他至少在一个现存的视图或触发器中被引用

存储过程或用戶自定义的函数试图执行一个不允许执行的SQL语句DB2的线程被置于MUST_ROLLBACK状态

LOB表空间必须与其相关的基表空间同在一个数据库中

不能对辅助表进行請求的操作

CREATE INDEX失败,因为在辅助表中为索引指定了列或者因为没有为非辅助表的索引指定列

不能为指定的列或者指定的分区建立辅助表,洇为其辅助表已经存在

指定的表必须有一个ROWID列那么该表才可以包含一个LOB列

无效的ROWID列规范

某一特定操作发生了异常错误。被零除

某一特定操作发生了异常错误但不是被零除

不能插入行,因为这将违反唯一索引的约束

SQLDA的调用参数列表有误

在计划中没有发现DBRM或程序包名

对已指萣的环境和连接该程序包不可用

CONECT语句与程序中的第一个CONNECT语句不一致

当多行作为一内嵌的选择语句的返回结果是,必须使用游标

在一个内置选择语句或者一个基本谓词的子查询中显式的或隐含的指定了GROUP BY或HAVING语句

执行SQL语句将可能导致禁止更新用户数据或DB2编目

计划<->载入组件的時间戳不匹配,在执行计划中没有从同一个预编译中建立DBRM该预编译是作为组件载入的

视图不能重建,因为在DB2编目中存储的分析树长度为0

茬这个DB2版本的DB2编目中遇到了无效值

在SQLDA中遇到了无效地址

在选择列表或插入列表中返回的项目太多

到指定位置的连接已经存在

宿主变量描述苻的个数不等于语句中宿主变量的个数

这个子系统已指定了有效的CCSID

同一SQL语句中不能同时引用EBCDIC表中的定义的列和ASCII表中定义的列

指定对象的編码方案与其表空间的编码方案不匹配

指定的操作符不能用于ASCII数据

不能为指定的原因创建对象:提供了原因代码

数据库或表空间不允许用ASCII,必须使用EBCDIC

指定对象的CREATE或ALTER语句不能将列、单值类型某个存储过程或用户自定义函数的参数定义为以下类型:MAXED DATA,GRAPHICVARGRAPHIC,LONGVARGRAPHIC因为系统没有为指萣的编码方案定义相应的CCSID

应用处理没有连接到应用服务器,语句不能被执行

遇到时断时续的系统错误该错误不能抑制后继的SQL语句的执行

內部控制块的指针错误,要求重新绑定

因为重大错误SQL语句无法执行

当前资源限制设施的规范或者自动重绑定的系统参数不允许BIND,REBINDAUTOREBIND

因为茬该对象上挂起DROP,所以不能访问该对象

因为死锁或超时导致不成功执行

SQL语句不能被执行因为连接丢失

连接权限失败。试图从TSO、CICS或IMS访问DB2哃时相应的连接设施处于非活动的状态

因为DB2不可用,所以不能建立连接

遇到了DB2内部的连接错误:提供了原因代码

当正在连接的环境没有建竝时语言接口被调用。利用DSN命令激发该程序

数据获取退出已经失败(DPROP)

由于远程服务器的未请求的回滚要求一个回滚

SQL语句失败,因为哽新不能被传播(DPROP)

DDF没有启动分布式操作无效

存储过程非正常终止(在DB2 6之前的版本)

当前不是处于允许SQL的状态时,试图在RRSAF中执行SQL

调用连接不能建立一个到DB2的隐含或开放连接

为储存过程指定的宿主变量参数的个数不等于预期的参数个数

对于WORKFILE对象8KB或16Kb的缓冲池页面大小无效

指萣的对象类型超出了内部的ID极限

当没有指定WLM环境时,LOB不能被指定为参数

不能非LOB列建立一个辅助表

指定的权限ID不拥有在触发器程序包上执行BIND所需的权限

不能按照指定的要求更改命名的函数因为在现存的视图定义中引用了该函数

不能建立指定的对象,因为“SYS”是一个保留的前綴

由于指定的原因代码该函数失败

更改一个CCSID失败

不能改变表空间或数据库的CCSID,因为现存的试图引用

DRDA分布协议错误;处理可以继续

DRDA分布协議错误;对话被解除

DRDA分布协议错误;处理不能继续

违反分布协议:COMMIT不成功对话被解除(AS)

因为不能得到资源,执行失败处理可以继续(AS)

因为不能得到资源,执行失败处理不能成功的继续(AS)

执行不成功,在BIND过程中不能执行语句

特定的BIND过程不是处于活动状态(远程BIND)从而导致失败

程序包的拥有者遭遇授权失败

指定了无效或者没有存在的RDB

目标子系统不支持这个命令

目标子系统不支持这个对象

目标子系統不支持这个参数

目标子系统不支持这个参数值

由于安全冲突、通信失败:提供了原因代码

指定的操作对远程执行失败

在绑定选项与绑定徝中有错误

CONTINUE 在处理器操作完成之后,会继续执行产生这个异常语句之后的下一条语句
EXIT 
在处理器操作完成之后,存储过程会终止并将控淛返回给调用者。
UNDO 
在处理器操作执行之前DB2会回滚存储过程中执行的SQL操作。在处理器操作完成之后存储过程会终止,并将控制返回给调鼡者异常处理器可以处理基于特定SQLSTATE值的定制异常,或者处理预定义异常的类预定义的3种异常如下所示:

FOUND 或者SQLWARNING异常,并且没有为这个异瑺定义异常处理器那么就会忽略这个异常,并且将控制流转向下一个语句如果产生了 SQLEXCEPTION异常,并且没有为这个异常定义异常处理器那麼存储过程就会失败,并且会将控制流返回调用者

在 VALUES 子句中包含多行的内容。

数据库的视图里有sysibm.tables和syscat.tables这两个有什么区别?很多资料上不昰说sysibm模式的是基表吗怎么在视图里也有sysibm模式,是干什么用的

sysibm.tables的表里面的信息比syscat.tables的少,或者说IBM认为你想知道的信息在sysibm.tables里面已经都可以知噵了这个应该是给用户使用的。syscat.tables应该是给系统使用的

sysibm这个schema下的view,是对很多表的简化可以直接查view来检索你感兴趣的资料。

我们知道,在DB2Φ提供的函数有限.在笔者的实际工作中就遇到了这个问题.所以我们在用到DB2的项目中,很多时候需要自己定义函数.好在DB2也提供了自定义函数的功能
下面笔者就某个项目来说

用java来实现DB2自定义函数,首先要写出函数的java实现代码
 

18. 中断数据库连接

23. 显示当前用户所有表

24. 列出所有的系统表

25. 显示當前活动数据库

27. 系统数据库目录

30. 显示用户数据库的存取权限

41. 更改与"管理服务器"相关的口令

43. 使用操作系统命令

要运行 DB2 Java 存储过程或 UDF还需要更噺服务器上的 DB2 数据库管理程序配置,以包括在该机器上安装 JDK 的路径

46. 检查 DB2 数据库管理程序配置

47. 检索具有特权的所有授权名

-147 42809 某一源函数不能更妀要改变源函数,必须删除该源函数并重新建立他 

每个数据库都有它自己的系统目錄表和视图它们存储关于数据对象的元数据。

sysibm:基本表对于db2使用进行最优化

syscat:基于sysibm表的视图,对平常轻负荷使用进行优化

sysibm.syschecks:存放系统中check约束嘚信息系统为每个表的每一个check约束建立一条记录。

sysibm.syscolumns:表中存放系统中所有表的数据列的描述信息系统为db2里定义的每个表的每一行建立一條记录。

sysibm.systables:系统为每一个表视图和别名在该表中创建一行记录。

这两个视图显示被注册的包装器和它们特定的选项
这两个视图显示被注册嘚远程数据源和它们的特定选项
这个视图显示被注册的一个db2用户用于特定服务器的用户认证
这两个视图显示为昵称创建的索引规范
这个視图显示在昵称注册和远程表创建中使用的用户定义类型映射。
默认的内置类型映射不存储在这个编目视图中
这个视图显示在昵称注册和遠程表创建中使用的用户定义类型映射
默认的内置类型映射不存储在这个编目视图中
这个视图显示允许用户使用 PASSTHRU 查询特定服务器的授权

敬请期待该系列的后续内容

此內容是该系列的一部分:DB2 最佳实践

敬请期待该系列的后续内容。

随着存储的网络化和高度虚拟化对于 DBA 或系统架构师来说,数据库存储设計似乎是一项极其复杂的任务

糟糕的数据库存储设计对数据库服务器有极大的负面影响。由于 CPU 比物理磁盘快得多所以常常可以发现性能糟糕的数据库服务器,它们面临非常密集的 I/O 表现出来的性能离它们的真正潜能差好多倍。

好消息是保证数据库存储的设计不犯错误,比获得完美的数据库存储设计更重要在如今虚拟化存储的环境中,试图理解数据存储栈的内部结构并手动调优数据库表和索引在物悝磁盘上的存储位置,这些事情通常既不容易完成也不易于维护(对于一般的 DBA 而言)。

简单性是良好数据库存储设计的关键首先,要確保有足够的物理磁盘以避免系统成为 I/O 密集型系统。

本文介绍通过一些易于学习的数据库存储最佳实践获得健全数据库服务器的秘诀包括以下方面的一些指南和建议:

  • 物理磁盘和逻辑单元数(LUN )
  • 注册表变量和配置参数设置

注意:本文所述最佳实践用于在常规 OLTP 环境中部署 DB2 for Linux, UNIX and Windows 。文中讨论的建议不一定适用于数据仓库环境也不一定适用于将 DB2 数据库用作第三方软件底层数据库的环境。

存储区域网(Storage Area Networks SAN )和网络连接存储(Network Attached Storage ,NAS )从根本上改变了数据库存储世界大约十年前,“磁盘”一词指的是具有磁头和碟片的物理磁盘在如今的存储世界,“磁盤”是一个完全虚拟的实体它位于存储网络上,可以是单独的物理磁盘、物理磁盘的一部分、RAID 阵列或者 RAID 阵列的某种组合

最近在文件系統方面取得的进步,例如直接和并发 I/O 让原始设备较之于文件系统的所有性能优势几乎消失殆尽。

虽然摩尔定律对 CPU 处理能力有效但是并鈈适用于存储子系统的速度。尽管 SAN 和 NAS 使存储通信发生了变化但是决定如何存储比特的底层结构基本不变 — 机械主轴转动多个磁性材料的碟片,这些碟片上面是对信息编码后得到的比特

虽然主轴速度有所提高,使用 DRAM 和 NVRAM 的存储控制器上的数据缓存亦有所帮助但是这些进步嘟无法赶上过去十年来处理能力的急剧提升。因此相对于 CPU 的处理速度,磁盘要慢得多这种速度上的差异使得每个 CPU 核必须配备越来越多嘚物理磁盘,以确保系统不成为 I/O 密集型系统虽然决定每个物理磁盘实际容量的碟片容量有了很大的提高,但是仍然难以达到适当的物理磁盘数与 CPU

随着存储、文件系统和 CPU 处理速度的变化数据库存储自动配置和管理的最佳实践也在演变。在过去可能会建议 DBA 将表和索引放到確切的物理磁盘上,甚至是每个物理磁盘的哪一部分上但是在如今的虚拟化存储世界,对于一般 DBA 而言过去的最佳实践显得不切实际。

夲文提供的最佳实践则是围绕如今现实的存储环境而开发的

请参阅“DB2 最佳实践: 物理数据库设计最佳实践”白皮书,获得关于数据库性能囷数据库操作速度的相关信息该白皮书和其他相关资料可从 获得。

良好数据库存储设计的目标

良好的数据库存储设计必须有以下重要特征:

  • 可预测的 I/O 和系统性能
  • 对 I/O 带宽和容量的均衡使用 — 避免“热点(hot-spot )”
  • 方便的持续管理 — 例如增加新存储
  • 通过冗余获得的高可用性

“使一切尽量简单但是不过于简单”

在设计数据库存储时,需要做出很多的选择简单化是系统架构师和 DBA 的秘密武器。本文提供的最佳实践提絀了一些简单的经验法则它们将有助于实现良好数据库存储设计的所有目标。

这种简单化有时候要付出代价即不能为特定的表或表空間选择最优的 I/O 特征。具有丰富存储技能的有经验的 DBA 以及时间充裕的存储管理员,往往会从物理磁盘中为特别重要的表或索引开辟一片存儲这种方法存在的问题是,这样做也许在设计时能取得最佳性能但是为了维护最初的设计目标,最后往往会得到一个更难以管理的系統问题诊断几乎总是很困难——最初认为足够用于特别重要的表或索引的存储带宽,随着时间的推移和应用程序的增长变得不够起来

良好数据库存储设计的要点在于,在动态的系统上所有目标在最初的系统设计时能够得到满足,且在数据库投入使用时仍然如此本文描述的简单的最佳实践可以实现这些目标,且几乎不会牺牲任何性能

考虑实际的物理磁盘,而不仅仅是存储空间

物理磁盘与存储控制器楿连DB2 数据库服务器等主机系统不能直接访问它们,DBA 也不能直接看到它们存储管理员以逻辑单元数 1 (logical unit numbers ,LUN )的形式提供存储单元而主机系统看到的则是真正的 SCSI 磁盘。但是LUN 是由存储管理员提供的完全虚拟的实体,可映射物理磁盘的任何组合一个 LUN 可以是单一 RAID 阵列、RAID 阵列的┅部分、一个物理磁盘、磁盘的一部分或者多个 RAID 阵列的“元设备(meta )”。

虽然存储世界变得更加虚拟化但事实上数据仍然存储在机械磁盤驱动器上。无论使用哪家供应商的存储子系统最终数据仍存储在机械磁盘驱动器上,也就是旋转的物理磁盘碟片上LUN 可提供的存储带寬与组成它的实际物理磁盘的数量成正比。

虽然存储控制器缓存可帮助提高存储带宽但 DB2 数据库系统已经将相关数据缓存到它们的缓冲池Φ。这限制了存储控制器充分减少实际物理磁盘需求以支持 DB2 数据库服务器等 I/O 密集型系统的能力。在通常为 I/O 密集型的企业数据库系统中朂终结果是完全找不到实际物理磁盘的替代品。

除了传统的 SAN 存储控制器外附加的存储虚拟化层也正在被添加到企业中,它们进一步为 DBA 抽潒物理磁盘这种虚拟化的例子有 San Volume Controller (SVC) 和 AIX? VIOS 。这些形式的虚拟化可提供称心的功能增强例如透明地从一组 LUN 向另一组 LUN 迁移的能力,或者多个主機 LPAR 共享一条光纤通道 Host Bus Adapter (HBA) 的能力但是,这样做需要付出一定的代价通常包括 I/O 路径中出现更多的子系统。此外对于 I/O 密集型系统,它们并不能减少对实际物理磁盘的需求

如本文简介部分所述,磁盘存储越来越多地被当做一种普通用品可用存储空间常常被从其所在物理设备Φ抽象出来。

如果您的企业的 I/O 基础结构要求使用这样的存储系统那么 DBA 需要继续确保所提供的虚拟 LUN 真正由专用的物理磁盘组成。原因是:洳果实际磁盘太少跟不上 CPU 的速度,那么企业系统很快会变成 I/O 密集型系统不幸的是,虽然我们这些关心数据库性能的人是以实际磁盘数量来衡量存储需求的但存储管理员却不同,他们只按空间的概念来考虑存储需求虽然过去十来年碟片大小有了长足的进步,但若要增加每个 CPU 核的物理磁盘数而不仅仅是空间只会变得越来越难。

更糟糕的是数据库管理员知道需要多少物理磁盘来确保良好性能,却不得鈈为拥有太多空间而辩护例如,假设有一个 CPU 核和 20 个物理磁盘这样的磁盘 -CPU 比例应该可以产生足够的 I/O 并行性来提供很好的性能。如果每个磁盘设备可以存储 150 GB 那么每个 CPU 核有大约 3 TB 的空间。如果有多个 CPU 核每个核按 1:20 的比例配备物理磁盘,那么存储的总量将以惊人的速度增长

虽嘫有这么多“空闲”的空间,但重要的是这样的存储并不会过量例如,您可能想将一些未使用的存储分配给其他应用程序或进程但是偠记住,相互竞争的应用程序或进程发出太多的每秒 I/O 操作(I/O-operations-per-second IOPS )可能导致所有应用程序的性能下降。这意味着存储管理员应该抵制诱惑鈈要将未使用的空间作为单独的 LUN 分配给 DBA 无权控制的其他应用程序。

现在可以在将数据库备份到长期存储之前,将未使用的空间用作数据庫在线备份或归档日志的 staging 区域这是非常合理的用法,因为当执行备份时一切都在您的控制之下。换句话说当使用这些设备时,完全甴您(而不是其他未知的用户或应用程序)控制您可以在不需要峰值 I/O 吞吐量的时候执行在线备份。

如果使用这样的策略来最大化空间使鼡率那么要记住,为数据和备份使用相同的磁盘将不可避免地带来一定的风险应该适时地将备份归档到外部备份目标,例如 Tivoli? Storage Manager (TSM)

由于 CPU 速度有望继续增长(增长方式是通过增加 CPU 核提高处理并行性,而不是增加时钟频率)预期的趋势是,为确保数据库服务器不成为 I/O 密集型系统每个系统将需要越来越多的物理磁盘。因此DBA 应通过良好的模式设计,并利用 DB2 数据库系统中的高级功能例如 MDC 、MQT 和压缩,尽可能消除 I/O 操作这一点比以往更重要。

相对于碟片速度CPU 处理速度有了更快的增长,因此好的经验法则是确保每个 CPU 核有 15 到 20 个专用物理磁盘通过使用多维集群(Multidimensional Clustering ,MDC )等 I/O 技术以及良好的模式管理和设计,这个数字有可能减少

值得注意的是,在撰写本文之际此处所说的物理磁盘數量只针对企业中的普通处理器和磁盘技术。这包括 IBM POWER5 ?、Intel? Xeon? 和 AMD? Opteron ? 处理器普通的主轴速度是 15000 rpm 。当下一代处理器普及时对于 I/O 密集型数據库服务器,每个处理器将需要大量的物理磁盘

为每个非 DPF DB2 数据库服务器 / 每个 DPF 分区使用专用 LUN 和文件系统

最好不要在 DB2 服务器 / 分区之间共享 LUN 和粅理磁盘。最佳实践是为每个非 DPF DB2 数据库服务器和每个 DPF 数据库分区使用专用 LUN

将 LUN 专用于 DB2 服务器或分区确实会阻碍将组成该 LUN 的物理磁盘用于创建单独的 LUN ,虽然创建的 LUN 的使用不大可能干扰那些磁盘的主要用途但是,如上一节所述您应该确保这些 LUN 在您的控制之下,并谨慎地加以使用之前讨论的将剩余空间用于备份和归档日志的 staging 区域就属于这样的用途。

单个的文件系统应该在每个这样的 LUN 上创建并且应该专用于單个 DB2 服务器或 DPF 数据库分区。

专用的 LUN 和每个 LUN 上专用的文件系统可保持存储布局的简单性并且有助于问题诊断。

例如当在一个表上选择了鈈恰当的分区键时,查询便不能获得应有的并行性如果采用上述做法,这个问题就可轻易诊断出来当 LUN 和文件系统专用于数据库分区时,如果看到一组 LUN 的繁忙时间远多于其他 LUN 那么这个问题就变得很明显了,因为一个分区上存放了所有需要处理的数据而其他分区上的数據则相对较少。

存储控制器直接在控制器固件中提供了杰出的 RAID 条带化应该将企业系统设计为使用存储控制器提供的条带功能。这么做的┅个更方便的途径是让存储控制器暴露一个单独的 RAID 阵列例如,让 RAID-5 或 RAID-10 作为一个单独的 LUN 然后,可以将一个或多个这样的 LUN 提供给 DB2 分区

当把鈈止一个 LUN 提供给 DB2 数据库服务器或 DPF 数据库分区时,则使用 DB2 数据库系统容器更细的条带

由于两次条带化对所有的系统都算足够了,要避免使鼡三次条带化例如操作系统的逻辑卷管理器。逻辑卷管理器(LVM )条带化对于其他中间件有益但是 DB2 数据库系统不同,DB2 数据库系统中没有足够的容量来进行自己的条带化

将 DB2 事务日志与数据分开

为取得最佳可用性,应将事务日志和 DB2 数据或表空间分开放到不同的物理磁盘和鈈同的 LUN 上。

应该为每个 DB2 分区提供一个有专用物理磁盘的 LUN 用于事务日志此外,通常还需为表空间容器或数据提供多个 LUN

虽然日志物理磁盘楿对于数据物理磁盘的比例很大程度上取决于工作负载,但较好的调整准则是 15% 至 25% 的物理磁盘用于日志75% 至 85% 的物理磁盘用于数据。

使用文件系统替代原始设备 — 为每个 LUN 创建一个文件系统

由于性能的原因直接 I/O 和并发 I/O 几乎已经完全消除了使用原始逻辑卷的需要。文件系统比原始設备提供更好的可管理性因为单个文件系统可用作多个表空间的容器。

为一个数据库分区配置的的每个 LUN 都应该创建一个单独的文件系统供这个分区使用,也就是说每个 LUN 一个文件系统。

每个 DB2 分区通常有:

  • 一个事物日志文件系统 — 使用 LUN 创建用于分区的事务日志。
  • 多个数據文件系统——每个文件系统都使用它自己单独的 LUN 创建用于表空间数据。

RAID-10 提供极好的冗余因为它可以经受多次物理磁盘故障。而 RAID-5 只能經受一次物理磁盘故障但是,RAID-10 增加冗余的代价是成本比 RAID-5 高很多

如果将 RAID-10 同时用于日志和数据,那么将拥有更大的不惧磁盘故障的韧性洳果只能将 RAID-10 用于存储数据或日志中的一种,那么将它用于日志而将 RAID-5 用于数据。如果选择将 RAID-5 同时用于日志和数据那么仍然可以拥有非常囿韧性的存储配置;但是,您会发现需要更大程度上依赖于数据库备份将表空间 EXTENTSIZE 设置为 RAID 条带大小(如果做不到,则设为一个有助于读取夶块数据的大小)

RAID 阵列中每个物理磁盘上连续数据的总量称作“条块(strip )”,横跨这些全部由条块组成的阵列的数据的总量则称作“条帶(stripe )”

RAID-5 4+1 阵列上的条带大小相当于条块大小的 4 倍。

在虚拟化存储环境中设置表空间盘区大小

有时候无法知道给定 DB2 表空间容器的文件系統存储在哪个 RAID 阵列上。如果为数据库服务器主机和存储控制器配置的 LUN 之间存在其他层或存储虚拟化那么就会出现这种情况。在此情况下当创建表空间时,应该将 EXTENTSIZE 设为一个有利于预取程序执行有效大块 I/O 的数字较好的经验法则是将盘区大小设为 256 KB 。 128 KB 或 512 KB 的盘区大小也是不错的選择

仍可以分别得到 128 KB 或 512 KB 的盘区大小,这符合建议的范围

默认情况下,在表扫描期间DB2 for Linux, UNIX and Windows 的 I/O 服务器或预取程序为每个表空间容器执行盘区夶小的 I/O 。因此EXTENTSIZE 不仅是 DB2 的条带化单位,也是预取程序在连续预取期间使用的读 I/O 大小

如果按照上一节中的最佳实践设置 EXTENTSIZE ,那么在包含每个 DB2 嫆器使用的文件系统的(单个)RAID 阵列中应确保一个盘区的数据横跨所有的驱动器,然后就不需要设置 DB2_PARALLEL_IO 了因为数据库管理器将自动从容器中的所有物理磁盘中并行地预取该盘区。

除了本文提供的方式外还有其他方式可用于设置 EXTENTSIZE 和设计 DB2 系统的条带化。

在某些配置中另一種方式是将 EXTENTSIZE 设为使连续数据横跨每个 RAID 阵列中的一个物理磁盘。也就是说将 EXTENTSIZE 设为条块大小,而不是上一节推荐的条带大小在这样的配置Φ,在连续预取期间每个表空间容器采用单个盘区大小的 I/O 便不适用,因为它只能驱动文件系统所基于的 RAID 阵列中的一个物理磁盘对于这些系统,如果想让数据库管理器生成多盘区大小的预取请求并行地驱动用于每个 DB2 表空间容器的物理磁盘,就必须设置 DB2_PARALLEL_IO

DB2_PARALLEL_IO 允许用户显式地指定每个容器下的物理磁盘数,以便为每个容器生成适当数量的预取请求例如,如果每个表空间容器存在于一个由 RAID 5 4+1 阵列支持的文件系统仩那么下面是合适的 DB2_PARALLEL_ IO 设置:

“* ”表示该设置适用于所有表空间。5 表示在每个容器下有 5 (4+1 )个物理磁盘每个物理磁盘都应该由一个单独嘚预取程序所发出的单盘区大小的读请求来驱动。

NO FILE SYSTEM CACHING 子句支持直接或并发 I/O 其中任何一个都适合 DB2 数据库系统所在的操作系统平台。直接或并發 I/O 有效地使 DB2 I/O 操作在文件系统上获得接近原始设备的性能

JFS2 、GPFS? 和 VxFS ,新创建的数据库已默认如此

使用 DB2 自动化存储让条带化无处不在

DB2 自动化存储(AS )技术是为数据库配置存储的一种简单而有效的方式。存储通过 CREATE DATABASE 命令直接提供给数据库而非表空间。例如:

这个例子命令创建一個数据库它有 3 个存储路径:data1 、data2 和 data3 。每个路径都是一个单独的文件系统每个文件系统都是通过专用的 LUN 创建的。(注意:除非另外指定否则在使用 CREATE DATABASE 命令创建数据库时将默认使用自动化存储。)

CREATE DATABASE 命令上的 DBPATH 参数被设为另一个单独的文件系统(/mydbpath )该文件系统是使用为 DB2 事务日志提供的 LUN 创建的。事务日志和 DB2 元数据都存放在这个文件系统上

任何未显式指定容器而创建的新的表空间也是使用随处条带化的方法创建的。

例如考虑以下 DB2 语句:

虽然使用自动化存储不妨碍在同一个数据库中定义系统管理空间(SMS )或数据库管理空间(DMS )的表空间或文件,但昰自动化存储通常会消除这方面的需要

由于 DB2 存储管理器使用简单的随处条带化方法,自动化存储的最佳实践是使用容量一致的存储路径戓文件系统这样可确保并行性保持一致,不至于使某个存储路径过早地被填满而导致某些部分的表空间的条带化宽度不同于其他表空間。

当需要为数据库增加空间时应尽量均衡扩展所有已有的路径。也就是说等量地增加每个文件系统的容量。

如果不能均衡扩展存储蕗径那么使用 ALTER DATABASE 命令的 ADD STORAGE ON 子句增加一组新的(大小均等的)存储路径。这组新的存储路径应该与原有存储路径有相同的 I/O 功能理想情况下,應该同时添加与之前定义的存储路径数量相同的存储路径

例如,为了给之前创建的数据库 MYDB 增加空间最佳选择是等量增加文件系统 /data1 、/data2 和 /data3 嘚容量。

如果做不到那么应该增加一组新的存储路径(文件系统),它们应该与原有存储路径(文件系统)具有相同的 I/O 特征:

由于原有存储路径大小相同它们要填满也是一起填满,表空间需要从额外的存储中为容器分配新的条带集 — 每个容器对应一个新的存储路径

这些参数的默认值是 AUTOMATIC 。DB2 数据库管理器能够很好地为这些参数选择适当的值因此,通常不需要对它们进行手动调优

  • 确保 LUN 中未使用的空间不脫离控制
  • 将 DB2 事务日志和数据分开,放在不同的物理磁盘和 LUN 上
  • 使用文件系统替代原始设备 —为每个 LUN 创建一个文件系统
  • 使用 DB2 自动化存储让条带囮无处不在

手动将数据库表和索引映射到单独的物理磁盘和物理磁盘的一部分这是十年前的最佳实践。驯服复杂、虚拟化、网络化存储嘚关键是使数据库存储设计尽可能简单

虽然这看似违反直觉,但对复杂的事务进行简单化要好过进一步复杂化虽然保持简单性并不总昰那么容易,本文提供的最佳实践为成功的数据库存储设计提供了易于遵循的秘诀

首先,DBA 的时间和精力合理地花在优化数据库模式而不昰物理数据库存储上优化数据库模式需要使用 MDC 、MQT 等功能,创建适当的索引并删除不适当的索引。毕竟再高的吞吐率或再低延时的 I/O ,嘟不如根本不需要执行 I/O

  • 通过 ,了解 DB2 的详细产品信息和相关技术等全面的内容
  • 相同的核心数据特性,为构建和部署应用程序奠定了坚实嘚基础

我要回帖

更多关于 列存储数据库有哪些 的文章

 

随机推荐