下列问题涉及诊断表的结构和使用。
- 当您在目标表上执行诸如 INSERT 或 SET Database Object Mode 语句这样的单个语句时,START VIOLATIONS TABLE 语句的
MAX ROWS 子句对可插入到诊断表内的行数设置限制。
- MAX ROWS 子句仅对该表作为诊断表的操作限制行数。
- 当某表作为诊断表时,它不可在它之上定义触发器或约束。
- 当某表作为诊断表时,用户可在该表上创建索引,但索引的存在会影响性能。您不可将诊断表上的唯一索引设置为 FILTERING 数据库对象模式。
- 如果对象表有违反表和诊断表与它相关联,则以级联模式(缺省的模式)删除对象表会导致违反表和诊断表也被删除。
- 如果以受限的模式删除目标表,则 DROP TABLE 操作失败(因为存在违反表和诊断表)。
- 一旦为目标表启动违反表,您不可使用 ALTER TABLE 语句来添加、修改或删除目标表、违反表或诊断表中的列。在您可修改任何这些表之前,您必须为目标表发出 STOP
VIOLATIONS TABLE 语句。
- 在 Insert、Update、Delete、Merge、SET CONSTRAINTS 或 SET INDEXES 操作期间,在数据库服务器使用诊断表之前或之后,它不清除诊断表的内容。
- 如果在 START VIOLATIONS TABLE 语句中指定的目标表是分片的,则诊断表以轮转法策略在目标表被分片的同一 dbspace 之上分片。
要在演示数据库中为名为
stock 的目标表启动违反表和诊断表,请输入下列语句:
START VIOLATIONS TABLE FOR stock;
由于您的 START VIOLATIONS TABLE 语句不包括 USING 子句,因此缺省地命名诊断表为
stock_dia。
stock_dia 表包括下列两列:
列一 |
列二 |
gbasedbt_tupleid objtype |
objowner objname |
对于目标表,此列的列表展示诊断表与违反表之间的差异。尽管违反表有与目标表中每列相匹配的列,而诊断表的列不与目标表中的任何列相匹配。通过任何 START VIOLATIONS
TABLE
语句创建的诊断表都有相同的列,有相同的列名称和数据类型。
要获取更多关于诊断表与违反表之间关系的信息,请参阅 目标表、违反表和诊断表之间的关系。