IBM db2与oracle一样都是后台大型数据库,在我国许多银行的后台服务器都是db2。
db2的PENDING状态
- backup pending状态:是在修改数据库的日志模式所导致的;解决方法是对数据库再做一次备份。
- set integrity pending状态:是在load过程中,我们装载的数据发生违反参照完整性约束的行,导致表无法使用;结局方法:运行脚本:
set integrity for 表名
immediate checked for exception
in 表名 use <exception table name>//将异常行放入例外表中
DB2共有几种恢复方式?
三种
- 版本恢复:恢复通过使用一个以前建立的数据库备份,可以将数据库恢复到与原来状态完全一样。但只能恢复到你做的备份点上。
- 崩溃恢复:一般情况下自动完成,通过对系统参数配置,若服务器突然宕机,系统下次会启动读取日志,做过的进行redo,没做完的进行回滚。
- 前滚恢复:先进行版本恢复,再进行崩溃恢复。
分析import和load的区别。
import:
- 移动大量数据时速度变慢
- 创建支持XF格式的表和索引
- 可以导入到表,视图,别名中
- 在导入期间允许写的选项访问
- 所有导入的行都会被记录到日志
- 会检查约束
load: - 移动大量数据速度较快
- 表和索引事先必须存在
- 只能向表中导入
- 导入数据期间只能读操作,不允许写操作
- 触发器不会检查,会有唯一性检查。
若发布“select * from db2admin.employee”之后,系统返回错误信息“db2admin.employee是个未定义的名称”,分析是什么原因造成的?
- 可能是因为模式名schema不正确,当前并不是代表db2admin
- 可能是因为大小写有问题,当在建表的时候表名用上了引号,那么表名就会区分大小写。
在实验中曾发布如下语句:
create trigger reorder
after update
of qty on stock
referencing new as n
for each row mode db2sql
when (n.qty <=5)
insert into reorder values (n.itemno, current timestamp)
请解释该语句所实现的具体功能。分析该触发器能否阻止同一商品被重复插入reorder表中?若不能阻止,应该如何修改trigger?
语句功能:当顾客购买商品后,当商品库存小于5后,就往reorder中添加一条语句,代表该物品需要采购,该触发器无法阻止,修改如下:
create trigger reorder
after update
of qty on stock
referncing new as n ,old as m
for each row mode db2sql
when (n.qty<=5 and m.qty>5)
insert into reorder values (n.itemno,current timestamp)